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中实用但不常用方法列举相关推荐

  1. java arrays方法_Java工具类Arrays中不得不知的常用方法

    原标题:Java工具类Arrays中不得不知的常用方法 Arrays 数组操作集数组转List ---asList 这个被"普遍"称为数组转List的方法,可能是Arrays内大家 ...

  2. pytest中pytest_addoption用法 动态添加命令行参数 (钩子函数)

    考虑场景: 我们的自动化用例需要支持在不同测试环境运行,有时候在dev环境运行,有时候在test环境运行: 有时候需要根据某个参数不同的参数值,执行不同的业务逻辑: 上面的场景我们都可以通过" ...

  3. java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)

    最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...

  4. VS.NET 2005中实用的默认键

    VS.NET 2005中实用的默认键 Shift+Alt+Enter:   切换全屏编辑 Ctrl+B,T   /   Ctrl+K,K:   切换书签开关 Ctrl+B,N   /   Ctrl+K ...

  5. java file构造方法_Java中FileOutputStream类的常用方法

    今天动力节点java学院小编将为大家分享Java中FileOutputStream类的常用方法,希望通过此文能够帮助到大家,下面就随小编一起看看Java中FileOutputStream类的常用方法都 ...

  6. java中立方根方法_java基础:4、java中Math类的常用方法?

    4.java中Math类的常用方法? Java的Math类封装了很多与数学有关的属性和方法.如下所示: System.out.println("计算平方根--Math.sqrt(81)--  ...

  7. java arraylist 常用方法_分享ArrayList中的几个常用方法的源码

    jdk1.7.0_79 上文里解析了有关ArrayList中的几个常用方法的源码--<有关ArrayList常用方法的源码解析>,本文将对LinkedList的常用方法做简要解析. Lin ...

  8. 用vscode编写静态页面_开发中实用的VSCode插件推荐

    本篇文章给大家介绍一下开发中实用的VSCode插件推荐.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 工欲善其事必先利其器,以下是本人为前端开发收集的vscode插件,有需要的话赶 ...

  9. arduino char*转string_Java 中 String 类的常用方法汇总

    一.String 类的概念以及特性 1.String 类的概念 String 类代表字符串,在 java.lang 包中.字符串是常量 ,用双引号引起来表示. 它的值在创建之后不能更改 .由 0 或多 ...

最新文章

  1. 让你二十年后仍是人才
  2. 飞书×品玩邀请多位行业大咖,共谈跨境企业“战疫”秘籍!
  3. 申请硕士学位不必发表论文,清华大学新规登上热搜:不把学术权力交给期刊审稿人...
  4. 关于crontab命令的学习
  5. mathematica趣题解答
  6. python制作动态条形图-python – 动态更新matplotlib中的条形图
  7. 《大型网站技术架构》-读书笔记四:高可用架构
  8. oracle定时任务失效
  9. 深入浅出理解有限状态机
  10. 当随机不够随机:一个在线扑克游戏的教训
  11. android cursor相关的性能问题,Android Mms之:深入理解对话列表管理
  12. nginx location的命中过程
  13. javascript常用校验器
  14. 机械革命Z2air实现 Wake On Lan 远程开机
  15. RHCE(一、二)nmcli命令学习、Linux例行性工作命令atd和crond学习
  16. WPF Behavior 行为
  17. NOIP2010导弹拦截
  18. android+x86+远程桌面,Chrome远程桌面和Android模拟器
  19. 石油大学华东matlab王海燕,中石大获2019全国三维数字化创新设计大赛年度总决赛二等奖...
  20. 卫星轨道资料洋面风的绘图

热门文章

  1. 【WSN】基于改进鲸鱼算法算法实现无线传感器网络wsn节点部署优化matlab源码
  2. 谁是大魔王 - 框架分析
  3. 浅谈BCrypt算法
  4. DM达梦数据库体系结构
  5. 计算机网络之转发设备:中继器、集线器和路由器
  6. 线性分类器与非线性分类器
  7. Android ListView item信息显示不全
  8. h5 iframe嵌套页面_关于解决iframe标签嵌套问题的解决方法
  9. 4、外键约束(FOREIGN KEY)
  10. 代码管理git生成ssh key (公钥私钥)配置GitLab