全网最详细,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性能测试

请添加图片描述

九、总结(尾部小惊喜)

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

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

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

相关内容

热门资讯

关於香港人的称呼 关於香港人的称呼陌生的中老年男子和女子正式的通常都叫先生,太太,小姐或女士。比较多人这样称呼,始终是...
天津市北辰区有那几个乡镇啊 !... 天津市北辰区有那几个乡镇啊 !那个乡镇工业多啊详细点北辰区现辖4个街道、9个镇(不是3个了):果园新...
北方盆栽桔子树怎么养 北方盆栽桔子树怎么养盆栽橘子如管理不当,往往只开花、不结果或少结果,甚至不开花。要让盆栽橘子年年开花...
马克龙施压英国承认巴勒斯坦国 据新华社电 英国媒体4日披露,法国总统埃马纽埃尔·马克龙正向英国首相基尔·斯塔默施加压力,试图让后者...
十二星座男最喜欢哪一种类型的女... 十二星座男最喜欢哪一种类型的女孩子,为什么?在我看来,对于水瓶座的男生来说,更喜欢那些娇小可爱的女孩...
马斯克宣布“美国党”成立 当地时间7月5日,美国企业家埃隆·马斯克在社交媒体平台X上发文称,“美国党”于当日成立,以还给人民自...
12生肖中哪肖权威最大? 12生肖中哪肖权威最大?在十二生肖中权威最大的动物肯定是山中的大王老虎,因为它是百兽之王。
当别人和你说,我只要你好好的就... 当别人和你说,我只要你好好的就行,怎么回答?当别人和你说,我只要你好好的就行,怎么你好,这个要看是谁...
汪伦是怎样解释十里桃花的 汪伦是怎样解释十里桃花的汪伦解释说:“十里桃花是指十里外的桃花渡;万家酒店是指桃花潭西有个姓万的人家...
成都有没有比较好的景观(园林)... 成都有没有比较好的景观(园林)设计的手绘培训?你可以去明思源问问看那儿是专门做室内设计跟园林设计培训...