赞
踩
测试用例参数化的时候,使用 pytest.mark.parametrize()
参数化传测试数据,如果我们想引用前面不同fixture
返回的数据当测试用例的入参。这个时候我们就可以用fixture
参数化 prams
来间接解决这个问题,本文就来给大家介绍一下如何使用fixture来实现参数化。
我们需要在测试用例里面参数化,参数化的数据来源于前面不同fixture
的返回值,错误示例如下:
import pytest @pytest.fixture def a(): return 'a' @pytest.fixture def b(): return 'b' @pytest.mark.parametrize('arg', [a, b]) def test_demo(arg): assert len(arg) == 1 --------- 执行结果如下: ============================= test session starts ============================= collecting ... collected 2 items test_a.py::test_demo[a] FAILED [ 50%] test_a.py:61 (test_demo[a]) arg = <function a at 0x00000265A2C65AF8> @pytest.mark.parametrize('arg', [a, b]) def test_demo(arg): > assert len(arg) == 1 E TypeError: object of type 'function' has no len() test_a.py:64: TypeError FAILED [100%] test_a.py:61 (test_demo[b]) arg = <function b at 0x00000265A2C65C18> @pytest.mark.parametrize('arg', [a, b]) def test_demo(arg): > assert len(arg) == 1 E TypeError: object of type 'function' has no len() test_a.py:64: TypeError
我们可以使用 fixture
的参数化来解决上面的问题,通过 request.getfixturevalue(“fixture name”)
方法来获取fixture
的返回值,示例代码如下:
import pytest @pytest.fixture def a(): return 'a' @pytest.fixture def b(): return 'b' @pytest.fixture(params=['a', 'b']) def arg(request): return request.getfixturevalue(request.param) def test_demo(arg): assert len(arg) == 1 ------------- 运行结果如下: ============================= test session starts ============================= collecting ... collected 2 items test_a.py::test_demo[a] PASSED [ 50%] test_a.py::test_demo[b] PASSED [100%] ============================== 2 passed in 0.04s ==============================
当我们在进行web自动化测试,需要在不同浏览器上运行同一个功能的用例时,fixture参数化就派上了用场,如下所示:
import pytest from selenium import webdriver @pytest.fixture def chrome(): driver = webdriver.Chrome() yield driver driver.quit() @pytest.fixture def firefox(): driver = webdriver.Edge() yield driver driver.quit() @pytest.fixture(params=['chrome', 'edge']) def driver(request): '''启动浏览器参数化''' return request.getfixturevalue(request.param) def test_foo(driver): '''测试用例''' driver.get("https://www.ceshiren.com")
本文主要介绍了pytest的fixture作为参数使用的方法,fixture作为参数使用,在某些时候能够极大地方便我们的工作,希望本文能够帮到大家!
推荐
Python全栈开发与自动化测试开发班
由浅入深实战进阶,从小白到高手
以Python全栈开发为基础,深入教授自动化测试技能,为学员打造全面的技术能力。通过系统学习和实际项目实战,学员将具备在职场中脱颖而出的竞争力。不仅能够灵活运用Python进行开发,还能够保障项目质量通过自动化测试手段。这是一个全面提升职业竞争力的机会。
课程详情
Python开发必备基础技能与项目实战
Pvthon 编程语言/算法和数据结构/面向对象编程Web后端开发/前端开发/测试管理平台项目实战
人工智能ChatGPT实战
人工智能辅助学习各种开发和测试技能/Pytorch深度学框架/平台开发实战
数据分析与自动化办公
数据采集/Pandas与数据处理技术/ECharts与数据可视化技术/爬虫实战/自动化办公/批量文件处理
UI自动化测试与高级项目实战
Web自动化测试/App自动化测试/ PageObject设计模式
接口自动化测试
接口协议分析/Mock实战/服务端接口测试
性能测试
性能测试流程与方法/JMeter 脚本参数化/Grafana监控系统搭建
简历指导与模拟面试
1V1简历指导/模拟真实面试/测试开发岗面试全攻略名企私教服务
名企专家1v1辅导/行业专家技术指导/针对性解决工作难题/绩效提升辅导与晋升复盘
课程亮点
名企私教服务 先学习后付费 高额奖学金
专属社群+晚自习在线答疑
5V1全方位辅导作业+考试强化学习效果
简历修改 模拟面试 就业内推 面试复盘
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。