pytest--命令行常用参数
前戏
在python中,大家听到最多的单元测试框架就是unittest和pytest了,而pytest有很多的功能,甩unittest几条街
我们在使用pytest时,要遵循pytest的命名规则:
- 测试文件应当命名为test_**.py或者**_test.py
- 测试函数,测试类方法应当名为为test开头
- 测试类应当命名为Test开头
安装
官网:https://doc.pytest.org
pip install pytest
注意:我安装最新的pytest,执行时报错,原因是最新版本和allure-pytest兼容性有点问题,所以我安装的pytest的版本是4.5.0
一个简单的例子
pytest_one.py
def inc(x):
return x + 1 def test_answer():
assert inc(3) == 4 def test_answer1():
assert inc(4) == 5
在当前目录下执行

=============== test session starts ===================
pytest为每段测试会话session做了明确的分割,一段会话就是pytest的一次调用,它可能包含多个目录下被执行的测试用例
platform win32 -- Python 3.6.5, pytest-4.5.0, py-1.7.0, pluggy-0.12.0
我使用的是wins,所以显示platform win32,python的版本是3.6.5,pytest的版本是4.5.0,py-1.7.0,和pluggy-0.12.0是python的包,后面的数字是包的版本
rootdir: E:\django-project\orm_project 当前执行脚本的目录
collected 2 items 搜索范围内找到了两个测试用例
test_one.py .. test_one.py表示测试文件,每个测试文件的测试情况只占据 一行,两个..表示两个测试用例均已通过,点号仅仅表示通过,而Failure(失败),error(异常),skip(跳过),xfail(预期失败),xpass(预期失败但通过)会被分别标记为F、E、s、x、X
========== 2 passed in 0.07 seconds ==================
表示通过的数量以及这段会话耗费的时间
运行单个测试用例
上面我们运行了test_one.py,里面有连个测试用例,都被我们运行了,但有时我们只想运行里面的一个方法,可以在指定文件后方加::test_name
比如上面的我们只想运行 test_answer这一个方法

这样我们就只运行了test_one.py里test_answer一个方法
命令行选项
--version
显示当前的pytest版本及安装目录

-v
使用-v选项,输出的信息会更加详细,最明显的区别就是每个文件中的每个测试用例都占一行,测试的名字和结果都会显示出来,而不仅仅是一个点或字符

我把上面的一个方法改成断言失败了,所以会有一条测试用例失败,一条成功,失败的测试用例也给出了我们的错误信息
-q(--quiet)
该选项的作用与-v的相反,他会简化输出信息,可以和--tb=line(仅打印异常信息的代码位置)搭配使用

--tb=style
--tb=style选项决定会捕捉到失败时输出信息的显示方式,
- 使用--tb=no屏蔽全部回溯信息
- 使用--tb=line,它可以告诉我们错误的位置
- 使用--tb=short,显示的回溯信息比前面两种模式的更详细
-l(--showlocals)
使用-l选项,失败测试用例由于被堆栈追踪,所有局部变量及其值都会显示出来

--help
获取帮助信息
usage: pytest [options] [file_or_dir] [file_or_dir] [...]
如果你不提供任何参数,pytest会在当前目录以及子目录下寻找测试文件,然后运行搜索到的测试代码,如果你提供了一个或多个文件名、目录名,pytest会逐个查找并运行所有测试,为了搜索到所有的测试代码,pytest会递归遍历每个目录及其子目录。
--collect-only
使用--collect-only选项可以展示在给定的目录下哪些测试用例会被运行,可以在测试运行之前,检查选中的测试用例是否符合预期

上面告诉了我们,在orm_project这个目录下,一共有三个满足要求的文件,test_one.py,test_two.py,test_three.py。而test_three.py下只有一个满足要求的方法,是以test开头的,而另一个不是以test开头的方法,不会被pytest识别
-k
-k选项允许你使用表达式指定希望运行的测试用例,如果某测试名是唯一的,或者多个测试名的前缀或后缀相同,那么可以使用表达式来快速定位,假设希望选中test_model()和test_answer(),那么可以使用--collect-only验证筛选情况

上面表示该目录下测试方法名里有model和demo的,只有两个,一个在test_one.py里面,一个在test_three.py里面
现在把--collect-only去掉,让他们正常运行

-m
标记(marker)用于标记测试并分组,以便快速选中并运行,以test_replace()和test_member_access()为例,他们甚至都不在同一个文件里,如果你希望同时选中他们,那么可以预先做好标记。
使用什么标记名由你自己决定,假设你希望使用run_this_case,则可以使用@pytest.mark.run_this_case这样的装饰器来做标记,像下面这样
import pytest def inc(x):
return x + 1 @pytest.mark.run_this_case
def test_model():
assert inc(3) == 4 def test_answer():
assert inc(4) == 5
现在有两个文件,每个文件里都有一个方法加上了这样的标记,我们来运行一下
有相同标记的集合,可以一起运行,这里我们使用pytest -m run_this_case命令就可以同时运行这两个方法
使用-m选项可以用表达式指定多个标记名。使用-m “mark1 and mark2”则会选中带有这两个标记的所有测试用例。使用-m “mark1 and not mark2”则会选中带有mark1的测试用例,而过滤掉mark2的测试用例。使用-m “mark1 or mark2”则选中带有mark1或者mark2的所有测试用例

使用@pytest.mark.name_of_the_mark装饰器应用的未注册标记将始终发出警告,以避免警告。您可以通过在pytest.ini文件中注册或使用自定义pytest_configure来禁用自定义标记的警告。
-x
正常情况下,pytest会运行每一个搜索到的测试用例,如果某个测试函数被断言失败,或者触发了外部异常,则该测试用例的运行就会到此为止,pytest将其标记为失败后会继续运行下一个测试用例。通常,这就是我们期望的运行模式。但是在debug时,我们会希望遇到失败时立即停止整个会话,这时-x选项就派上用场了

pytest告诉我们找到了6个测试用例,执行到第三个时失败了,就结束了,没有继续往下执行,如果没有-x选项,那么6个测试用例都会被执行。
--maxfail=num
-x选项的特点是,一旦遇到测试失败,就会全局停止。假设你允许pytest失败几次后在停止,则可以使用--maxfail选项,明确指定可以失败几次
如果我们设置--maxfail=1,就与-x的作用相同

--lf(--last-failed)
当一个或多个测试失败时,我们常常希望能够定位到最后一个失败的测试用例重新运行,这时可以使用--lf选项

--ff(--failed-first)
--ff选项与--last-failed选项的作用基本相同,不同之处在于--ff会运行完剩余的测试用例

pytest--命令行常用参数的更多相关文章
- Oozie命令行常用命令汇总[转]
Oozie命令行常用命令汇总 有时候脚本跑多了就不愿意在OozieWeb端去看脚本的运行情况了.还好Oozie提供了很多命令行命令.能通过命令行直接检索自己想看到的脚本信息.在这里简单进行一下总结.一 ...
- 提高Linux运维效率的命令行常用快捷键
提高Linux运维效率的命令行常用快捷键 tab 命令或路径等的补全键,Linux最有用快捷键 Ctrl+a 光标回到命令行首 Ctrl+e 光标回到命令行尾 Ctrl+k 剪切(删除)光标处到行尾的 ...
- 提高Linux运维效率的30个命令行常用快捷键
提高Linux运维效率的30个命令行常用快捷键 表4-1 30个常用快捷键 快捷键 功能说明 最有用快捷键 tab 命令或路径等的补全键,Linux最有用快捷键* 移动光标快捷键 Ctrl+a 光标 ...
- linux 命令行常用快捷键
linux命令行常用快捷键,区别于vim编辑器快捷键.熟练掌握下面的快捷键可提高操作linux的工作效率.当然最重要的是可以装屌. 1.移动光标快捷键Ctrl+a光标回到命令行首* Ctrl+e光标回 ...
- Pytest命令行执行测试
Pytest命令行执行测试 from collections import namedtuple Task = namedtuple('Task', ['summary','owner','done' ...
- 在VS中向命令行添加参数的方法
在VS中向命令行添加参数的方法 在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入 ...
- [转]Mysql命令行常用操作
Mysql命令行常用操作 一.从命令行登录MySQL数据库服务器 1.登录使用默认3306端口的MySQL /usr/local/mysql/bin/mysql -u root -p 2.通过TCP连 ...
- Shell Scipt 命令行带参数,输出log
命令行带参数,以及字符串参数放到ssh命令里可以这么放: #!/bin/bash 这行保证运行bash可以这样: ./data.sh if [ $# != 4 ]; then echo ...
- 历史命令~/.bash_history,查看所有别名alias,命令执行顺序,命令行常用快捷键,输入输出重定向,wc统计字节单词行数
历史命令大小:/etc/profile中字段HISTSIZE=1000 历史命令保存文件:~/.bash_history history -c 清空历史命令 history -w 把历史命令写入~/. ...
- 记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖,编码集问题无法读取文件等.
spring cloud 配置中心 结合GIT , 可以运行时更新配置文件.发送指令让应用重新读取配置文件. 最近在测试服务器实现了一套,结果CPU 实用率暴增,使用docker compose启动 ...
随机推荐
- 文件上传之靶场upload-labs (11-20)
第十一关 strrpos() 函数查找字符串在另一字符串中最后一次出现的位置 substr() 函数返回字符串的一部分 文件保存的方式是上传路径+随机时间+截取的文件后缀 其中上传路径可控,可以利用这 ...
- Harmonious Army
Harmonious Army Now, Bob is playing an interesting game in which he is a general of a harmonious arm ...
- 使用索引别名和Rollover滚动创建索引
使用索引别名和Rollover滚动创建索引 在ElasticSearch6.3.2 集群做节点冷(warm) 热(hot) 分离中,实现了ElasticSearch集群节点的冷热分离,新创建的索引只允 ...
- centos切换php版本
centos服务器上安装了php5.3到php7.2版本的php,默认使用php -v,查看到的php版本信息为: 修改环境变量文件:vim /etc/profile shift+g跳转到最后一行环境 ...
- winform子窗口与父窗口的交互-使用委托与事件
实现子窗口与父窗口的交互,通过父窗口调用并控制子窗口,子窗口也能控制父窗口,使用委托和事件的方法,可以实现. 1.父窗口调用子窗口,并通过子窗口控制父窗口 新建工程,创建两个窗体 显示子窗体的代 ...
- fancybit个人简介
程序员一枚 熟悉C C++ C# js lua等多种常见开发语言 熟悉Unity游戏开发 node.js pomelo和C# scut 网游后端框架 做过.net和php网站后端 二次元文化爱好者 有 ...
- Golang fmt Printf 格式化参数手册/详解/说明
fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. 格式“占位符”衍生自C,但比C更简单. fmt 包的官方文档对Printing和Scanning有很详细的说明.这里就直接 ...
- 香草js侦测元素是否离开视窗viewport
很多时候,我们需要检查一个元素是否已经部分不在或者全部不在视窗区域,当这种现象发生时做相应的处理. 比如在CMS编辑内容时,其工具菜单很有可能因为内容区域过长导致滑出视窗区域,而工具栏又是经常要使用的 ...
- beyond compare全文件夹比较,仅显示变化的文件
beyond compare是一款非常优秀的文件夹同步比较工具,赞. 非常强大的一点就是给定两个文件夹可以自动列出所有不同的文件和子文件夹,但是有一点可能很多人碰到过,也就是需要一个个点开才能重新比 ...
- 离散数学交并补运算、差运算、异或运算的实现--biaobiao88
对集合的交并补运算.差运算及异或运算的代码,可输入字符与数字,内容简单,详情请看以下代码 #include<iostream> using namespace std; int main( ...