[pytest-dev] Question: How to inject an external id to each pytest test case?

Liao, Shujie Shujie.Liao at safenet-inc.com
Wed May 22 21:09:52 CEST 2013


@holger: the way to implement a hook seems fine, I'll try it, thanks!
@Laurent P: it's a jira plugin - synapseRT, we used testlink before, now switch to Jira.

-----Original Message-----
From: Brack, Laurent P. [mailto:lpbrac at dolby.com] 
Sent: May-22-13 3:05 PM
To: Liao, Shujie
Cc: pytest-dev at python.org
Subject: Re: [pytest-dev] Question: How to inject an external id to each pytest test case?

Hi Shujie,

Is the web application "Testlink" by any chance (the ID sure do look like TL id's)? If so, we have a pytest plugin we have been using internally for a couple of year already and I should be able to get (internal) permission to release it (it is thoroughly documented).

Otherwise, what Holger is suggesting is the approach we have taken for our implementation (we have a pytest.testlink marker for that purpose).

Best 

/Laurent 

On 5/22/13 11:01 AM, "holger krekel" <holger at merlinux.eu> wrote:

>Hi Shujie,
>
>On Wed, May 22, 2013 at 13:29 -0400, Liao, Shujie wrote:
>> Hi,
>> 
>> We want to update the test result automatically from pytest to a web 
>>application, we run pytest from Jenkins currently , and our plan is to 
>>run a script as post step to make this happen.
>> 
>> We have thousands of test cases in an excel file, and now they were 
>>all imported to the web tool(the tool generated a unique id for each 
>>test), the problem is, the test name in web tool and from pytest are 
>>not exactly the same, and so far we don't have plan as well as hands 
>>to make them the same....
>> 
>> Our thoughts is to pass the test id to each pytest test case, so that 
>>from output result, the id becomes part of test name, then we have the 
>>map from pytest test cases to the web tool.
>> 
>> We are looking for a feature from pytest, which can help achieve 
>>following requirements:
>> 
>> 1.       Can easily inject an external id to each test case, both
>>non-parameterized and parameterized test.
>> 
>> 2.       The injected id will be part of test name in output
>> 
>> 3.       Without impacting existing parameterized mechanism (or need
>>minor modification is fine)
>> 
>> For parameterized test, I tried to use 
>>@pytest.mark.parametrize(('name'),create_data,ids=['DEMO-1','DEMO-2'])
>>, of them, "DEMO-1" and "DEMO-2" are ids from the test cases in web 
>>tool, I got this as output:
>> 
>> 
>> platform linux2 -- Python 2.7.3 -- pytest-2.3.4 collected 2 items 
>> <Module 'test_demo.py'>
>>   <Class 'TestDemo'>
>>     <Instance '()'>
>>       <Function 'test_generatekeypair[DEMO-1]'>
>>       <Function 'test_generatekeypair[DEMO-2]'>
>> 
>> However, for non-parameterized test, seems this solution is less 
>>decent, although we can pass the parameter without using it, still 
>>seems ugly...
>> 
>> 
>> 
>> Is there a better way we can do this?
>
>It all depends a bit but you might look into marking your tests like
>this::
>
>    # content of test_file.py
>
>    import pytest
>
>    @pytest.mark.id("demo1")
>    def test_hello():
>        pass
>
>    @pytest.mark.id("demo2")
>    def test_world():
>        pass
>
>
>and then implementing a hook which transfers the marks as part of the 
>test id:
>
>    # content of conftest.py
>    
>    def pytest_collection_modifyitems(items):
>        for item in items:
>            id = item.keywords.get("id", None)
>            if id is not None and getattr(id, "args", None):
>                item.name += "[%s]" % id.args[0]
>
>which when run gives this:
>
>    $ py.test -v test_file.py
>
>    test_file.py:4: test_hello[demo1] PASSED
>    test_file.py:8: test_world[demo2] PASSED
>
>Of course, you could also have a different way to configure the names 
>in the conftest hook, e.g. by reading a file which maps test ids to 
>names or so.
>
>HTH,
>holger
>
>        
>
>> 
>> 
>> The information contained in this electronic mail transmission may be 
>> privileged and confidential, and therefore, protected from 
>> disclosure. If you have received this communication in error, please 
>> notify us immediately by replying to this message and deleting it 
>> from your computer without copying or disclosing it.
>> 
>> 
>
>> _______________________________________________
>> Pytest-dev mailing list
>> Pytest-dev at python.org
>> http://mail.python.org/mailman/listinfo/pytest-dev
>
>_______________________________________________
>Pytest-dev mailing list
>Pytest-dev at python.org
>http://mail.python.org/mailman/listinfo/pytest-dev

The information contained in this electronic mail transmission 
may be privileged and confidential, and therefore, protected 
from disclosure. If you have received this communication in 
error, please notify us immediately by replying to this 
message and deleting it from your computer without copying 
or disclosing it.




More information about the Pytest-dev mailing list