pytest中实用但不常用方法列举
hello,大家好,今天和大家一起学习下pytest中实用但不常用的一些方法,作为一名测试,可能不像开发那样天天写代码,所以有时我们会逐渐遗忘一些方法或这语法,所以以免后期我也遗忘,今天做下记录
一:pytest中的testcase执行顺序,废话不多,直接上代码
import os,sysdef setup_module():print('--setup module--')class TestTmp(object):@classmethoddef setup_class(cls):print('--setup class--')def setup(self):print('--set up--')def test_01(self):print('--test 01--')def test_02(self):print('--test 02--')def teardown(self):print('--teardown--')@classmethoddef teardown_class(cls):print('--teardown class--')
执行结果,如下:
tmp.py::TestTmp::test_01 --setup module--
--setup class--
--set up--
--test 01--
PASSED--teardown--tmp.py::TestTmp::test_02 --set up--
--test 02--
PASSED--teardown--
--teardown class--
--teardown module--
从上面的直接结果,我们可以直接看出,在pytest中,不管是setup的module还是teardown的module,都是最先执行的,也就是优先级最高,其次是class,而后是set up,其中set up是针对测试用例而言的,有几个测试用例,就运行几次
二:pytest中常用的装饰器
import pytest@pytest.fixture()
def func(fjh_module,fjh_class,fjh_session):print('。。。fun执行之前。。。')yieldprint('...fun执行之后...')@pytest.fixture(scope='class')
def fjh_class():print('。。。fjh_class执行之前。。。')yieldprint('。。。fjh_class执行之后。。。')@pytest.fixture(scope='module')
def fjh_module():print('。。。fjh_module执行之前。。。')yieldprint('。。。fjh_module执行之后。。。')@pytest.fixture(scope='session')
def fjh_session():print('。。。fjh_session执行之前。。。')yieldprint('。。。fjh_session执行之后。。。')class Test_demo(object):def test1(self,func):print('。。。这是test1。。。')def test2(self,func):print('。。。这是test2。。。')class Test_demo1(object):def test3(self,func):print('。。。这是test3。。。')def test4(self,func):print('。。。这是test4。。。')
执行结果,如下:
tmp2.py::Test_demo::test1 。。。fjh_session执行之前。。。
。。。fjh_module执行之前。。。
。。。fjh_class执行之前。。。
。。。fun执行之前。。。
。。。这是test1。。。
PASSED...fun执行之后...tmp2.py::Test_demo::test2 。。。fun执行之前。。。
。。。这是test2。。。
PASSED...fun执行之后...
。。。fjh_class执行之后。。。tmp2.py::Test_demo1::test3 。。。fjh_class执行之前。。。
。。。fun执行之前。。。
。。。这是test3。。。
PASSED...fun执行之后...tmp2.py::Test_demo1::test4 。。。fun执行之前。。。
。。。这是test4。。。
PASSED...fun执行之后...
。。。fjh_class执行之后。。。
。。。fjh_module执行之后。。。
。。。fjh_session执行之后。。。
关于scope的参数说明
scope是fixture函数里的一个参数,默认为function。
当scope=“function” 时,它的作用范围是每个测试用例来之前运行一次,而销毁代码(yield)在测试用例之后运行。
当scope=“class” 时,如果一个class里面有多个用例都调用了一次fixture,那么此fixture只在此class里所有用例开始前执行一次。
当scope=“module” 时,在当前.py脚本里面所有用例开始前只执行一次。
当scope=“session” 时,可以跨.py模块调用的,也就是当我们有多个.py文件的用例的时候,如果多个用例只需调用一次fixture,那就可以设置为scope=“session”,并且写到conftest.py文件里。(下面会提到这个文件)
所以说fixture可以通过scope参数控制setup级别。
如果不想在test方法调用时传入func,那么需要自动识别相应的fixture函数,因此,需要借助autouser=true,在每个fixture装饰的方法中添加这个,运行测试用例会自动识别
三:pytest中的xfail方法
当我们在跑接口自动化或ui自动化时,经常会遇到fail的情况,这个时候,程序就会自动报错,无法运行下去,为了规避这种情况,我们来介绍一下xfail的使用
直接上代码
import pytet@pytest.fixture()
def func():print('。。。fun执行之前。。。')yieldprint('...fun执行之后...')class Test_demo(object):@pytest.mark.xfaildef test1(self,func):print('。。。这是test1。。。')@pytest.mark.xfaildef test2(self,func):print('。。。这是test2。。。')@pytest.mark.xfaildef test3(self):print('。。。这是test3。。。')assert 1==2class Test_demo1(object):@pytest.mark.xfaildef test3(self,func):print('。。。这是test3。。。')@pytest.mark.xfaildef test4(self,func):print('。。。这是test4。。。')
上面的输入结果
1 xfailed ,4 xpassed in 0.02s
在实例中test3明显是错误的,在正常情况下是会终止代码运行,所以这是后添加xfail装饰器,可以有效的避免程序中断的行为,同时,程序也会友好的提出有几个失败的案例
四:pytest中的parametrize方法
先上代码
import pytest
data=[('张三','男'),('李四','女')]
data1=['case1','case2','case3']
exe_value='name,sex'@pytest.mark.parametrize(exe_value,data)
def test_name(name,sex):print('--->',data)print(name,sex)
1、第一个参数是字符串,多个参数中间用逗号隔开
2、第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应
3、传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化
4、传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化
pytest中实用但不常用方法列举相关推荐
- java arrays方法_Java工具类Arrays中不得不知的常用方法
原标题:Java工具类Arrays中不得不知的常用方法 Arrays 数组操作集数组转List ---asList 这个被"普遍"称为数组转List的方法,可能是Arrays内大家 ...
- pytest中pytest_addoption用法 动态添加命令行参数 (钩子函数)
考虑场景: 我们的自动化用例需要支持在不同测试环境运行,有时候在dev环境运行,有时候在test环境运行: 有时候需要根据某个参数不同的参数值,执行不同的业务逻辑: 上面的场景我们都可以通过" ...
- java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)
最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...
- VS.NET 2005中实用的默认键
VS.NET 2005中实用的默认键 Shift+Alt+Enter: 切换全屏编辑 Ctrl+B,T / Ctrl+K,K: 切换书签开关 Ctrl+B,N / Ctrl+K ...
- java file构造方法_Java中FileOutputStream类的常用方法
今天动力节点java学院小编将为大家分享Java中FileOutputStream类的常用方法,希望通过此文能够帮助到大家,下面就随小编一起看看Java中FileOutputStream类的常用方法都 ...
- java中立方根方法_java基础:4、java中Math类的常用方法?
4.java中Math类的常用方法? Java的Math类封装了很多与数学有关的属性和方法.如下所示: System.out.println("计算平方根--Math.sqrt(81)-- ...
- java arraylist 常用方法_分享ArrayList中的几个常用方法的源码
jdk1.7.0_79 上文里解析了有关ArrayList中的几个常用方法的源码--<有关ArrayList常用方法的源码解析>,本文将对LinkedList的常用方法做简要解析. Lin ...
- 用vscode编写静态页面_开发中实用的VSCode插件推荐
本篇文章给大家介绍一下开发中实用的VSCode插件推荐.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 工欲善其事必先利其器,以下是本人为前端开发收集的vscode插件,有需要的话赶 ...
- arduino char*转string_Java 中 String 类的常用方法汇总
一.String 类的概念以及特性 1.String 类的概念 String 类代表字符串,在 java.lang 包中.字符串是常量 ,用双引号引起来表示. 它的值在创建之后不能更改 .由 0 或多 ...
最新文章
- 让你二十年后仍是人才
- 飞书×品玩邀请多位行业大咖,共谈跨境企业“战疫”秘籍!
- 申请硕士学位不必发表论文,清华大学新规登上热搜:不把学术权力交给期刊审稿人...
- 关于crontab命令的学习
- mathematica趣题解答
- python制作动态条形图-python – 动态更新matplotlib中的条形图
- 《大型网站技术架构》-读书笔记四:高可用架构
- oracle定时任务失效
- 深入浅出理解有限状态机
- 当随机不够随机:一个在线扑克游戏的教训
- android cursor相关的性能问题,Android Mms之:深入理解对话列表管理
- nginx location的命中过程
- javascript常用校验器
- 机械革命Z2air实现 Wake On Lan 远程开机
- RHCE(一、二)nmcli命令学习、Linux例行性工作命令atd和crond学习
- WPF Behavior 行为
- NOIP2010导弹拦截
- android+x86+远程桌面,Chrome远程桌面和Android模拟器
- 石油大学华东matlab王海燕,中石大获2019全国三维数字化创新设计大赛年度总决赛二等奖...
- 卫星轨道资料洋面风的绘图