软件测试/测试开发全日制|Pytest测试框架fixture作为参数使用
【摘要】 前言测试用例参数化的时候,使用 pytest.mark.parametrize() 参数化传测试数据,如果我们想引用前面不同fixture返回的数据当测试用例的入参。这个时候我们就可以用fixture 参数化 prams 来间接解决这个问题,本文就来给大家介绍一下如何使用fixture来实现参数化。 使用案例我们需要在测试用例里面参数化,参数化的数据来源于前面不同fixture的返回值,错...
前言
测试用例参数化的时候,使用 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 参数化
我们可以使用 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作为参数使用,在某些时候能够极大地方便我们的工作,希望本文能够帮到大家!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)