首页 > 其他分享 >软件测试/测试开发/全日制|Pytest如何使用autouse实现自动传参

软件测试/测试开发/全日制|Pytest如何使用autouse实现自动传参

时间:2024-01-15 11:33:22浏览次数:18  
标签:传参 function print autouse ----------- 用例 __ test 软件测试

软件测试/测试开发/全日制|Pytest如何使用autouse实现自动传参_用例

Pytest fixture之autouse使用

写自动化用例会写一些前置的fixture操作,用例需要用到就直接传该函数的参数名称就行了。当用例很多的时候,每次都传这个参数,会比较麻烦。fixture里面有个参数autouse,默认是Fasle没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了。

调用fixture三种方法

  • 函数或类里面方法直接传fixture的函数参数名称
  • 使用装饰器@pytest.mark.usefixtures()修饰
  • autouse=True自动使用

使用fixture传参

先定义start功能,用例全部传start参数,调用该功能

import pytest



@pytest.fixture(scope="function")
def start(request):
    print('\n-----开始执行function----')


def test_a(start):
    print("-------用例a执行-------")




class Test_aaa():

    def test_01(self, start):
        print('-----------用例01--------------')

    def test_02(self, start):
        print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-vs", "test_demo.py"])

============================= test session starts =============================
collecting ... collected 3 items

test_demo.py::test_a
-----开始执行function----
PASSED                                              [ 33%]-------用例a执行-------

test_demo.py::Test_aaa::test_01
-----开始执行function----
PASSED                                   [ 66%]-----------用例01--------------

test_demo.py::Test_aaa::test_02
-----开始执行function----
PASSED                                   [100%]-----------用例02------------


============================== 3 passed in 0.03s ==============================

Process finished with exit code 0

使用usefixtures传参

使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

import pytest

@pytest.fixture(scope="function")
def start(request):
    print('\n-----开始执行function----')


@pytest.mark.usefixtures("start")
def test_a():
    print("-------用例a执行-------")

@pytest.mark.usefixtures("start")
class Test_aaa():

    def test_01(self):
        print('-----------用例01--------------')

    def test_02(self):
        print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-vs", "test_demo.py"])

============================= test session starts =============================
collecting ... collected 3 items

test_demo.py::test_a
-----开始执行function----
PASSED                                              [ 33%]-------用例a执行-------

test_demo.py::Test_aaa::test_01
-----开始执行function----
PASSED                                   [ 66%]-----------用例01--------------

test_demo.py::Test_aaa::test_02
-----开始执行function----
PASSED                                   [100%]-----------用例02------------


============================== 3 passed in 0.02s ==============================

设置autouse=True

autouse设置为True,自动调用fixture功能

  • 设置scope为module级别,在当前.py用例模块只执行一次,autouse=True自动使用
  • 设置scope为function级别,每个用例前都调用一次,自动使用
import pytest



@pytest.fixture(scope="module", autouse=True)
def start(request):
    print('\n-----开始执行moule----')
    print('module      : %s' % request.module.__name__)
    print('----------启动浏览器---------')
    yield
    print("------------结束测试 end!-----------")



@pytest.fixture(scope="function", autouse=True)
def open_home(request):
    print("function:%s \n--------回到首页--------" % request.function.__name__)


def test_01():
    print('-----------用例01--------------')

def test_02():
    print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-vs", "test_demo.py"])

============================= test session starts =============================
collecting ... collected 2 items

test_demo.py::test_01
-----开始执行moule----
module      : demos.test_demo
----------启动浏览器---------
function:test_01
--------回到首页--------
PASSED                                             [ 50%]-----------用例01--------------

test_demo.py::test_02 function:test_02
--------回到首页--------
PASSED                                             [100%]-----------用例02------------
------------结束测试 end!-----------


============================== 2 passed in 0.02s ==============================

上面是写在函数里,写在类里一样可以使用

import pytest


@pytest.fixture(scope="module", autouse=True)
def start(request):
    print('\n-----开始执行moule----')
    print('module      : %s' % request.module.__name__)
    print('----------启动浏览器---------')
    yield
    print("------------结束测试 end!-----------")



class Test_aaa():
    @pytest.fixture(scope="function", autouse=True)
    def open_home(self, request):
        print("function:%s \n--------回到首页--------" % request.function.__name__)


    def test_01(self):
        print('-----------用例01--------------')

    def test_02(self):
        print('-----------用例02------------')

if __name__ == "__main__":
    pytest.main(["-vs", "test_demo.py"])

============================= test session starts =============================
collecting ... collected 2 items

test_demo.py::Test_aaa::test_01
-----开始执行moule----
module      : demos.test_demo
----------启动浏览器---------
function:test_01
--------回到首页--------
PASSED                                   [ 50%]-----------用例01--------------

test_demo.py::Test_aaa::test_02 function:test_02
--------回到首页--------
PASSED                                   [100%]-----------用例02------------
------------结束测试 end!-----------


============================== 2 passed in 0.01s ==============================


软件测试/测试开发/全日制|Pytest如何使用autouse实现自动传参_自动化测试_02

标签:传参,function,print,autouse,-----------,用例,__,test,软件测试
From: https://blog.51cto.com/u_15649298/9251297

相关文章

  • 软件测试/测试开发全日制|Pytest中yield的用法详解
    前言在之前的介绍中,我们已经介绍了fixture的简单用法,但其实fixture还提供了两种非常优雅高效的写法,来完成测试执行前的处理操作与执行后的处理操作,即使用yield或addfinalizer来实现。本文我们将介绍使用yield来实现操作。yield在fixture中的关键字yield主要有两个作用:yield代替retu......
  • FreeSwitch: esl 调用lua动态传参&日志查看
    lua脚本在执行过程中,可动态接收参数,这样可以让系统更灵活,以上节的自动外呼为例,callout.lua改成下面这样:--主叫localcallernum=argv[1];--被叫localcalleenum=argv[2];freeswitch.consoleLog("info","debug==>caller:"..callernum..",callee:"..calleenum.......
  • 软件测试实习生的一天,那些实习了我才知道的事(二)
    ​前言大家好,今天我来更新一下软件测试实习的后续,我的第一篇帖子响应不错,很多牛友现身说法通过大家的描述,让各位还没入行的小白更加了解了这份工作的日常贴一下链接软件测试实习工作总结,那些实习了我才知道的事现在是上午11点半,楼主正在工位上敲键盘,是的你没猜错,带薪搞副业(发......
  • 软件测试报告模板
    ......
  • 软件测试报告模板
    ......
  • 软件测试/测试开发全日制|Pytest中yield的用法详解
    前言在之前的介绍中,我们已经介绍了fixture的简单用法,但其实fixture还提供了两种非常优雅高效的写法,来完成测试执行前的处理操作与执行后的处理操作,即使用yield或addfinalizer来实现。本文我们将介绍使用yield来实现操作。yield在fixture中的关键字yield主要有两个作用:yield代替retu......
  • 软件测试/测试开发全日制|Pytest conftest.py配置文件如何使用?
    前言我们知道在python中要想实现数据的共享,可以定义一个“全局变量”,在另一个文件中使用的时候通过先导入,再使用的方式来访问。pytest中定义个conftest.py来实现数据,参数,方法、函数的共享。本文就给大家介绍一下conftest.py的用法。conftest.pyconftest.py文件是pytest的一个特殊文......
  • 软件测试/测试开发全日制|Pytest测试框架Fixture作用域详解
    前言Pytest的fixtrue是存在作用域的,比如作用域为函数级别,那么没执行一条用例,就会重新执行一次fixtrue,如果是类级别,那么多个类执行时会在去执行fixture。fixture的作用域有5个,分别是:function,class,module,package,session。有了这些作用域我们可以不用重复的去执行fixture,从......
  • 软件测试需求分析,先搞清楚这几条
    需求规格说明书的检查,又叫黑盒静态测试,即不知道代码,又不执行代码,在什么都不了解的情况下,进行测试。一、检查要点:1、正确性:对照原始需求,需求是一定,不会产生误解的2、必要性:需求不能多,也不能少3、优先级:划分各个需求项,风险评估中的重要一点,有可能会舍弃优先级较低的需求4、明确性:不能......
  • 软件测试/测试开发全日制|Pyest结合json实现数据驱动测试
    前言数据驱动测试是提高代码覆盖率和可靠性的重要方法。结合pytest和JSON(JavaScript对象表示)文件可以轻松实现数据驱动测试。和CSV文件类似,Python读取json文件也不需要借助其他的第三方库,因此我们不需要进行额外的环境安装。下面是如何使用pytest和JSON文件进行数据驱动测试的步骤......