首页 > 其他分享 > 软件测试|Pytest必会技巧(四)使用autouse实现自动传参

软件测试|Pytest必会技巧(四)使用autouse实现自动传参

时间:2023-02-10 11:04:03浏览次数:52  
标签:传参 function print autouse ----------- 用例 __ test 软件测试

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 ==============================


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

相关文章

  • 软件测试|Python操作Excel制作报表,不要太方便
    前言今天我们介绍的是Python操作Excel制作报表,我们需要用到的库是openpyxl,我们主要使用的功能有下列几个功能插入与查询数据分类数据统计数据可视化字体颜色修改基本操作表......
  • 软件测试|必须遵循的UI自动化设计军规
    总体规则所有模块设计均遵循pageobject结构用例层:测试人员编写测试用例代码的地方,可以调用page层和封装层。page层:一个页面一个类,包含该页面的业务逻辑封装以及部分控......
  • 软件测试工程师如何提高工作效率
    1.明确需求范围和重点在开需求会的时候,明确本次需求作用的是哪个模块,可能会影响到哪些模块。之前有没有类似的需求,测试的重点是什么,需求模块之间的优先级是什么。......
  • 软件测试和游戏测试到底有什么区别?
    有很多同学进入测试行业之后,一直从事的是软件测试的工作,然后跳槽时遇到一些游戏的公司的面试,就会有点慌,我做的都是软件测试,能胜任游戏测试么?所以,今天我们需要先来了解......
  • 如何选择一家靠谱的软件测试公司?这些坑你一定要避开!
    随着软件开发产品的火热,软件测试外包公司也应运而生。但因为市场的良莠不齐,我们在进行选择时会眼花缭乱,有软件测试需求的企业很容易“踩坑”。万一选择了一家不好的软件......
  • Vue课程44-事件绑定-绑定事件并传参
    //methods的作用,就是定义事件的处理函数methods:{add(n){//在methods处理函数中,this就是new出来的vm实例对象//......
  • 软件测试之测试数据
    测试数据的准备是软件测试过程中非常重要的一个环节,功能测试、自动化测试、性能测试都避不开测试数据的准备工作。想要成长为一名优秀的测试工程师,非常有必要深入......
  • 第三方软件测试机构进行性能测试有哪些流程?
    软件性能是衡量一款软件产品质量的重要指标之一,检测软件产品的性能可以通过性能测试来进行。性能测试在软件的质量保证中起着十分重要的作用,它包括的测试内容也丰富多样......
  • 软件测试|手把手教你用Python来模拟绘制自由落体运动过程中的抛物线
    学过高中物理的我们都知道,当我们在一定高度上以一定速度水平抛出一个物体时,物体的运动轨迹实际上就是一条抛物线,那么,我们如何用Python将这个抛物线绘制出来呢。思路其实解决......
  • 软件测试|Python实用炫酷技能——推导式
    Python推导式判断一个程序员水平的高低,不能光看他的发量,也不能光看他的代码量,还要看他代码蕴含的思想,代码的质量。代码蕴含的思想主要体现在各种设计模式的运用上,而代码的质......