写点什么

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

  • 2023-10-27
    北京
  • 本文字数:2734 字

    阅读完需:约 9 分钟

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 ==============================
复制代码


获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
软件测试|Pytest必会技巧(四)使用autouse实现自动传参_霍格沃兹测试开发学社_InfoQ写作社区