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

请添加图片描述

九、总结(尾部小惊喜)

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

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

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

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...