python的pytest框架之命令行参数详解(下)


Posted in Python onJune 27, 2019

前言

上篇说到命令行执行测试用例的部分参数如何使用?今天将继续更新其他一些命令选项的使用,和pytest收集测试用例的规则!

pytest执行用例命令行参数

--collect-only:罗列出所有当前目录下所有的测试模块,测试类及测试函数

python的pytest框架之命令行参数详解(下)

--tb=style:屏蔽测试用例执行输出的回溯信息,可以简化用例失败时的输出信息。style可以是 on,line,short,具体区别请自行体验

python的pytest框架之命令行参数详解(下)

--lf:当一次用例执行完成后,如果其中存在失败的测试用例,那么我们可以使用此命令重新运行失败的测试用例

我们第一次执行用例,会看到有2个用例失败

python的pytest框架之命令行参数详解(下)

我们使用--lf参数再次运行用例,可以发现只有之前失败的两个用例重新执行了一次

python的pytest框架之命令行参数详解(下)

--ff:如果上次测试用例出现失败的用例,当使用--ff后,失败的测试用例会首先执行,剩余的用例也会再次执行一次

python的pytest框架之命令行参数详解(下)

小结

以上就是命令行运行测试用例时经常使用到的参数,这些参数不仅可以单独使用,也可以组合一起使用,后期还会涉及到使用fixture时的一些命令,现在不需要了解。你可以使用--help来查看一些命令帮助信息!

pytest收集测试用例的规则

1)从一个或者多个目录开始查找,你可以在命令行指定文件或者目录,如果未指定那么从当前目录开始收集用例

2)在该目录和所有子目录下递归查找测试模块

3)测试模块是指文件名为test_*.py或者*_test.py的文件

4)在测试模块中查找以test_开头的函数

5)查找名字以Test开头的类。其中首先筛选掉包含__init__()函数的类,再查找类中以Test_开头的类方法

规则验证

现在我们就依次演示pytest搜索测试用例的过程

首先我们按照以下目录结构新建一个项目

python的pytest框架之命令行参数详解(下)

每个文件编写如下代码(我们只是为了验证规则,所以用例些的很简单,实际项目不会存在这样简单的用例)

test_测试模块1.py

# 测试函数
 def test_2():
 assert 1 == 1
 # 普通函数
 def func_2():
 print('普通函数') 
 # 测试类
 class TestClass_2(object):
# 测试函数
def test_class_3(self):
assert 1 == 1
# 普通函数
def func_class_3(self):
assert 1 == 1
# 普通类
class NoTestClass_2(object):
# 测试函数
def test_class_4(self):
assert 1 == 1
 # 普通函数
 def func_class_4(self):
 assert 1 == 1

test_测试模块2.py

# 测试函数 
 def test_1(): 
 assert 1==1
 # 普通函数
 def func_1():
 print('普通函数')
# 测试类
class TestClass_1(object):
# 测试函数
def test_class_1(self):
assert 1==1
# 普通函数
def func_class_1(self):
assert 1==1
# 普通类
class NoTestClass_1(object):
# 测试函数
def test_class_2(self):
assert 1 == 1
# 普通函数
def func_class_2(self):
assert 1 == 1

测试用例.py

# 测试函数
 def test_one():
 assert 1==1
 # 普通函数
 def func():
 assert 1==1

代码分析

我们现在根据理论分析并结合代码,可以大致计算出,从项目根目录执行用例,应该会执行4条有效测试用例!

我们在项目根目录下执行pytest --collect-only看下情况,可以发现 搜索了test_测试模块1和test_测试模块2文件,并包括TestClass_2和TestClass_1类及内部test_class_3和test_class_1 和外部的测试函数test_2,test_1.

D:\pytest搜索测试用例规则>pytest --collect-only
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1
rootdir: D:\pytest搜索测试用例规则, inifile:
collected 4 items
<Package 'D:\\pytest搜索测试用例规则\\测试用例目录1'>
<Module 'test_测试模块1.py'>
<Function 'test_2'>
<Class 'TestClass_2'>
<Instance '()'>
<Function 'test_class_3'>
<Module 'test_测试模块2.py'>
<Function 'test_1'>
<Class 'TestClass_1'>
<Instance '()'>
<Function 'test_class_1'>
======================== no tests ran in 0.14 seconds =========================

我们大致已经能看出pytest的搜索规则,现在们再执行一下所有用例看下 使用命令 pytest -v。可以看出确实只有4个用例被执行了,也就是只识别到了4个用例,根据下面的输出信息可以看出每个用例所在的位置

D:\pytest搜索测试用例规则>pytest -v
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
rootdir: D:\pytest搜索测试用例规则, inifile:
collected 4 items
测试用例目录1/test_测试模块1.py::test_2 PASSED [ 25%]
测试用例目录1/test_测试模块1.py::TestClass_2::test_class_3 PASSED [ 50%]
测试用例目录1/test_测试模块2.py::test_1 PASSED [ 75%]
测试用例目录1/test_测试模块2.py::TestClass_1::test_class_1 PASSED [100%]
========================== 4 passed in 0.07 seconds ===========================

大家可以自己试试修改文件,函数,类名称,然后执行用例,查看是否会按照自己的想法执行用例!

总结

ok,通过这两篇文章,我们大概已经知道如何命名测试模块,测试类,测试函数,并且如何使用简单的命令行执行测试用例。那么就赶紧动手试试吧!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python的Django框架生成PDF文件的教程
Jul 22 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
详解用Python为直方图绘制拟合曲线的两种方法
Aug 21 Python
Python jieba库用法及实例解析
Nov 04 Python
解决pytorch-yolov3 train 报错的问题
Feb 18 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
python的pytest框架之命令行参数详解(上)
Jun 27 #Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 #Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 #Python
python如何解析配置文件并应用到项目中
Jun 27 #Python
python 随机生成10位数密码的实现代码
Jun 27 #Python
python自动化测试之如何解析excel文件
Jun 27 #Python
python算法与数据结构之单链表的实现代码
Jun 27 #Python
You might like
php搜索文件程序分享
2015/10/30 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
tween.js缓动补间动画算法示例
2018/02/13 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
最新的互联网创业计划书
2014/01/10 职场文书
企业内控岗位的职责
2014/02/07 职场文书
班级团队活动方案
2014/08/14 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL