前言
- 测试用例参数化的时候,使用 pytest.mark.parametrize 参数化传测试数据,如果想引用前面不同fixture返回的数据当测试用例的入参。可以使用fixture 参数化 prams 来间接解决这个问题
代码示例
1. # -*- coding: utf-8 -*- 2. # @Time : 2021/10/11 3. # @Author : 大海 4. # @File : test_17.py 5. 6. import pytest 7. 8. 9. @pytest.fixture() 10. def a(): 11. return 0 12. 13. 14. @pytest.fixture() 15. def b(): 16. return 1 17. 18. 19. @pytest.fixture(params=['a', 'b']) 20. def arg(request): 21. # getfixturevalue 的作用是获取 fixture 的返回值 22. print('这是入参:', request.getfixturevalue(request.param)) 23. return request.getfixturevalue(request.param) 24. 25. 26. def test_foo(arg): 27. assert arg < 2 28. 29. 30. if __name__ == "__main__": 31. pytest.main(["-s", "test_17.py"])
使用实例
- 跑兼容性测试,在Chrome和Firefox上跑同样的功能脚本
1. # -*- coding: utf-8 -*- 2. # @Time : 2021/10/11 3. # @Author : 大海 4. # @File : test_18.py 5. import pytest 6. from selenium import webdriver 7. 8. # 注:Chrome和Firefox的驱动已添加到环境变量 9. @pytest.fixture() 10. def chrome(): 11. driver = webdriver.Chrome() 12. yield driver 13. driver.quit() 14. 15. 16. @pytest.fixture() 17. def firefox(): 18. driver = webdriver.Firefox() 19. yield driver 20. driver.quit() 21. 22. 23. @pytest.fixture(params=['chrome', 'firefox']) 24. def driver(request): 25. return request.getfixturevalue(request.param) 26. 27. 28. def test_foo(driver): 29. driver.get("https://blog.csdn.net/IT_heima") 30. driver.maximize_window() 31. print(driver.title) 32. 33. 34. if __name__ == "__main__": 35. pytest.main(["-s", "test_18.py"])