自动化测试框架:fixture的介绍与用法,让你的工作更灵活!

2087 篇文章 51 订阅
1267 篇文章 21 订阅

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读2.8k次,点赞85次,收藏12次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.55021、fixture的介绍与用法

fixture是pytest用于将测试前后进行预置、清理工作的代码处理机制。

Fixture是通过yield来区分前后置的,前后置均可以单独存在,fixture如果有后置,前置不报错就都会执行,前置报错后置就不会执行。

如果我们只希望部分测试用例执行某个固件,通过set和teardown是实现不了的。但通过fixture就可以根据需要自定义测试用例的前置和后置操作。

Fixture相较于setup和teardown而言,有以下几点优势:

(1)fixture命名更加灵活,局限性较小。与set、teardown类似,fixture提供了测试执行前和测试执行后的处理,但是又比set、teardown更灵活好用,fixture命令更加灵活,不局限于set和teardown。

(2)conftest.py配置里面可以实现数据共享。不需要import就能自动找到一些配置。

1.1 fixture的介绍

fixture装饰器来标记固定的工厂函数,在其他函数、类、模块或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作。

源码:

def fixture(  # noqa: F811
    fixture_function: Optional[FixtureFunction] = None,
    *,
    scope: "Union[_ScopeName, Callable[[str, Config], _ScopeName]]" = "function",
    params: Optional[Iterable[object]] = None,
    autouse: bool = False,
    ids: Optional[
        Union[Sequence[Optional[object]], Callable[[Any], Optional[object]]]
    ] = None,
    name: Optional[str] = None,
) -> Union[FixtureFunctionMarker, FixtureFunction]:

语法格式:

@pytest.fixture(scope="function",params="",autouse="False",ids="",name="")

常用参数说明:

(1)Scope:被@pytest.fixture标记的方法的作用域,默认是functioon,还可以是class、module、package、session。

(2)Params:用于给fixture传参,可以实现数据基于fixture的数据驱动,接收一个可以迭代的对象,例如列表[],元组(),字典列表{[],[],[]},字典元组{(),(),()},提供参数数据供调用 fixture的用例使用;传进去的参数,可以用request.param调用。

(3)Autouse:是否自动运行,是一个布尔值,默认为False不会自动运行,需要手动调用;当为True时,作用域内的测试用例都会自动调用该fixture。

(4)Ids:用例标识ID,每个ids和params一一对应,如果没有id,将从params自动产生。

(5)Name:给被@pytest.fixture标记的方法取一个别名,如果使用了name,只能将name传入,函数名不再生效。

1.2  fixture的使用

使用方法1:自定义测试用例的前置和后置操作,实现部分用例的前后置

示例代码:仅test_Login_02需要进行前置登录,后置退出

"""Pytest单元测试框架"""
import pytest
import time

# 语法格式:@pytest.fixture(scope="function",params="",autouse="True",ids="",name="")
# 语法格式:@pytest.fixture(scope="class",autouse="True")
# def demo_fixture():
#     print("前置方法,可以实现部分及全部用例的前置")
#     yield
#     print("后置方法,可以实现部分及全部用例的后置")

@pytest.fixture(scope="function",params=['刘备','关羽','张飞','诸葛亮'])
def demo_web_fixture(request):
    print("前置方法,可以实现部分及全部用例的前置:登录")
    yield request.param
    print("后置方法,可以实现部分及全部用例的后置:退出")

class TestLogin:
    def test_Login_01(self):
        time.sleep = 3
        print("Hello,I'm 996 ITBrickMover\n")

    def test_Login_02(self,demo_web_fixture):
        time.sleep = 3
        print("Hello,I'm 997 ITBrickMover\n")
        print("-------------"+str(demo_web_fixture))

    def test_Login_03(self):
        time.sleep = 3
        print("Hello,I'm 998 ITBrickMover\n")

    def test_Login_04(self):
        time.sleep = 3
        print("Hello,I'm 999 ITBrickMover\n")

运行结果:

D:\project\Pytest\PytestDemo\venv\Scripts\python.exe "C:/Program Files/JetBrains/PyCharm 2023.2/plugins/python/helpers/pycharm/_jb_pytest_runner.py" --path D:\project\Pytest\PytestDemo\scripts\test_login.py

Testing started at 20:45 ...

Launching pytest with arguments D:\project\Pytest\PytestDemo\scripts\test_login.py --no-header --no-summary -q in D:\project\Pytest\PytestDemo\scripts

============================= test session starts =============================

collecting ... collected 7 items

test_login.py::TestLogin::test_Login_01 Hello,I'm 996 ITBrickMover

PASSED

test_login.py::TestLogin::test_Login_02[\u5218\u5907]前置方法,可以实现部分及全部用例的前置:登录

Hello,I'm 997 ITBrickMover

-------------刘备

PASSED后置方法,可以实现部分及全部用例的后置:退出

test_login.py::TestLogin::test_Login_02[\u5173\u7fbd]前置方法,可以实现部分及全部用例的前置:登录

Hello,I'm 997 ITBrickMover

-------------关羽

PASSED后置方法,可以实现部分及全部用例的后置:退出

test_login.py::TestLogin::test_Login_02[\u5f20\u98de]前置方法,可以实现部分及全部用例的前置:登录

Hello,I'm 997 ITBrickMover

-------------张飞

PASSED后置方法,可以实现部分及全部用例的后置:退出

test_login.py::TestLogin::test_Login_02[\u8bf8\u845b\u4eae]前置方法,可以实现部分及全部用例的前置:登录

Hello,I'm 997 ITBrickMover

-------------诸葛亮

PASSED后置方法,可以实现部分及全部用例的后置:退出

test_login.py::TestLogin::test_Login_03 Hello,I'm 998 ITBrickMover

PASSED

test_login.py::TestLogin::test_Login_04 Hello,I'm 999 ITBrickMover

PASSED

============================== 7 passed in 0.03s ==============================

Process finished with exit code 0

截图说明:

 

本章总结

Fixture是通过yield来区分前后置的,前后置均可以单独存在。fixture如果有后置,前置不报错就都会执行,前置报错后置就不会执行。

如果我们只希望部分测试用例执行某个固件,通过set和teardown是实现不了的。但通过fixture就可以根据需要自定义测试用例的前置和后置操作。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值