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

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

时间:2024-01-17 18:32:56浏览次数:21  
标签:传参 function print autouse ----------- 用例 __ test 软件测试

软件测试/测试开发|Pytest如何使用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/9295026

相关文章

  • 软件测试|解决‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
    当出现错误信息“‘pip’不是内部或外部命令,也不是可运行的程序或批处理文件”时,这通常意味着在命令行中输入pip命令时,系统无法找到pip可执行文件的位置。本文将介绍解决这个问题的各种方法。问题原因当出现错误信息“‘pip’不是内部或外部命令,也不是可运行的程序或批处理......
  • 软件测试|探索Flask接口路由技术:构建灵活可拓展的Python应用
    什么是路由路由是将URL地址与应用程序中的函数相映射的过程。当用户在浏览器中输入特定的URL地址时,Flask会调用与该地址相匹配的函数并返回相应的结果。路由的应用场景在Web应用程序都通过路由技术使用URL链接来控制网页显示的内容,只要知道URL链接,即使没有主页导航也可......
  • 软件测试|探索Flask接口路由技术:构建灵活可拓展的Python应用
    测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供1v1私教指导,BAT级别的测试管理大咖量身打造职业规划。什么是路由路由是将UR......
  • 软件测试全流程
    软件测试面试时可以这样回答1.需求评审用不到任何工具只需要坐在那里听开发和产品经理去讲他的需求这个版本要做什么,做什么网页,有10个需求,20个需求等等要做什么网页,要做什么功能,这个功能的流程是什么样的,逻辑是什么样的开发会首先提出他的疑问,测试只需要听一听,记下来就行测......
  • 软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
    为UI页面写测试用例时(比如web页面,移动端页面),测试用例会存在大量元素和操作细节。当UI变化时,测试用例也要跟着变化,PageObject很好的解决了这个问题。使用UI自动化测试工具时(包括selenium,appium等),如果无统一模式进行规范,随着用例的增多会变得难以维护,而PageObject让自......
  • spring mvc GET请求方式及传参
    springmvcGET请求方式及传参@Api(tags="管理接口")@Slf4j@RestController@RequestMapping("/myOutApi/public/test")publicclassMyManageController{@AutowiredMyInfoServicemyInfoService;@ApiOperation(value="查询信息")......
  • 软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
    为UI页面写测试用例时(比如web页面,移动端页面),测试用例会存在大量元素和操作细节。当UI变化时,测试用例也要跟着变化,PageObject很好的解决了这个问题。使用UI自动化测试工具时(包括selenium,appium等),如果无统一模式进行规范,随着用例的增多会变得难以维护,而PageObject让......
  • 软件测试基础知识 - 集成测试和系统测试的区别,以及它们的应用场景
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击人工智能教程区别1、测试计划和测试用例编制的先后顺序:从V模型来讲,在需求阶段就要制定系统测试计划和测试用例,概要设计的时候做集成测试计划和测试用例,有些公司的具体实践不一样,但......
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
    8年软件测试工程师感悟——写给还在迷茫中的朋友这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。当然,我说......
  • 软件测试笔试面试题目完全汇总
    软件缺陷:1)软件未实现产品说明书要求的功能2)软件出现了产品说明书指明不应该出现的错误3)软件实现了产品说明书未提到的功能4)软件未实现产品说明书虽未明确提及但应该实现的目标5)软件难以理解、不易使用、运行缓慢或者从测试员的角度看最终用户会认为不好。软件测试:为了发现......