1、Pytest参数介绍

  • -v:打印用例执行的详细过程。
  • -q:只显示整体测试结果。(显示简略过程)
  • -s:用于显示输出调试信息,包括测试函数中print()函数输出的信息。
  • -x--exitfirst:在第一个错误或测试失败时立即退出。

    示例:在第N个用例失败以后,结束测试执行。

    第1次失败,就停止测试:pytest -x ./test_a.py
  • --maxfail=num:表示出现几个用例失败就停止执行测试。

    出现两个失败就终止测试:pytest --maxfail=2 ./test_a.py
  • -h:帮助。
  • -n:支持多线程或者分布式运行测试用例。

    例如:pytest -vs /testcase/test_login.py -n 2

    -n 2表示支持分布式运行测试用例,并且分配两个线程来执行。

    或者pytest.main(['-vs','test_a.py'],'-n=2')
  • --reruns NUM:失败用例重跑。

    示例:

    pytest.main(['-vs','test_a.py'],'--reruns=2')

    表示如果一个用例测试失败了,再重新执行两次,也就是一共执行三次该用例。
  • -k args:根据测试用例的名字,搜索匹配字符串,来执行匹配上的测试用例。

    例如:pytest -vs ./test_a.py -k "ao"
  • --collect-only :收集将要执行的用例,但不会执行用例。

    例如:pytest --collcet-onty
  • -r option:生成简略的指定需求的报告。

提示:

以上功能直接带参数执行启动命令就能够实现,而且还是很多其他的参数,以后在实际工作中好好总结,这里就不一一演示了。

前提要安装好前面提到的Pytest插件要安装好。

  • pytest-rerunfailures:失败case重复执行。
  • pytest-xdist:测试用例分布式执行,也可以说是多CPU分发。

2、Pytest框架用例命名规则

Pytest可以在不同的函数中、包中发现用例,发现的规则如下:

  • 测试文件名以 test_’开头,以 _test’结尾.py文件。(必须有下划线)
  • test_开头的函数。(以下有没有下划线都可以)
  • test_开头的方法。
  • 测试类以 Test 开头,并且类中不能带有init方法。

要注意的是所有的包必须要有init.py文件,在使用PyCharm编辑器时会自动生成。

3、Pytest Exit Code说明

  • Exit Code 0:所有用例执行完毕,全部通过。
  • Exit Code 1:所有用例执行完毕,存在Failed的测试用例。
  • Exit Code 2:用户中断测试执行。
  • Exit Code 3:测试执行过程中发生了内部错误。
  • Exit Code 4:Pytest命令行使用错误。
  • Exit Code 5:未采集到可用测试用例文件。

提示:

Exit Code是公共API的一部分,可以使用以下方法直接导入和访问:

也就是在编写测试用例的时候,我们也可以通过枚举的方式获取Exit Code进行判断或者断言。

步骤1:导入

from pytest import ExitCode

步骤2:调用(都是常量)

pytest.ExitCode.OK

4、pytest.ini全局配置文件

通过全局的配置文件运行测试用例,这种方式才是在实际企业自动化中的应用方式。(前面三种方式是自己测试的时候使用)

pytest.ini文件是Pytest的主配置文件,可以改变Pytest的运行方式,pytest.ini文件的名字是固定的,不能改动。

pytest.ini文件可以改变Pytest测试框架默认的行为(查找执行测试用例的行为),Pytest会读取pytest.ini文件中配置信息,按指定的方式去运行测试用例。

pytest.ini文件要注意:

  1. 存放位置:一般放在项目的根目录(即当前项目的顶级文件夹下)。
  2. 编码格式:必须是ANSI编码格式,可以使用notpad++修改编码格式。
  3. pytest.ini文件中不能使用任何中文符号(也可以用,最好少用)。
  4. 配置了pytest.ini文件后,不管是主函数模式运行用例,还是命令行模式运行用例,都会去读取pytest.ini配置文件中的内容。
  5. CMD命令行中执行pytest -h命令,可以查看pytest.ini的设置选项。

下面是最基础的pytest.ini文件的编写,如下:

[pytest]
# 命令行的参数,用空格分隔
addopts = -s --alluredir report
# 测试用例的路径
testpaths = scripts
# 模块名的规则
python_files = test_parametrize.py
# 类名的规则
python_classes = Test*
# 方法名的规则
python_functions = test*

提示:用的时候把中文全部删除掉。

5、Pytest执行测试用例的顺序

Unittest测试框架,默认是以用例名的ascll大小,来决定测试用例的执行的顺序。

Pytest测试框架:默认从上到下顺序执行测试用例,也就是文件中先写的谁,谁就先执行。

我们可以通过函数装饰器的方式,标记被测试函数来决定用例执行的顺序。

需要使用pytest-ordering插件。

安装⽅式:pip install pytest-ordering

使用方法:

  1. 标记于被测试函数之上,@pytest.mark.run(order=x)
  2. 根据order传入的参数来解决运行顺序。
  3. order值全为正数或全为负数时,运行顺序:值越小,优先级越高。
  4. 正数和负数同时存在:正数优先级高。

示例:

"""
1.学习目标
掌握pytest中用例执行顺序的控制
2.操作步骤
pytest框架下用例执行的默认顺序: 是按照书写顺序从上到下执行
控制测试用例执行顺序,需要安装pytest-ordering库(插件)
pip install pytest-ordering 控制用例执行顺序方法:
在测试用例前添加一个装饰
@pytest.mark.run(order=数字) 执行顺序问题:order=数字
0 > 较小的正数 > 较大正数 > 不使用order > 较小负数 > 较大负数 3.需求
"""
# 1.导入pytest
import pytest # 2.编写测试用例
@pytest.mark.run(order=2)
def test_login():
"""登录用例"""
print("登录步骤")
assert "abcd" in "abcdefg" @pytest.mark.run(order=1)
def test_register():
"""注册用例"""
print("注册步骤")
assert True @pytest.mark.run(order=4)
def test_shopping():
"""购物下单"""
print("购物流程")
assert True @pytest.mark.run(order=3)
def test_cart():
"""购物车用例"""
print("购物车流程")
assert True if __name__ == '__main__':
pytest.main() """
执行结果:
test_order.py::test_register PASSED [ 25%]注册步骤 test_order.py::test_login PASSED [ 50%]登录步骤 test_order.py::test_cart PASSED [ 75%]购物车流程 test_order.py::test_shopping PASSED [100%]购物流程 ============================== 4 passed in 0.06s ============================== Process finished with exit code 0
"""

『德不孤』Pytest框架 — 3、Pytest的基础说明的更多相关文章

  1. 『德不孤』Pytest框架 — 1、Pytest测试框架介绍

    目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...

  2. 『德不孤』Pytest框架 — 2、Pytest的基本使用

    目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...

  3. 『德不孤』Pytest框架 — 10、setUp()和tearDown()函数

    目录 1.setUp()和tearDown()函数介绍 2.setUp()和tearDown()函数作用 3.setUp()和tearDown()函数说明 4.示例 (1)方法级 (2)类级 (3)函 ...

  4. 『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)

    目录 1.Fixture装饰器的用途 2.Fixture参数说明 3.Fixture装饰器简单应用 4.yield执行后置函数 1.Fixture装饰器的用途 做测试前后的初始化设置,如测试数据准备, ...

  5. 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件

    目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...

  6. 『德不孤』Pytest框架 — 15、Pytest参数化

    目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...

  7. 『德不孤』Pytest框架 — 6、Mark分组执行测试用例

    目录 1.Pytest中的Mark介绍 2.Mark的使用 3.Mark的注册和使用 4.使用Mark完成失败重试 5.扩展 1.Pytest中的Mark介绍 Mark主要用于在测试用例/测试类中给用 ...

  8. 『德不孤』Pytest框架 — 12、Pytest中Fixture装饰器(二)

    目录 5.addfinalizer关键字 6.带返回值的Fixture 7.Fixture实现参数化 (1)params参数的使用 (2)进阶使用 8.@pytest.mark.usefixtures ...

  9. 『德不孤』Pytest框架 — 4、Pytest跳过测试用例

    目录 1.无条件跳过skip 2.有条件跳过skipif 3.练习 自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这 ...

随机推荐

  1. 【LeetCode】26. Remove Duplicates from Sorted Array 解题报告(Python&C++&Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 日期 [LeetCode] https:// ...

  2. 【九度OJ】题目1113:二叉树 解题报告

    [九度OJ]题目1113:二叉树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3-- ...

  3. anaconda 命令小览

    一 查看conda环境中安装了什么库: conda list 参考文献: 怎么查看anaconda安装了什么库?-Python学习网

  4. MyBatis 流式查询

    流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个 ...

  5. CS5218|DP转HDMI4K30HZ方案|CS5218应用方案

    Capstone CS5218是一款单端口HDMI/DVI电平移位器/中继器,具有重新定时功能.它支持交流和直流耦合信号高达3.0-Gbps的操作与可编程均衡和抖动清洗.它包括2路双模DP电缆适配器寄 ...

  6. 使用.NET 6开发TodoList应用(16)——实现查询排序

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 关于查询的另一个需求是要根据前端请求的排序字段进行对结果相应的排序. 目标 实现根据排序要求返回排序后的结果 原理与思路 要实 ...

  7. emqx的一个配置参数

    这个参数尝试改为internal后,所有用户都可以匿名登录

  8. 最简短的 AC 自动机!

    写在前面 仍然是写给自己的,看不懂别怪我. 最简短的 AC 自动机! AC 自动机用于多模匹配. 模式串被插入一个添加了一些转移边的 Trie 中.在匹配的时候,若失配,则使下一个字符跳到该节点的 f ...

  9. pytest执行用例:明明只写了5个测试用例, 怎么收集到33个!?

    pytest收集测试用例的顺序: 同一个项目中搜索所有以test_开头的测试文件.test_开头的测试类.test_开头的测试函数 执行测试用例的顺序: 是按照先数据(0~9)>再字母(a~z) ...

  10. Java复制文件用数据流方法,renameTO()方法是相当于剪切操作

    我想达到的效果是,一个文件复制到另一个地方,然后重命名 //判断是否存在 File file = new File("D:/tomcat9.0.12/apache-tomcat-9.0.12 ...