文章总览图

一、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当中的fixtureaccess_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参数化、重运行、出测试报告」的更多相关文章

  1. pytest框架之rerunfailures失败重运行机制

    web自动化测试中,稳定性在整个测试运行中都至关重要,但不能保证测试脚本或者测试环境一直都能够稳定,它牵扯到诸多因素,在这里就不赘述,pytest框架相较于unittest的一大优势就在于拥有用例失败 ...

  2. pytest - 失败重运行机制:rerun

    失败重运行机制 用例失败的情况下,可以重新运行用例 一旦用例失败,马上重新运行 安装插件:pip install pytest-rerunfailures 使用命令:--reruns 重试次数 如 - ...

  3. pytest(3):pytest运行参数介绍

    前言 pytest 带有很多参数,可以使用 pytest --help  来查看帮助文档,下面介绍几种常用的参数: 无参数 读取路径下所有符合规则的文件,类,方法,函数全部执行.使用方法如下:  py ...

  4. 【pytest系列】- pytest测试框架介绍与运行

    如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html 前言​ ​ 目前有两种纯测试的测 ...

  5. Pytest单元测试框架-Pytest环境安装

    unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发 ...

  6. pytest系列(四)- pytest+allure+jenkins - 持续集成平台生成allure报告

    pytest是什么 pytest是python的一款测试框架,拥有unittest的功能并比它更丰富. allure是什么 有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例 ...

  7. 「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader

    「游戏引擎 浅入浅出」从零编写游戏引擎教程,是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 4.1 ...

  8. 人生重开模拟器「GitHub 热点速览 v.21.36」

    作者:HelloGitHub-小鱼干 人生是不能重来的,但是 lifeRestart 能满足你的重开心愿.初始值不满意,你可以一直随机生成或者自动添加颜值.智力.运气值,倒是一种"重生&qu ...

  9. 从0開始学习 GitHub 系列之「07.GitHub 常见的几种操作」

    之前写了一个 GitHub 系列,反响非常不错,突然发现居然还落下点东西没写,前段时间 GitHub 也改版了,借此机会补充下. 我们都说开源社区最大的魅力是人人多能够參与进去,发挥众人的力量,让一个 ...

随机推荐

  1. FPAG_Microblaze_PWM_定时器

    由于Xilinx底层库的定时器没有PWM例程,调试过程中费了不少劲.生产PWM需要两个定时器同时工作,一个控制频率,一个控制占空比,位数可通过硬件设置. #include "xtmrctr_ ...

  2. The JOIN operation -- SQLZOO

    The JOIN operation 注意:where语句中对表示条件的需要用单引号, 下面的译文使用的是有道翻译如有不正确,请直接投诉有道 01.Modify it to show the matc ...

  3. PHP array_intersect_ukey() 函数

    实例 比较两个数组的键名(使用用户自定义函数比较键名),并返回交集: <?phpfunction myfunction($a,$b){if ($a===$b){return 0;}return ...

  4. Python os.lchflags() 方法

    概述 os.lchflags() 方法用于设置路径的标记为数字标记,类似 chflags(),但是没有软链接.高佣联盟 www.cgewang.com 只支持在 Unix 下使用. 语法 lchfla ...

  5. luogu P5667 拉格朗日插值2 拉格朗日插值 多项式多点求值 NTT

    LINK:P5667 拉格朗日插值2 给出了n个连续的取值的自变量的点值 求 f(m+1),f(m+2),...f(m+n). 如果我们直接把f这个函数给插值出来就变成了了多项式多点求值 这个难度好像 ...

  6. PEP8之常用编码规范-摘自官网

    PEP8是广泛应用于Python编码中的规范,这里只会记录最重要的一部分:摘自官网 使用4个空格缩进,不要使用制表符. 4个空格是一个在小缩进(允许更大的嵌套深度)和大缩进(更容易阅读)的一种很好的折 ...

  7. 实验09——java基于TCP实现客户端与服务端通信

    TCP通信         需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手        底层通过 流 发送数据 数据没有大小限制        可靠的传输机制 - 丢包重发 包的顺序的 ...

  8. Android menu菜单的深入了解。。。

    今天补充刚开始的菜单控件,这是基于: https://www.cnblogs.com/aolong/p/12868015.html 里面的菜单写的. 今天学的后面部分是结合昨天的Fragment一起的 ...

  9. Python人脸识别 + 手机推送,老板来了你就会收到短信提示

  10. Java 二维数组及方法概况

    数组 数组是指一组数据的集合,数组中的每个数据被称作元素.在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致. 数组的定义 在Java中,可以使用以下格式来定义一个数组. 数据类型[ ...