首页 > 其他分享 >软件测试/测试开发全日制|Pytest测试框架fixture作为参数使用

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

时间:2024-01-11 19:33:25浏览次数:19  
标签:demo fixture pytest 测试 arg test def 软件测试

软件测试/测试开发全日制|Pytest测试框架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作为参数使用,在某些时候能够极大地方便我们的工作,希望本文能够帮到大家!

标签:demo,fixture,pytest,测试,arg,test,def,软件测试
From: https://blog.51cto.com/u_15640304/9202247

相关文章

  • Apipost接口自动化测试如何操作
    Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新增同步接口模式选择、测试数据选择功能。添加接口使用Apipost,研发......
  • 怎么做UI自动化测试?不会代码也可以?
    UI自动化测试已经成为现代软件开发过程中不可或缺的一部分。它能够提供诸多优势,包括提高测试效率、减少人力成本、提升软件质量等。同时,可视化工具为UI自动化测试带来了更多便利和灵活性。然而,可视化工具也存在一些潜在的劣势。本文将探讨UI自动化测试的必要性以及可视化工具的优势......
  • 工作四年,我学会了用 Idea本地调试线上测试服务器代码
    工作四年,我学会了用Idea本地调试线上测试服务器代码工作四年,我学会了用Idea本地调试线上测试服务器代码......
  • 软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动
    前言数据驱动测试是一种有效的测试方法,可以使用不同的输入数据运行相同的测试用例。结合pytest和CSV文件可以方便地实现数据驱动测试,相比于yaml以及Excel,使用CSV实现数据驱动不需要借助其他的第三方库,可以直接使用Python读取数据。在这篇文章中,我们将介绍如何使用pytest和CSV实现数......
  • 可靠性测试的简单介绍
    为了测定、验证或提高产品可靠性而进行的试验称为可靠性试验,它是产品可靠性工作的一个重要环节。2、通常,对产品进行可靠性试验的目的如下:(1)在研制阶段使产品达到预定的可靠性指标。为了使产品能达到预定的可靠性指标,在研制阶段需要对样品进行可靠性试验,以便找出产品在原材料、......
  • Android架构测试 套小记
    Android架构测试主要是为了确保Android应用程序在不同设备和系统版本上的兼容性、性能和稳定性。这需要对应用程序的各个组件进行测试,包括活动、服务、广播接收器、内容提供程序等。以下是进行Android架构测试时可以采取的一些步骤:单元测试:对应用程序的各个组件进行测试,确保它......
  • 渗透测试基本流程
    渗透测试基本流程1.明确目标2.分析风险,获得授权3.信息收集4.漏洞探测(手动&自动)5.漏洞验证6.信息分析7.利用漏洞,获取数据8.信息整理9.形成报告1.明确目标1)确定范围:测试的范围,如:IP、域名、内外网、整站or部分模块;2)确定规则:能渗透到什么程度(发现漏洞为止or继续利用漏洞)、时间限制、能......
  • 干货 | 超详细的渗透测试思维导图
    ......
  • 最新测试,芝麻代理、青果网络、快代理的代理IP哪家好?
    近期,讯代理狗了,想必大家都知道吧?感兴趣的也可以自己看看。历年来,狗了的代理IP服务商不在少数了,从飞蚁、rola、讯代理……这还是做了一定体量,大家略有耳闻的,其他还有更多的小服务商倒下,倒也不是想来说一波创业艰难,我只是心疼打工人的钱和找代理IP的精力。基于行业共识,现在代理IP的头......
  • API文档、API自动化测试神器:Apipost
    在数字化时代,API已成为企业和开发者实现数据互通、应用集成的重要桥梁。然而,随着API数量的不断增加,API设计、调试、文档和测试等工作也变得越来越复杂。为了解决这一痛点,一款名为Apipost的API协同研发工具应运而生,它为API开发者提供了一站式解决方案。成功案例许多知名的公司和团队......