pytest-given
pytest 9.0.3 · pytest-given 0.1.0 ·
Term:
Basic scenario with when/then and a JSON attachment
billing happy-path ✓ passed 0ms
Given
a coffee machine
When
I insert $2
Then
I get a coffee
Machine state
{
  "coffees": 9,
  "price": 2
}
Plain text attachment
billing ✓ passed 0ms
Given
a coffee machine
a printed receipt
Receipt
Coffee x1     $2.00
----------------
Total:        $2.00
When
the total line is read back
Then
it shows the $2.00 total
Generator fixture with teardown
✓ passed 0ms
Given
a database connection
When
I run a query
Then
the connection is open and the query was logged
T-string with a non-parametrize value (neutral highlight)
✓ passed 0ms
Given
a coffee machine
I have some coins in hand
When
I insert $5
Then
the machine has 9 coffees left
Helper functions can record their own steps
billing ✓ passed 0ms
Given
a coffee machine
When
I insert $2
the coin is validated for $2
the balance is updated
Then
the coin is accepted
a coffee is dispensed
the machine state is consistent
Final state
{
  "coffees": 9,
  "price": 2
}
Top-level `given` block and deeply nested steps
billing ✓ passed 0ms
Given
a coffee machine
a loyalty card with 5 points
When
I place a large order
I select 3 coffees
I apply loyalty discount
the loyalty card is validated
the discount is calculated
Then
the order is processed correctly
the coffee count is updated
the loyalty points are deducted
the remaining points are valid
Loyalty state
{
  "points": 2
}
the machine state is consistent
Final machine state
{
  "coffees": 7,
  "price": 2
}
An expected error, narrated as when + then (when_then)
billing validation ✓ passed 0ms
Given
a coffee machine
a machine that has sold its last coffee
When
a customer tries to buy a coffee
Then
the machine reports it is sold out
Many tags (the report collapses them behind a +N pill)
billing loyalty discounts happy-path regression +2 ✓ passed 0ms
Given
a coffee machine
a loyalty card good for a $1 discount
When
I buy a coffee with the discount
Then
I pay $1
a coffee is dispensed
Failure rendering (intentionally failing)
✗ failed 85ms
Given
a coffee machine
Then
the machine has 20 coffees
assert 10 == 20
site-packages/_pytest/runner.py:353: in from_call
    result: TResult | None = func()
                             ^^^^^^
site-packages/_pytest/runner.py:245: in <lambda>
    lambda: runtest_hook(item=item, **kwds),
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
site-packages/pluggy/_hooks.py:512: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
site-packages/pluggy/_manager.py:120: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
site-packages/_pytest/logging.py:850: in pytest_runtest_call
    yield
site-packages/_pytest/capture.py:900: in pytest_runtest_call
    return (yield)
            ^^^^^
site-packages/_pytest/skipping.py:268: in pytest_runtest_call
    return (yield)
            ^^^^^
site-packages/_pytest/runner.py:179: in pytest_runtest_call
    item.runtest()
site-packages/_pytest/python.py:1720: in runtest
    self.ihook.pytest_pyfunc_call(pyfuncitem=self)
site-packages/pluggy/_hooks.py:512: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
site-packages/pluggy/_manager.py:120: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
site-packages/_pytest/python.py:166: in pytest_pyfunc_call
    result = testfunction(**testargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^
src/pytest_given/capture/decorators.py:275: in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
examples/coffeeshop/test_coffeeshop.py:204: in test_failing
    assert machine['coffees'] == 20
E   assert 10 == 20
Skipped scenario rendering
○ skipped 0ms
Skipped: demonstrates skipped status
Parametrized test (renders as a parameter table)
billing ✓ passed 0ms
Given
a coffee machine
When
I insert ${euros}
Then
the purchase is allowed: {expect}
euros expect status
1 False
2 True
3 True
Parametrize value surfaced as a given (Annotated)
billing ✓ passed 0ms
Given
a coffee machine
an order for a {cup_size} ml cup
When
I brew the cup
Then
the machine has one fewer coffee
cup_size status
200
350
Brew {cup_size} ml (templated scenario name)
billing ✓ passed 0ms
Given
a coffee machine
When
I brew a {cup_size} ml cup
Then
the machine has one fewer coffee
cup_size status
200
300
All cases skipped
○ skipped 0ms