前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件测试/测试开发全日制|Pytest测试框架fixture作为参数使用

软件测试/测试开发全日制|Pytest测试框架fixture作为参数使用

原创
作者头像
霍格沃兹测试开发Muller老师
发布2024-01-12 15:32:42
1400
发布2024-01-12 15:32:42
举报
文章被收录于专栏:muller的测试分享

前言

测试用例参数化的时候,使用 pytest.mark.parametrize() 参数化传测试数据,如果我们想引用前面不同fixture返回的数据当测试用例的入参。这个时候我们就可以用fixture 参数化 prams 来间接解决这个问题,本文就来给大家介绍一下如何使用fixture来实现参数化。

使用案例

我们需要在测试用例里面参数化,参数化的数据来源于前面不同fixture的返回值,错误示例如下:

代码语言:python
代码运行次数:0
复制
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的返回值,示例代码如下:

代码语言:python
代码运行次数:0
复制
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参数化就派上了用场,如下所示:

代码语言:python
代码运行次数:0
复制
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作为参数使用,在某些时候能够极大地方便我们的工作,希望本文能够帮到大家!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 使用案例
  • 使用 fixture 参数化
  • 实际应用场景
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档