全网火爆,接口自动化测试框架-fixture函数使用,一篇打通...

news2024/11/25 14:39:29

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

setup和teardown能实现在测试用例执行之前或之后做一些操作,但是这种是整个测试脚本全局生效的;

如果想实现某些用例执行之前进行登录,某些用例执行之前不需要进行登录,这种场景我们再使用setup和teardown就无法实现了,这时候我们就需要用到fixture功能了。

1、fixture函数

fixture(scope="function", params=None, autouse=False, ids=None, name=None)

参数说明:

1)scope:fixture函数的作用域;
可选值:function(默认)、class、module、session

function:作用于每个方法或函数,每个方法或函数都运行一次
class:作用于整个class类,每个class中的所有test只运行一次
module:作用于整个模块,每个module中的所有test只运行一次
session:作用于整个session,整个session只运行一次(慎用)

2)params:列表类型;
一个可选的参数列表;
它将会多次调用被fixture标记的方法和所有用到这个fixture的test测试用例;
默认为None;当前调用参数可以用 request.param 来获取。

3)autouse:如果为True,则为所有测试用例激活fixture,运行测试用例的时候会自动运行被fixture标记的方法;
如果为False,则需要显示指定来激活fixture,不会自动运行。

4)ids:id字符串列表,与params相对应,因此它们也是测试的一部分。如果没有提供ids,那么将会从params来自动生成。

5)name:fixture的名称。默认为被fixture装饰器标记的函数名。

2、fixture的使用

1)通过参数引用fixture函数

举例:

# file_name:test_fixture.py


import pytest


class Test_A:

@pytest.fixture()
def before(self):
	print("\n--------before fixture has ran--------")

def test_a(self, before):    # test_a方法以参数的形式传入了被fixture标记的函数,fixture的名称默认为被fixture标记的函数名
	print('-------test_a has ran-------')
	assert 1


if __name__ == '__main__':
pytest.main(['-s', 'test_fixture.py'])

2)通过使用name参数来引用fixture函数

①name参数表示fixture的重命名;
②通常来说使用 fixture 的测试函数会将 fixture 的函数名作为参数传递,但是 pytest 也允许将fixture重命名。

举例1:

# file_name:test_fixture.py


import pytest


class Test_A:

    @pytest.fixture(name="before_fixture_name")
    def before(self):
        print("\n--------before fixture has ran--------")

    def test_a(self, before_fixture_name):    # test_a方法以参数的形式传入了被fixture标记的函数,这里的fixture名称为:before_fixture_name,如果不设置name参数,则fixture的名称默认为被fixture标记的函数名
        print('-------test_a has ran-------')
        assert 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

举例2:
为fixture函数重命名之后,不可以在使用fixture函数的函数名来调用,只能通过fixture函数重命名的新名字来调用。

A1

3)通过@pytest.mark.usefixtures(‘fixture函数名’)函数的形式引用fixture函数

举例:

# file_name: test_fixture.py


import pytest


@pytest.fixture()  # 被fixture标记的函数也可以应用在测试类的外部,使用@pytest.mark.usefixtures()装饰器来引用
def before():
    print("\n--------before fixture has ran--------")


@pytest.mark.usefixtures("before")  # 通过使用usefixtures()来引用fixture,此时usefixtures()函数的入参是fixture函数的函数名
class Test_A:

    def test_a(self):
        print('-------test_a has ran-------')
        assert 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

4)通过autouse=True设置默认执行fixture函数

①fixture函数的autouse参数默认等于False;

②fixture函数的autouse参数若为True,刚每个测试函数都会自动调用该fixture函数,而且无需传入fixture函数名。

举例:

# file_name: test_fixture.py


import pytest


@pytest.fixture(autouse=True)  # 通过参数autouse=True来设置fixture默认运行
def before():
    print("\n--------before fixture has ran--------")


class Test_A:

    def test_a(self):
        print('-------test_a has ran-------')
        assert 1

    def test_b(self):
        print('-------test_b has ran-------')
        assert 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

5)fixture作用域设置成function

举例:

# file_name: test_fixture.py


import pytest


@pytest.fixture(scope="function", autouse=True)  # 作用域设置成function,通过参数autouse=True来设置fixture默认运行
def before():
    print("\n--------before fixture has ran--------")


class Test_A:

    def test_a(self):
        print('-------test_a has ran-------')
        assert 1

    def test_b(self):
        print('-------test_b has ran-------')
        assert 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

6)fixture作用域设置成class

举例:

# file_name: test_fixture.py


import pytest


@pytest.fixture(scope="class", autouse=True)  # 作用域设置成class,通过参数autouse=True来设置fixture默认运行
def before():
    print("\n--------before fixture has ran--------")


class Test_A:

    def test_a(self):
        print('-------test_a has ran-------')
        assert 1

    def test_b(self):
        print('-------test_b has ran-------')
        assert 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

7)fixture的返回值使用

举例:

# file_name: test_fixture.py


import pytest


@pytest.fixture()
def return_data():
    print("\n--------before fixture has ran--------")
    return 2    # 返回值


class Test_A:

    def test_a(self, return_data):
        print('-------test_a has ran-------')
        assert 1 == return_data # 拿到返回值做断言


if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

8)fixture的params参数使用

①params形参是fixture函数的可选形参列表,支持列表传入;
②不传此参数时默认为None;
③每个param的值fixture函数都会去调用执行一次,类似for循环。
④可与参数ids一起使用,作为每个参数的标识,类似于用例参数化时的ids作用。

举例:

# file_name: test_fixture.py


import pytest


@pytest.fixture(params=[1, 2, 3])
def return_data(request):   # 传入参数request,request系统内置的fixture
    print("\n--------before fixture has ran--------")
    return request.param  # 通过request.param 获取当前传入的参数


class Test_A:

    def test_a(self, return_data):
        print('-------test_a has ran,return_data的值为:{}-------'.format(return_data))
        assert 1 == return_data  # 拿到返回值做断言


if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

运行结果:

A2

从结果中我们可以看到测试用例执行了3次。通过设置params参数会导致多次调用被fixture标记的函数,并且使用该fixture函数的测试用例也会执行多次。

A3

9)fixture的params参数于ids参数结合使用

①fixture函数未配置ids参数之前:用例执行后的标识为传入的params参数。

A4

②fixture函数配置ids参数之后:用例执行后的标识为传入的ids参数。并与params参数一一对应。

A5

10)fixture函数的相互调用(fixture函数与fixture函数之间的依赖关系)

举例1:

import pytest
# fixtrue作为参数,互相调用传入
@pytest.fixture()
def account():
    a = "account"
    print("第一层fixture")
    return a
    
#Fixture的相互调用一定是要在测试类里调用这层fixture才会生次,普通函数单独调用是不生效的
@pytest.fixture()   
def login(account):
    print("第二层fixture")

class TestLogin:
    def test_1(self, login):
        print("直接使用第二层fixture,返回值为{}".format(login))

    def test_2(self, account):
        print("只调用account fixture,返回值为{}".format(account))


if __name__ == '__main__':
    pytest.main()

举例2:
如果一个fixture函数依赖另外一个fixture函数,此时不能使@pytest.mark.usefixtures() 调用被依赖的fixture函数,这种调用方式不会生效。而是需要用函数传递的方式才能生效。

# test_fixture_02.py
import pytest


@pytest.fixture()
def login_weibo():
    print("==============登陆微博===============")


@pytest.fixture()
# @pytest.mark.usefixtures("login_weibo")  #这种方式不会生效
def get_weibo_data(login_weibo):  # 这种方式才会生效
    """fixture函数依赖,需要用传递函数的方式"""
    print("=============获取微博数据==============")


@pytest.mark.demo
class TestMyCode:

    @pytest.mark.usefixtures("get_weibo_data")
    def test_fixture_005(self):
        """fixture函数在测试脚本文件中"""
        assert 1 == 1

运行结果:

A6

注意:
①即使fixture函数之间支持相互调用,但普通函数直接使用fixture是不支持的,一定是在测试函数内调用才会逐级调用生效。

②有多层fixture函数调用时,最先执行的是最后一层fixture函数,而不是先执行传入测试函数的fixture函数。

③上层fixture函数的值不会自动return,这里就类似函数相互调用一样的逻辑。【函数调用值需要赋值给一个变量并使用】

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

每个成功的背后都离不开艰苦的努力和坚持。要相信自己有能力实现自己的梦想,不管前方有多少艰难险阻,都不能阻挡你的步伐,直至抵达目的地。

每个人都有无尽的可能性,关键是要相信自己,勇往直前,不怕失败,不怕挫折,不断挑战自己,最终就能取得非凡的成功。

人生没有完美,只有不断的完善,勇敢地追求自己的梦想,不断探索未知的世界,积累知识和经验,最终才能成为一个真正强大的人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1219694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗项目的需求分析以及开发流程

一.项目的背景以及需求 1.项目背景 1.政策层面来看,近年来我国政府相关部门陆续颁发了支持数字医疗行业发展的相关政策,“互联网医疗”政策逐渐明确完善,为数字医疗行业发展提供支持,行业迎来政策福利期。 其次,从经济…

echarts 数据过多时展示滚动条

【echarts官网地址:Documentation - Apache ECharts】 针对echarts图数据过多的情况,echarts官网有专门的属性dataZoom:用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响…

超全整理,Pytest自动化测试框架-多进程(pytest-xdist)运行总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 平常我们功能测试…

在誉天学习华为认证,有真机吗

通过培训机构学习华为认证,特别是在HCIE的课程学习中,很多人关心的就是培训机构是否有真机能够进行华为认证的相关实验,今天我们一起来看看,在誉天学习华为认证,有真机吗? 誉天总部数据中心机房和誉天总部一…

获取微信小程序二维码

可直接通过微信扫描小程序二维码直接进入小程序,可用在分享推广业务。 目录 Curl请求方法 获取小程序token 获取小程序二维码 参数说明 注意 请求结果 Curl请求方法 需要请求微信小程序的API接口,封装好curl请求方法。 代码如下: /*…

西浦成立产业家学院破解 “产业级” 问题!AMT企源成首批合作机构

在推动高质量发展的国家战略背景下,从集成电路到人工智能,从新能源到绿色低碳,从健康养老到数字文创,无论国家还是区域都面临着产业转型升级或突破创新的发展需求, 这些 “产业级” 问题的难度远非单个企业层面问题可比…

C++泛型编程——模板(初识)

C泛型编程——模板(初识) 文章目录 C泛型编程——模板(初识)1. 泛型编程的概念2. 模板2.1 模板格式2.2 函数模板2.3 函数模板的实例化2.3.1 隐式(推演)实例化2.3.2 显式实例化 2.3 类模板3. 模板的本质 本章…

【教学类-36】八等分格子-A4竖版-4条(制作皇冠、戒指)

背景需求: 最近在大四班孩子中间普及铅画纸制作“方盒”的活动,目前进展到使用三条8等分的长条纸,制作一个“坚硬的、不漏底”的方盒。 实验后,我想试试如果缩小纸条长宽,是不是可以做“迷你”纸盒。 目的&#xff…

为什么别人年薪30W+?同样为测试人,“我“的测试之路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、软件测试员&am…

可变形卷积 DeformConv2d

可变性卷积 前言为什么要用DConv普通卷积和与可变形卷积计算过程普通卷积计算过程Pytorch官方API可变形卷积计算过程 参考资源 前言 可变形卷积即DCN(缩写取自Deformable ConvNets)提出于ICCV 2017的paper: Deformable Convolutional Networks 论文pape…

【LLM之基座】qwen 14b-4int 部署踩坑

由于卡只有24G,qwen14b 原生需要 30GB,按照官方团队的说法,他们用的量化方案是基于AutoGPTQ的,而且根据评测,量化之后的模型效果在几乎没有损失的情况下,显存降低到13GB,妥妥穷狗福音&#xff0…

vue使用navigator.mediaDevices.getUserMedia调用相机功能

目录 前言: API: API简单示例: 拍照功能 实现效果: 前言: 本文将介绍Vue中如何使用navigator.mediaDevices.getUserMedia调用相机功能,实现拍照使用实例,需要的朋友可以参考一下。 注意…

02_SHELL编程之流程控制和循环语句

课程目标 熟悉流程控制语句基本语法,如if…else… 掌握for循环语句的基本语法结构 掌握while和until循环语句的基本语法结构 ###一、流程控制语句 ####1. 基本语法结构 F: false 假 T: true 真 if [ condition ];thencommandcommand fi ​ [ 条件 ] &&a…

NSSCTF第12页(3)

[NSSCTF 2nd]php签到 首先,代码定义了一个名为 waf 的函数,用于执行一个简单的文件扩展名检查来防止上传恶意文件。 $black_list 是一个存储不允许的文件扩展名的数组,如 “ph”、“htaccess” 和 “ini”。 pathinfo($filename, PATHINF…

拥抱开源生态,算能携手软件所 PLCT 实验室联合举办 RISC-V 软件移植优化锦标赛

(引言)为推动RISC-V软件生态加速发展,算能作为RISC-V生态的领先企业,与RISC-V 中国社区、中科院软件所PLCT实验室联合发起“RISC-V软件移植及优化锦标赛”活动,以桌面和服务器软件生态为重点,在编译器、运行…

2023-11-17 LeetCode每日一题(最大和查询)

2023-11-17每日一题 一、题目编号 2736. 最大和查询二、题目链接 点击跳转到题目位置 三、题目描述 给你两个长度为 n 、下标从 0 开始的整数数组 nums1 和 nums2 ,另给你一个下标从 1 开始的二维数组 queries ,其中 queries[i] [xi, yi] 。 对于…

SOLIDWORKS参数化设计之主参数设置

SOLIDWORKS参数化设计是通过主参数来驱动整个模型的变化,因此确定主参数是很重要的部分。主参数可以是数值,也可以是条件,可以手动输入,也可以做成下拉列表。今天我们就来看看主参数的下拉列表是如何做到的。 SolidKits.AutoWork…

近期局势较多变化 适合黄金代理入场吗?

进入本年的四季度后,中东局势出现了比较大的变化。首先,巴以冲突不断的加剧,而且马来西亚的林吉特出现大幅贬值,甚至有市场论调认为,亚洲金融危机可能会重新点燃。从这个角度来说,整体的市场环境是很动荡的…

波卡三季度报告:已实现白皮书目标,异步支持与应用链技术推进

作者:Nicholas Garcia,Messari 研究分析师 编译:OneBlock 来源:https://messari.io/report/state-of-polkadot-q3-2023 知名分析平台 Messari 发布了 Polkadot 2023 年第三季度报告,分析了波卡的关键数据指标以及网…

【蓝桥杯选拔赛真题23】C++计算24 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

C/C++计算24 第十二届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 “计算 24”是一个流传已久的数字游戏,小蓝最近对此痴迷不已 游戏规则是:从 1~10 之间的自然数任意拿出 4 个数(4 个数各不相同,顺序随机),进行加、减、乘三种运算(使用某种运算…