项目中有份API测试的代码的结构大致如下
/api_test
– test_device_api01_via_lan.py
– test_device_api02_via_lan.py
– test_device_api03_via_lan.py
– test_device_api01_via_wan.py
– test_device_api02_via_wan.py
– test_device_api03_via_wan.py
很容易猜到其实这里是重复的2份代码,只是因为执行测试的时候,有一份是通过lan测试,另一份是通过wan测试。每次修改代码,还需要把修改同步到相应的lan或者wan的代码上去……
但是又不能简单的做个循环,把lan/wan的地址丢进去当参数,因为项目目前运行是需要收集JUnit格式的测试报告的,优化代码后,还需要拿到和之前一样或者差不多的报告,好显示在Jenkins上。
今天实在不能忍了,花点时间研究了下,有如下解决办法。
项目根目录上新建一个conftest.py,内容如下
1 | def pytest_generate_tests(metafunc): |
tests目录下任一个test模块,大致做如下修改
1 | import pytest |
然后执行以上测试的时候,虽然代码里只写了3个测试,实际上pytest会生成以下6个测试,生成的JUnit测试报告也会有这6个测试的测试结果。
1 | rx:pytest_proj reed$ pytest --collect-only tests/test_api01.py |