[pytest-dev] Need access to parameter IDs during pytest_collection_modifyitems
Pete Savage
psavage at redhat.com
Thu Apr 6 06:26:04 EDT 2017
Hi all,
Forgive this seemingly useless requirement. We have the requirement to collect the parameters which
are used in a parametrized test to pass to a test case results system.
Currently I am pulling out the parameters using the item.callspec.params except there are issues
where the parameter is an object and has a differing repr than that id that was used in the idlist.
To keep things consistent, I would like to tell the test case result system the ID of the parameter
that was used for the test, if one is available and if not to fall back to the object.
This is basically being used to describe a whole set of tests during a --collect-only that _should_
run based on parametrization and passing those into the results system, so that they can be
populated across multiple smaller runs with the actual results.
The problem is this information is not available on the item object. Here is what IS available:
Consider the following contrived test
---
import pytest
@pytest.mark.parametrize('num', [1, 2, 3], ids=["one", "two", "three"])
@pytest.mark.parametrize('letter', ['a', 'b', 'c'], ids=["A", "B", "C"])
def test_something(num, letter):
print num, letter
---
During the modifyitems hook I can access the following:
* item.callspec.params
* gives me a dict {'num': 1, 'letter': 'a'}) - but this doesn't give me IDs
* item.callspec.indices
* gives me a dict {'num': 0, 'letter': 0}) - this is great that if I had the ID list for
each param I could look up the right one
* item.callspec._idlist
* gives me a list ['A', 'one']) - this is great except I don't know which ID is for which
parameter
* item._getobj().parametrize
* gives me <MarkInfo 'parametrize' args=('letter', ['a', 'b', 'c'], 'num', [1, 2, 3])
kwargs={'ids': ['one', 'two', 'three']}> - which unfortunately is missing the kwargs
entry for the IDs for the second parameter)
Seems like a problem with the MarkInfo item?
Is there any way I can construct this information?
Thanks,
--
Pete Savage
Principal Quality Engineer
Red Hat UK
psavage at redhat.com IM: psav
redhat.com | TRIED. TESTED. TRUSTED. | redhat.com/trusted
Twitter: @redhatway | Instagram: @redhatinc | Snapchat: @redhatsnaps
More information about the pytest-dev
mailing list