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 也改版了,借此机会补充下. 我们都说开源社区最大的魅力是人人多能够參与进去,发挥众人的力量,让一个 ...
随机推荐
- 高度塌陷与BFC
高度塌陷的产生条件 子元素浮动,脱离文档流 子元素绝对定位或固定定位,脱离文档流 定位产生的高度塌陷只能通过加固定高度或更换其他方案解决塌陷,本文主要讨论浮动产生塌陷的解决方法. 高度塌陷的解决方法 ...
- redis启动报错:The Windows version of Redis allocates a memory mapped heap for sharing with
windows系统下通过cmd命令:redis-server.exe redis.windows.conf 启动redis报错,控制台报错如下: The Windows version of Redi ...
- Python read和write方法
Python read和write方法: read(): 从文件中读取字符串 注:Python 字符串可以是二进制数据,而不仅仅是文字. 语法: 文件对象.read([count]) count:打开 ...
- Tkinter经典写法
1.继承 tkinter.Frame 类,实现类的基本写法 2.创建主窗口及主窗口大小位置及标题 3.将需要添加的组件放入到类中进行创建, 继承的 Frame 类需要使用 master 参数作为父类的 ...
- 完了!TCP出了大事!
前情回顾:<非中间人就不能劫持TCP了吗?> 不速之客 夜黑风高,乌云蔽月. 两位不速之客,身着黑衣,一高一矮,潜入Linux帝国. 这一潜就是一个多月,直到他们收到了一条消息······ ...
- PHP array_shift() 函数
实例 删除数组中的第一个元素(red),并返回被删除的元素: <?php $a=array("a"=>"red","b"=> ...
- CF802C Heidi and Library hard 费用流 区间k覆盖问题
LINK:Heidi and Library 先说一下简单版本的 就是权值都为1. 一直无脑加书 然后发现会引起冲突,可以发现此时需要扔掉一本书. 扔掉的话 可以考虑扔掉哪一本是最优的 可以发现扔掉n ...
- 文档写作利器:Markdown
大佬的文章,写的很好,里面推荐的Markdown编辑工具很不错,值的推荐. 文档写作利器:Markdown_网络_xcbeyond|疯狂源自梦想,技术成就辉煌-CSDN博客https://blog.c ...
- java验证工具类(待验证)
/** * <判断对象是否为null或者空> * * @param obj * 需要判断的对象 * @return 如果对象为null或者空则返回true */ public static ...
- Visual Studio安装
2017 安装的时候,一直显示,安装成功但是有告警. 解决方法: 将visual studio 2017 installer进行卸载,然后安装hw的ios 不能确保下次也可以成功