pytest(10)-常用执行参数说明
pytest单元测试框架中可以使用命令行及代码pytest.main()两种方式执行测试,且可以加入各种参数来组织执行测试。接下来我们来了解常用的执行参数的含义及其用法。
pytest中的执行参数根据作用的不同大致可以分为以下几类:
- 指定测试用例
- 控制执行过程
- 结果展示
每个示例都会以pytest.main()形式及命令行形式两种方式进行说明。
指定测试用例
运行指定路径的测试用例
# 运行当前文件所在的同级目录中,testcase文件夹里的所有测试用例
pytest.main(["./testcase"])
# 也可以写成如下形式。后续示例中都将`./`省略
pytest.main(["testcase"])
# 命令行形式
pytest
# 运行指定模块
pytest.main(["testcase/test_case.py"])
# 命令行形式
pytest testcase/test_case.py
# 运行指定模块中的测试类
pytest.main(["testcase/test_case.py::TestOrder"])
# 命令行形式
pytest testcase/test_case_1.py::TestOrder
# 运行指定类中的测试方法
pytest.main(["testcase/test_case.py::TestOrder::test_order"])
# 命令行形式
pytest testcase/test_case.py::TestOrder::test_order
-m运行指定标记的测试用例
我们之前已经讲过怎么标记用例,可以查看[]
# 运行被标记为smoke的用例
pytest.main(['-m smoke'])
# 命令行形式
pytest -m smoke
# 运行被标记为smoke或order的用例
pytest.main(["-m", "smoke or order"])
# 命令行形式
pytest -m "smoke or order"
-k运行匹配指定字符串的测试用例
-k指定字符串,用于匹配包名、模块名、类名、测试函数名/方法名,这些命名中包含指定的字符串则匹配并执行。
# 运行包名、模块名、类名、测试函数名/方法名中包含order的测试用例
pytest.main(["-k", "order"])
# 命令行形式
pytest -k order
# 运行指定模块中的类名、测试函数名/方法名中包含order的测试用例
pytest.main(["-k", "order", "testcase/test_case.py"])
# 命令行形式
pytest -k login testcase/test_case.py
# 运行指定类中测试函数名包含order的测试用例
pytest.main(["-k", "order", "testcase/test_case.py::TestOrder"])
# 命令行形式
pytest -k order testcase/test_case.py::TestOrder
控制执行过程
用例失败重新执行次数
用例执行时有可能会出现某些偶然因素导致用例断言失败但实际又不是bug的情况,如网络波动导致响应时间慢,此时用例失败后再次去重新执行该用例就显得很重要。
pytest提供了一个常用的插件pytest-rerunfailures,用于设置测试用例运行失败后的最多重新执行次数(即重试机制)。
使用之前需要先安装:pip install pytest-rerunfailures,使用方式如下:
# 运行失败后该用例重新运行最多3次
pytest.main(["--reruns", "3", "testcase/test_case.py"])
# 命令行形式
pytest --reruns=3 testcase/test_case.py
用例执行失败则停止运行
根据需求提供一下两种方式:
-x或--exitfirst,遇到用例执行失败就停止项目的运行,只要失败就立即停止运行--maxfail=num,遇到多少次用例执行失败就停止项目运行,num表示用例运行失败次数
# -x,遇到执行用例失败则停止整个项目的运行
pytest.main(["-x", "testcase/test_case.py"])
# 命令行形式
pytest -x testcase/test_case.py
# --maxfail,如累计有5次用例执行失败则停止整个项目的运行
pytest.main(["--maxfail", "5", "testcase/test_case.py"])
# 命令行形式
pytest --maxfail=5 testcase/test_case.py
运行上次失败用例
当bug修复完成后,我们可能只需要去执行上次运行失败的用例,在pytest中就提供了这样的功能,需要用到一下参数:
--lf或--last-failed,只执行上次运行失败的用例,若上次运行没有失败用例则会执行全部用例。--ff或--failed-first,首先执行上次运行失败的用例,再执行项目中其他所有用例。
# --lf,只执行上次运行失败的用例,若上次运行没有失败用例则会执行全部用例
pytest.main(["--lf", "testcase/test_case.py"])
# 命令行形式
pytest --lf testcase/test_case.py
# --ff,首先执行上次运行失败的用例,再执行项目中其他所有用例
pytest.main(["--ff", "testcase/test_case.py"])
# 命令行形式
pytest --ff testcase/test_case.py
执行结果展示
与展示结果相关的常用的参数有以下几个:
-s,在测试结果中显示测试用例里print的内容(执行结果默认不显示测试用例中print的内容)。-v,显示更详细的测试结果。-q,展示简略的测试结果,与-v作用刚好相反。
# -s,测试结果中显示测试用例里print的内容
pytest.main(["-s", "testcase/test_case.py"])
# 命令行形式
pytest -s testcase/test_case.py
# -v,设置测试结果显示的详细程度
pytest.main(["-v", "testcase/test_case.py"])
# 命令行形式
pytest -v testcase/test_case.py
# -q,设置测试结果显示的详细程度
pytest.main(["-q", "testcase/test_case.py"])
# 命令行形式
pytest -q testcase/test_case.py
示例
测试用例写在testcase/test_case.py中,项目执行代码写在与testcase同级目录的run.py中,简单示例如下:
test_case.py:
def test_01():
print("执行test_01")
a = "hello"
b = "hi"
assert a != b
def test_02():
print("执行test_02")
a = "hello"
b = "hi"
assert a == b
class TestOrder:
def test_order(self):
print("下单")
run.py:
import pytest
if __name__ == '__main__':
pytest.main(["-s", "-v", "--reruns", "2", "testcase/test_case.py"])
运行run.py或命令行pytest -s -v --reruns=2 testcase/test_case.py,结果如下:

我们可以看出来:
- 因为
-s,结果中打印了测试用例中print里面的内容。 - 因为
-v,显示了较为详细的测试结果(不加-v则只显示执行的测试模块,不显示测试用例而是用.表示)。 - 因为
--reruns2,因为test_02的断言始终是失败的,所以失败后又执行了2次,总共执行了3次。
总结
这里只列举了一些常用的运行方法与参数,大家可以在自己的自动化项目中尝试着使用这些方式与参数。
pytest(10)-常用执行参数说明的更多相关文章
- Pytest命令行执行测试
Pytest命令行执行测试 from collections import namedtuple Task = namedtuple('Task', ['summary','owner','done' ...
- python常用执行方式&变量&input函数
linux系统中执行py文件方式: ./a.py 需要执行权限 chmod -R 777(最大权限) 常用执行方式: 1. ./a.py2. python a.py 文件内部头加上 #!/usr/b ...
- 每10秒执行定时任务-crontab
* * * * * /data/crontab.sh * * * * * sleep 10; /data/crontab.sh * * * * * sleep 20; /data/crontab.sh ...
- 【前端】javascript中10常用的个小技巧总结
javascript中10常用的个小技巧总结 本文转自:http://www.cnblogs.com/libin-1/p/6756393.html 1. new Set() 可能有人知道ES6中提供了 ...
- DG on Windows 10 S: 执行任意代码
DG on Windows 10 S: 执行任意代码 windows 10 S版本是什么鬼? 众所周知,我们使用的是windows 10企业版 LTSC.更准确一点,CMD运行winver,我的版本是 ...
- Python单元测试框架之pytest 1 ---如何执行测试用例
From: https://www.cnblogs.com/fnng/p/4765112.html 介绍 pytest是一个成熟的全功能的Python测试工具,可以帮助你写出更好的程序. 适合从简 ...
- Pytest_常用执行参数详解(3)
前面讲了测试用例的执行方式,也认识了 -v -s 这些参数,那么还有没有其它参数呢?答案肯定是有的,我们可以通过 pytest -h来查看所有可用参数. 从图中可以看出,pytest的参数有很多,但 ...
- pytest多进程/多线程执行测试用例
前言: 实际项目中的用例数量会非常多,几百上千:如果采用单进程串行执行的话会非常耗费时间.假设每条用例耗时2s,1000条就需要2000s $\approx$ 33min:还要加上用例加载.测试前/后 ...
- AngularJs自定义指令详解(10) - 执行次序
代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...
随机推荐
- nuxt服务端渲染
<template> <div class="page"> page is search <ul> <li v-for="(it ...
- Druid连接池参数maxWait配置错误引发的问题
Druid连接池参数maxWait配置错误引发的问题 1. 背景 数据库服务器(服务部署在客户内网环境)的运行一段时间后,网卡出现了问题,导致所有服务都连接不上数据库,客户把网络恢复之后,反馈有个服务 ...
- Java实现163邮箱发送邮件到QQ邮箱
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812973124141711876/ 先创建一个maven的普通项目 添加依赖,附在文档末尾 其中几个注意的地方 ...
- root安装jdk其它用户授权
sudo chmod -R 755 java安装目录 sudo chown -R [username] java安装目录
- 随机数Random 和枚举enum
(一):生成随机数 要指定的话 需要在方法中指定最大的值 nextint(10)意思是 下一个的数是10需要导包:import java.util.Random; (二)枚举 enum 的语法和 ...
- boot项目启动成功 接口全部404
今天开发的时候遇到一个404的错误,路径启动类位置都对,就是404很气人.记录下解决的过程,以供遇到同等困惑的小伙伴参考 404原因排查步骤 首先按照下面步骤检查一遍 首先检查路径是否正确,把路径重新 ...
- 嵌入式学习第四步—C语言学习用软件安装
学习一门计算机语言,不能光靠看书,最主要的是要动手联系.不记得从哪里看到过,要成为一名网络大牛,要有10万行以上的程序才是基础. 首先需要一个能够编辑程序的地方(IDE),经过大约10天的网上看各种视 ...
- Julia语言介绍
官网:https://julialang.org/ 中文社区:https://cn.julialang.org/ Julia 是一个面向科学计算的高性能动态高级程序设计语言. 首先定位是通用编程语言, ...
- dgv 自动换行
//设置自动换行 dgv.DefaultCellStyle.WrapMode = DataGridViewTriState.True; //设置自动调整高度 dgv.AutoSizeRowsMode ...
- C++ 基本类型的大小
C++的基本类型: char bool (unsigned) short (int) (unsigned) int (unsigned) long (int) (unsigned) long long ...