pytest框架的前后置(固件,夹具)处理,三种方法:

一、setup/teardown,setup_class/teardown_class(全部)

class TestLogin:def setup_class(self):print("每个类之前执行的的操作,比如创建日志对象、创建数据库连接、创建接口的请求对象")def setup(self):print("每个用例前执行的操作,比如打开浏览器、加载网页")def teardown(self):print("每个用例后执行的操作,比如关闭浏览器")     def teardown_class(self):print("每个类之后执行的操作,比如销毁日志对象、销毁数据库连接、销毁接口的请求对象")@pytest.mark.skip("跳过原因:本轮不执行")def test_login_001(self):print("用例001")@pytest.mark.run(order=1)def test_login_002(self):print("用例002")#注意:全部时小写

二、使用@fixture()装饰器来实现部分用例的前后置

@pytest.fixture(scope="", params="", autouse="", ids="", name="")

scope表示的是@pytest.fixtur标记方法的作用域,function(默认),class,module,package/session
params:参数化 ,支持列表[],元组(),字典列表[{},{},{}],字典元组({}.{},{})
autouse=True:自动执行,默认为False,不会自动执行,需要手动调用
ids:当使用params参数化时,给每一个值设置一个变量名,意义不大
name:给被@pytest.fixtur标记的方法取一个别名

1.scope和autose参数

@pytest.fixture(scope='class', autouse=True)
def my_fixture_class():print("类前置")yield  #yield相当于teardown,下面写teardown的操作print("类后置")
#scope='class'时,标记的方法my_fixture_class()等价于 setup_class/teardown_class                             @pytest.fixture()
def my_fixture_function():print("用例前置")yieldprint("用例后置")
#scope='function'或没有scope时(因为scope默认为function),标记的方法my_fixture_function()等价于setup/teardownclass TestApiinner:def test_inner_api_001(self):print("api用例001")def test_inner_api_002(self, my_fixture_function):# autouse默认为False,不会自动执行,可以在用例中调用@pytest.fixture()标记的方法来执行夹具,传入的是方法对象,不能带括号。print("api用例002")def test_inner_api_003(self):print("api用例003")class TestApiForOut:def test_for_out_api_001(self):print("api用例001")def test_for_out_api_002(self):print("api用例002")def test_for_out_api_003(self):print("api用例003")if __name__ == '__main__':pytest.main()

可以用多个@pytest.fixture()分别标记多个方法,来实现和setup/teardown,setup_class/teardown_class相同的效果

2.params、ids、name

@pytest.fixture(params=['盖伦', '寒冰', '剑圣'],ids=['gl','hb','js'])
'''
如果使用name参数,如@pytest.fixture(params=['盖伦', '寒冰', '剑圣'],ids=['gl','hb','js'], name='aaa'),
则定义的方法名my_fixture_function将不能再使用,后面的调用都必须使用别名aaa
'''
def my_fixture_function(request):print("用例前置")yield request.param #return和yiled都是表示返回的意思,但是return后面不能有代码,yiled返回可以接代码print("用例后置")class TestApiinner:def test_inner_api_001(self, my_fixture_function):print(str(my_fixture_function)+"执行了内部api用例001")def test_inner_api_002(self):print("内部api用例002")

三、通过conftest.py和@pytest.fixture()结合使用,实现全局的前置应用

  • conftest.py文件时单独存放的一个夹具配置文件,名称不能修改
  • 用处:在不同的py文件中使用同一个fixture函数
  • conftest.py需要和运行的用例放到同一层,不需要用import导入操作

all_fixture()定义在testcase目录下 ,可供全局的用例使用
api_fixture()定义在test_api目录下,仅可在当前目录内使用
all_fixture()和api_fixture()可以同时使用,会按照先后顺序执行

 - class TestApiForOut:def test_for_out_api_001(self, all_fixture, api_fixture):print("\n对外api用例001")def test_for_out_api_002(self, api_fixture):print("\n对外api用例002")def test_for_out_api_003(self, all_fixture):print("\n对外api用例003")

四、断言

assert

五、pytest结合allure-pytest生成allure测试报告

入门阶段学习的测试报告插件:pytest-html
进阶阶段学习的测试报告插件:allure-pytest

1、下载、解压、配置path路径

下载地址:allure下载
allure的path路径:将allure的bin目录添加至环境变量path
验证:allure --version

Q&A:
1、dos可以验证,但是在pycharm验证失败? --重启pycharm
2、未安装jdk的同学需要下载安装jdk,jdk下载

2、加入命令生成json格式的临时报告

在pytest中增加参数 --alluredir ./临时文件目录
如:addopts = -vs --alluredir ./tmp

3、生成allure报告

if __name__ == '__main__':pytest.main()os.system('allure generate ./tmp -o ./report --clean')

allure generate 命令,生成报告
./tmp 临时的json格式报告路径
-o 输出 output
./report 生成的allure报告路径
–clean 清空这个目录下原来的报告

4、allure报告的定制

  1. 替换allure报告的logo

Q&A

1.创建虚拟环境项目时,虚拟环境本地Terminal:此系统禁止脚本运行,导致安装的插件未在虚拟环境安装成功以及后续一系列神奇的问题:主函数运行失败,命令行可以运行成功;主函数运行结果和命令行运行结果不一样。
处理方法:用管理员身份运行 PowerShell,然后输入set-executionpolicy remotesigned,再输入y确认即可

【pytest】2.pytest的前置、后置相关推荐

  1. Pytest fixture实现测试用例前置后置操作

    大家好,我是杨叔.每天进步一点点,关注微信公众号[程序员杨叔],了解更多测试开发技术知识! 一.背景 自动化测试时必然会碰到用例执行前,需要做一些前置操作,以及用例执行后,需要做一些后置操作的时候.本 ...

  2. 【pytest】概述pytest——setup、teardown方法和conftest中的fixture用法,来执行测试用例的前置/后置条件语句操作

    大家好,我是好学的小师弟.今天和大家分享下-在pytest中的前置/后置操作. 所谓的前置/后置操作,就是在测试用例执行前,你预先要执行的一些步骤:在测试用例执行完毕后,你要执行的一些数据清理/备份工 ...

  3. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...

  4. AOP开发——在不修改源代码的前提下,对类里面的方法进行增强 : 前置 后置 环绕 异常||如何得到目标方法的参数和返回值

    AOP开发 @Transactionl 在不修改源代码的前提下,对类里面的方法进行增强 前置 后置 环绕 异常 创建项目前引入aop的包 <dependency>     <grou ...

  5. 手写Spring-第六章-让我访问!实现前置后置处理扩展功能

    前言 上一次我们实现了bean定义的自动化注册,这让我们的demo看起来已经很有Spring的那个味道了.但是扩展性还是差了一些.我们都知道,要写出高内聚,低耦合,富有扩展性的代码.那么如何增加扩展性 ...

  6. [凯圣王]碳水在身体内的去向/碳水前置后置的区别/碳水循环计划的简聊/训练前什么时间吃碳水

    碳水在身体内的去向/碳水前置后置的区别/碳水循环计划的简聊/训练前什么时间吃碳水 一.视频 二.碳水的种类 三.碳.蛋.脂 转换关系 四.碳水在身体中的储存数量 五.碳水什么时候补充 六.碳水循环饮食 ...

  7. Jmeter性能测试学习(五):Beanshell处理器(包含前置后置)

    BeanShell是一种脚本语言,一种完全符合java语法的java脚本语言,并且又拥有自己的一些语法和方法,beanShell是一种松散类型的脚本语言(这点和JS类似).jmeter中就有这个内嵌的 ...

  8. pytest 前置后置用法之 Fixture、setup、teardown

    文章目录 前言 使用 setup 和 teardown 实现 方法介绍 方法级别 类级别 模块级别 整体案例 执行结果 使用 Fixture 实现 方法介绍 使用 Fixture 完成前置方法 所有用 ...

  9. c 复杂的前置后置面试题_采摘后18小时直达货架,利农集团用后置仓“直连”生鲜电商...

    文 | 杨亚飞图片来源| pexels36氪获悉,日前,亚洲知名集约化无土水培果蔬种植企业利农集团完成新一轮数千万美元融资,投资方为海纳亚洲创投基金(SIG).本轮融资所得资金将继续使用于种植基地和产 ...

  10. c 复杂的前置后置面试题_OPPO Reno拆解:优秀工艺由外而内,复杂用料不负旗舰之名...

    OPPO的新系列Reno手机最近吸引了不少注意力,不管是消费者还是手机极客都对其优秀的性能和强大的配置抱有极大的兴趣.最近,知名数码博主爱玩客对Reno十倍变焦版进行了拆解,从内部结构向我们揭示了这部 ...

最新文章

  1. 洛谷——P1951 收费站_NOI导刊2009提高(2)
  2. CSS父级子级学习总结
  3. 赛事丨出道题就能赢万元奖金?华录杯大赛告诉你,是真的
  4. 第一阶段unity基础
  5. python中的enumerate函数
  6. 我程序中用到的第一个递归算法
  7. 81. 搜索旋转排序数组 II---Leecode----java
  8. Dropwizard,MongoDB和Gradle实验
  9. android开发入门_Android开发入门
  10. 云计算的基础设施服务
  11. linux 在家工作_我如何调整在家工作的习惯
  12. Linux安装与基本操作命令与JDK的安装,Mysql的安装,Tomcat的安装
  13. GridSearchCV( )参数详情
  14. Java学习不走弯路教程(16 用Ajava异步请求)
  15. (4)数据结构-线性表补充
  16. 「MYSQL」MYSQL中的int(11)到底代表什么意思?
  17. 数据挖掘导论课后习题答案-第四章
  18. java下载不了_教大家电脑java安装不了怎么办
  19. 创建exchange邮箱用户
  20. 支持树莓派的路由器系统_基于树莓派(Raspberry Pi)搭建openwrt路由器

热门文章

  1. 微信小程序自定义图片上传组件
  2. 利用Verilog计算IQ信号相位的一种方法
  3. c语言程序设计科研训练报告,科研训练总结精选 .doc
  4. 近期必读的12篇「推荐系统」相关论文
  5. 格式转换小技巧全在这
  6. DL/T645-1997
  7. 从来没有一种工作叫:钱多事少离家近,位高权重责任轻
  8. UE4 IOS打包详解
  9. 804. 唯一摩尔斯密码词
  10. pdfbox 去除签名 保留签名图片