10-pytest-parametrize中使用fixture

简介: 10-pytest-parametrize中使用fixture

前言

  • 测试用例参数化的时候,使用 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"])


相关文章
|
测试技术 Python
Pytest简单介绍
Pytest简单介绍
83 0
|
7月前
|
测试技术 Python
pytest中的fixture和conftest.py
pytest中的fixture和conftest.py
|
测试技术
32-pytest-内置fixture之request使用
32-pytest-内置fixture之request使用
|
测试技术 Python
pytest--fixture
pytest--fixture
|
测试技术 Python
pytest fixture装饰器
pytest fixture装饰器
|
测试技术
pytest conftest.py和fixture的配合使用
pytest conftest.py和fixture的配合使用