全网最详细,pytest测试框架fixture应用实战总结,彻底打通封装框架......
创始人
2024-06-02 22:22:37
0

目录:导读

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


前言

fixtrue修饰器标记的方法通常用于在其他函数、模块、类或者整个工程调用时会优先执行,通常会被用于完成预置处理和重复操作。

例如:登录,执行SQL等操作。

Pytest自动化框架:https://www.bilibili.com/video/BV18K411m7FH/

完整方法如下:

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

参数说明:

1.scope参数:标记方法的作用域。有4个可选值:function(默认,函数)、class(类)、module(模块)、package/session(包)

(1)作用域为函数实例

import pytest@pytest.fixture(scope='function',autouse=True)
def login():print('登录系统')def test_01():print('测试用例一')class TestCase:def test_03(self):print('测试用例三')def test04(self):print('测试用例四')if __name__ == '__main__':pytest.main(['-s','pytest-demo.py'])

注意:该模块中所有的函数在执行之前都会执行login函数。

(2)作用域为类实例一:

import pytest@pytest.fixture(scope='class',autouse=True)
def login():print('登录系统')def test_01():print('测试用例一')class TestCase1:def test_03(self):print('测试用例三')def test04(self):print('测试用例四')class TestCase2:def test_05(self):print('测试用例五'')def test06(self):print('测试用例六')if __name__ == '__main__':pytest.main(['-s','pytest-demo.py'])

注意:在TestCase1类和TestCase2类中,login方法都只会被执行一次。函数test_01也会执行一次。

(2) 作用域为类实例二:

import pytest@pytest.fixture()
def login():print('登录系统')def test_01():print('测试用例一')@pytest.mark.usefixtures('login')
class TestCase:def test_03(self):print('测试用例三')def test04(self):print('测试用例四')if __name__ == '__main__':pytest.main(['-s','pytest-demo.py'])

注意:此方式函数不会被执行,但是被作用的类中的每个函数执行之前都会执行一次,在测试类前面添加:@pytest.mark.usefixtures(‘login’) 其中login为函数名。

(3)作用域为module时表示整个模块中都只会执行一次。这里不在累述。

(4)作用域为package时表示整个包都只会执行一次。这里不在累述。

(5)在N个用例中指定某一个用例执行

import pytest@pytest.fixture()
def login():print('登录系统')def test_01():print('测试用例一')class TestCase1:def test_03(self):print('测试用例三')def test04(self,login):print('测试用例四')if __name__ == '__main__':pytest.main(['-s','pytest-demo.py'])

注意:test04以参数的形式传入了执行的方法login,这样来指定只有test04方法在执行时才执行login方法。

特别注意:如果在login函数中加入reutrn ‘success’,在test04方法中加入print(login),那么print(login)打印的值就是返回的success.

Fixture参数之params参数可实现参数化:(可以为list和tuple,或者字典列表,字典元祖等)

实例如下:

import pytestdef read_yaml():return ['1','2','3']@pytest.fixture(params=read_yaml())
def get_param(request):return request.paramdef test01(get_param):print('测试用例:'+get_param)if __name__ == '__main__':pytest.main(['-s','pytest-demo.py'])

注意:

1.此例中test01方法被执行了三次,分别使用的数据为’1′,’2′,’3’,此结果类似于ddt数据驱动的功能。特别注意:这里的request参数名是固定的,然后request.param的param没有s哦。

2.可以把return request.param改成yield request.param,yield也是返回的意思,它和return的区别在于return返回后后面不能接代码,但是yield返回后,后面还可以接代码。

Fixture其他参数:

1.autouse参数:自动执行,上面的示例已经用到了。

2.ids参数:ids参数是给每一项params参数设置自定义名称用的,意义不大。

3.name参数:相对于把被fixture标记的方法重命名,意义不大。
如下图所示案例:

@pytest.fixture(name='mashang')   #name参数给fixture设置名称
def login():print('登录方法')def testcase(mashang):      #使用name参数名来引用,还用login报错print('测试用例')

使用@pytest.mark.parametrize()方法实现参数化

方法详情:

parametrize(argnames,argvalues,indirect=False,ids=None,scope=None)

常用参数:

argnames:参数名

argnames:参数值(可以为list和tuple,或者字典列表,字典元祖等),参数值有N个,用例就会执行N次。

(1)使用方式一

import pytestlis = [{'name':'zhangsan'},{'age':'18'},{'sex','男'}]@pytest.mark.parametrize('caseinfo',lis)
def test01(caseinfo):print(caseinfo)if __name__ == '__main__':pytest.main(['-s','pytest-demo.py'])

(2)使用方式二类似于@unpack解包功能实现参数化

import pytestlis = [('admin','123'),('admin1','123456')]
@pytest.mark.parametrize('username,password',lis)def test01(username,password):print(username,password)if __name__ == '__main__':pytest.main(['-s','pytest-demo.py'])
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只站在树上的鸟儿,从来不会害怕树枝断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力现在。成功的路上,只有奋斗才能给你最大的安全感。

努力是会上瘾的,特别是尝到甜头的时候,不努力也会上瘾,特别是习惯懒散了以后,把时间用在努力上才是正事。

最大的对手,往往不是别人,而是自己的懒惰。别指望撞大运,运气不可能永远在你身上,任何时候都要靠本事吃饭。你必须拼尽全力,才有资格说自己的运气不好。

相关内容

热门资讯

蒙奇的翻译是:什么意思 蒙奇的翻译是:什么意思翻译早贺兄成英文是Meng Qi下图是拍判翻译陆袭截图
同岁朋友的老婆应该如何称呼呀,... 同岁朋友的老婆应该如何称呼呀,不知道她的名字一般都叫嫂子,这样不容易出错还表示了尊敬叫嫂子,表示尊重...
高压输电铁塔下听见的“兹兹”声... 高压输电铁塔下听见的“兹兹”声是怎么回事呢?首先,电是交流电,既方向和大小做周期性变化的电流.第二慎...
水来,我在水中等你,火来,我在... 水来,我在水中等你,火来,我在灰烬中等你,的英文歌叫什么名字水来,我在水中等你,火来,我在灰烬中等你...
「微兔早班车」别错过这些新闻 来源:百姓关注近日,据杭州日报消息,江苏一网友曝光一张超速罚单,被扣12分罚款2000元,图片显示平...
劝君前进莫徘徊,成学成名岂易哉... 劝君前进莫徘徊,成学成名岂易哉 宝剑锋从磨励出 梅花香自苦寒来 是什么意思第一句 是说要目标坚定不...
哥伦比亚及乌兹别克斯坦成为金砖... 当地实际7月5日,金砖国家新开发银行在巴西里约热内卢举行的新闻发布会上宣布,批准哥伦比亚和乌兹别克斯...
重培育重激励,构建全周期工作体... 来源:中工网-工人日报 工人日报-中工网记者 张翀 通讯员 蒋萍 周世玮 潘生辉7月3日,湖北省总工...
明确行刑反向衔接案件审查重点   本报讯(记者丁艳红 通讯员翁武华)近日,贵州省检察院出台《贵州省检察机关办理行刑反向衔接案件工作...
离婚两年后,我将女儿的抚养权给... 转自:南湖晚报   N晚报记者 韩瑜超 整理  刘女士:2019年的夏天,我穿着最心爱的白色连衣裙站...