pytest「conftest、pytest参数化、重运行、出测试报告」
文章总览图
一、conftest问题整理:
1.这个conftest.py分路径吗?如果在TestCases下建这个包可以直接用吗?
TestCases这里有ModeA和ModeB,想在ModeA或ModeB下面用这个conftest.py里面的,一样全部都可以用。
看目录结构,conftest.py是顶级目录的。实际工作过程中,ModeA和ModeB是个独立的模块,这个独立的模块下有属于自己的前置后置。如果ModeA和ModeB下面有5个模块,把5个模块的前置后置全部放在conftest.py里面,会觉得太多也太繁琐了,同样存在问题。
conftest也支持包的层级,注意一定要是包。 为什么命令行当中提示我引入失败呢?
那是因为这个地方没有创建成包的形式,一定要以Python包的形式创建:
在ModeA或ModeB下面同样可以右键创建conftest,可以作为本模块下的conftest,名字照样是conftest,因为它只有一个名字。
2.在这个文件夹里创建的conftest,可以针对本模块做一些事情。
但是会存在一些问题,这个conftest和最外层的conftest,它有函数名称是重复的。如果存在函数名称重复,按照常规的思路,优先使用自己模块下的conftest,相当于是在子级的conftest当中,对它去做重写。
类和对象当中有学过,子类当中会覆盖父类的同名函数。这里本质上的意思是一样的,虽然我没有定义成类和对象。
如图,有个和它重名的conftest,那么在ModeB下面就用自己模块下的conftest里面的函数。
所以,它是允许分层创建的。也允许在外面放个大的conftest:
这个大的conftest里面可以放ModeA和ModeB这样的模块里面都涉及到的前置和后置。如果是ModeA或ModeB独有的前置和后置,那么就放在它们自己目录下的conftest里面就可以了。所以它是支持层级的。
3.一个文件夹下不宜放太多的.py
文件,不然你会发现一个文件夹下的文件列表会很长。
具体怎么放,视实际情况而定,切记不可死读书。
二、pytest参数化
pytest当中不能使用ddt。流程性质的东西,在pytest里面叫做参数化。
1.pytest和ddt的方式很像,但是还是有区别的:
@pytest.mark.parametrize("参数名",列表数据)
你看,它后面跟了2个变量,ddt当中只要跟一个变量就可以了。比如现在有好几组数据,那在我们ddt当中用一个*
号就可以解决它。但是这里不行。
这里最基本的用法是这样的:
2.首先在这里整个参数名,这个参数名的作用是什么?
因为你这个数据是要给测试用例用的。那么这个参数名就是用来接收每一组数据,如果你这个列表当中有10组数据,那么参数名就依次接收这10组数据。
参数名是放在测试用例当中的参数。列表数据就是那10组数据。
它是作为函数的参数传进来的。
3.这个参数名能都叫data吗?
当然可以。
4.运行的时候它告诉我搜集了多少测试用例,没有报错就证明没问题。
要么从文件开头开始运行,要么从文件结束开始运行。
5.为什么会报错?
登录用例当中用到了pytest当中的fixture
,access_web
是我们的前置条件。它代表了它的返回值,我们有修改,但是我们在这个地方并没有修改:
第一张图,我们可以看到,搜集了8个用例,那就证明这样的写法是没错的。
6.接收下access_web
。前置条件中返回的driver对象以及login的对象。
7.为什么我这里不是py开头?
可以这样设置:
8.在控制台运行,如果有多个文件夹,是不是要先切换到当前的文件夹,再用pytest?
Terminal里面直接是当前的工程路径。和多个文件夹没关系,是从当前路径下面一层一层去找到对应的就行了。
三、重运行
Web自动化中还重视重运行。
在调试的时候会发现用例有的时候能运行成功,有的时候它不能运行成功。Web自动化的用例,准确来说是不太稳定的。它和网页网速、渲染的速度、服务器的状态和自己写脚本的能力都有关系。这些都导致脚本不是特别稳定。
写的每条测试用例应该在本地连续运行3-5次以上。如果没有报错,都能够执行通过,那这种情况下才算在本地调试通过。但是在本地调试通过,不代表在其它的电脑上就一定能调试通过。这是个正常的现象,不要怀疑。
因为不同的电脑,环境也是不一样的。但是你的脚本是一样的,所以大家把代码写好放在其它服务器上去运行的时候,还是需要有一个调试的过程。 但是你在本地调试通过后,再去其它的服务器上调试,问题就会少很多,只有一些小问题需要调试下了。
针对这个现象,Web自动化中有个机制叫做重运行。重运行是专门针对失败的测试用例去重新运行一下。
如果第一次有8个测试用例,运行成功后有2个失败了。那么这2个会重运行。
1.是在这个用例失败后马上重运行,还是等全部用例执行完成后再去把这些失败的用例选出来再去运行?
pytest它的重运行原则是当前这个用例失败后马上重运行。
它的重运行也是命令行,但是需要装插件。插件的名称是rerunfailures(翻译为重运行失败的用例)
安装命令:pip install pytest-rerunfailures
四、出测试报告
我想在jenkins上直接看到测试报告(方便测试经理或产品经理看这个项目的测试结果)。只需自己 登录jenkins上看下最新的测试结果数据。
1.xml就是给jenkins集成这样的东西。我们可以进一步解析xml文件,接口测试中有一种数据表达方式就是xml,xml是用来存储数据。我们拿到这样的数据就可以解析。
第一,如果想二次定制更漂亮的测试报告,可以解析这个xml。
第二,外部的一些软件想要获取测试结果,放到别人的平台上去。那就是通过xml的解析。
2.result log就是在控制台中看到输出的样子。这个格式基本没啥用。
3.Html和Htmltestrunner的区别是比较大的。
以上3种测试报告都有自己的命令格式。xml和result log这2种是自带的,只有Html是需要安装插件的。
命令:
pytest -m demo --reruns 2 --reruns-delay 5 -s --junitxml=Outputs/reports/report.xml --html=Outputs/a.html
怎么写命令,根据实际情况而定,有时候配置了pycharm后,命令也不一样,所以不可死读书。
命令的顺序没有要求,可随便放。
相对路径:相对于当前的工程。
不支持绝对路径,只支持相对路径。
出来的html报告是这个样子的:
路径这个东西表达的方式也是相对路径,因为我们运行的时候是在当前工程这个目录下,所以相对的都是工程的路径。
自己写的logging也可以配置参数在这里输出日志。
欢迎扫码关注!
pytest「conftest、pytest参数化、重运行、出测试报告」的更多相关文章
- pytest框架之rerunfailures失败重运行机制
web自动化测试中,稳定性在整个测试运行中都至关重要,但不能保证测试脚本或者测试环境一直都能够稳定,它牵扯到诸多因素,在这里就不赘述,pytest框架相较于unittest的一大优势就在于拥有用例失败 ...
- pytest - 失败重运行机制:rerun
失败重运行机制 用例失败的情况下,可以重新运行用例 一旦用例失败,马上重新运行 安装插件:pip install pytest-rerunfailures 使用命令:--reruns 重试次数 如 - ...
- pytest(3):pytest运行参数介绍
前言 pytest 带有很多参数,可以使用 pytest --help 来查看帮助文档,下面介绍几种常用的参数: 无参数 读取路径下所有符合规则的文件,类,方法,函数全部执行.使用方法如下: py ...
- 【pytest系列】- pytest测试框架介绍与运行
如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html 前言 目前有两种纯测试的测 ...
- Pytest单元测试框架-Pytest环境安装
unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发 ...
- pytest系列(四)- pytest+allure+jenkins - 持续集成平台生成allure报告
pytest是什么 pytest是python的一款测试框架,拥有unittest的功能并比它更丰富. allure是什么 有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例 ...
- 「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader
「游戏引擎 浅入浅出」从零编写游戏引擎教程,是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 4.1 ...
- 人生重开模拟器「GitHub 热点速览 v.21.36」
作者:HelloGitHub-小鱼干 人生是不能重来的,但是 lifeRestart 能满足你的重开心愿.初始值不满意,你可以一直随机生成或者自动添加颜值.智力.运气值,倒是一种"重生&qu ...
- 从0開始学习 GitHub 系列之「07.GitHub 常见的几种操作」
之前写了一个 GitHub 系列,反响非常不错,突然发现居然还落下点东西没写,前段时间 GitHub 也改版了,借此机会补充下. 我们都说开源社区最大的魅力是人人多能够參与进去,发挥众人的力量,让一个 ...
随机推荐
- 进度条函数 -------ajax初试
做一个显示任务完成情况的进度条: <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- FPAG_Microblaze_PWM_定时器
由于Xilinx底层库的定时器没有PWM例程,调试过程中费了不少劲.生产PWM需要两个定时器同时工作,一个控制频率,一个控制占空比,位数可通过硬件设置. #include "xtmrctr_ ...
- 3-Pandas之Series和DataFrame区别
一.Pandas pandas的数据元素包括以下几种类型: 类型 说明 object 字符串或混合类型 int 整型 float 浮点型 datetime 时间类型 bool 布尔型 二.Series ...
- PHP print() 函数
实例 输出一些文本: <?php print "Hello world!"; ?>高佣联盟 www.cgewang.com 定义和用法 print() 函数输出一个或多 ...
- Python性能分析与优化PDF高清完整版免费下载|百度云盘
百度云盘|Python性能分析与优化PDF高清完整版免费下载 提取码:ubjt 内容简介 全面掌握Python代码性能分析和优化方法,消除性能瓶颈,迅速改善程序性能! 对于Python程序员来说,仅仅 ...
- luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
LINK:Eden 的新背包问题 就是一个多重背包 每次去掉一个物品 询问钱数为w所能买到的最大值. 可以对于每次Q暴力dp 利用单调队列优化多重背包 这样复杂度是Qnm的. 发现过不了n==10的点 ...
- 剑指 Offer 52. 两个链表的第一个公共节点
题目链接 题目描述: 我的题解: 方法一:双指针法 思路分析: 声明两个指针p1,p2 分别指向链表A.链表B. 然后分别同时逐结点遍历 当 p1 到达链表 headA 的末尾时,重新定位到链表 he ...
- 用好这几个技巧,解决Maven Jar包冲突易如反掌
前言 大家在项目中肯定有碰到过Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException.明明在依赖里有这个Jar包啊 ...
- c++日志工具spdLog
c++日志工具spdLog简单使用示例代码 spdlog直接引用头文件就可以使用,这一点还是比较方便的,也是刚入门使用,下面是在源码的示例代码基础上修改测试的代码: #include <cstd ...
- 一切尽在掌控之中:这个Python脚本,让工作自动向你汇报进度!
图源:unsplash 笔者经常编写Python脚本来进行数据处理.数据传输和模型训练.随着数据量和数据复杂性的增加,运行脚本可能需要一些时间.在等待数据处理完成时可以同时做一些其他工作. 很多人学习 ...