Pytest之测试命名规则的使用


Posted in Python onApril 16, 2021

背景:

pytest以特定规则搜索测试用例,所以测试用例文件、测试类以及类中的方法、测试函数这些命名都必须符合规则,才能被pytest搜索到并加入测试运行队列中。

默认搜索规则:

  • 如果pytest命令行有指定目录,则从该目录中开始查找测试用例文件,如果没有指定,则从当前运行目录开始查找文件。注意,该查找是递归查找,子目录中的文件也会被查找到。
  • 并不是能够查找到目录下的所有文件,只有符合命名规则的文件才会被查找。默认规则是以test_开头或者以_test结尾的.py文件。
  • 在测试文件中查找Test开头的类,以及类中以test_开头的方法,查找测试文件中test_开头的函数。

测试用例默认命名规则

  • 除非pytest命令指定到测试用例文件,否则测试用例文件命名应该以 test_开头或者以_test结尾。
  • 测试函数命名,测试类的方法命名应该以test_开头。
  • 测试类命名应当以Test开头。

tips: 测试类的不应该有构造函数。

笔者习惯装测试用例的文件夹,测试用例文件,测试函数,类中的测试方法都以test_开头。建议保持一种统一的风格。

示例:

# func.py
def add(a,b):
 return a+b

# ./test_case/test_func.py
import pytest
from func import *

class TestFunc:

 #def __init__(self):
  #self.a = 1

 def test_add_by_class(self):
  assert add(2,3) == 5


def test_add_by_func():
 assert add(4,6) == 10

'''
# stdout:
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-5.3.4, py-1.8.1, pluggy-0.13.1
rootdir: D:\Python3.7\project\pytest
plugins: allure-pytest-2.8.9, rerunfailures-8.0
collected 2 items

test_case\test_func.py ..                                                [100%]

============================== 2 passed in 0.04s ==============================
[Finished in 1.3s]
######################################################################
'''

测试结果中,test_case\test_func.py … 。两个点号代表两个测试用例。

错误示范,当测试类有构造函数时:

# func.py
def add(a,b):
 return a+b

# ./test_case/test_func.py
import pytest
from func import *

class TestFunc:

 def __init__(self):
  self.a = 1

 def test_add_by_class(self):
  assert add(2,3) == 5


def test_add_by_func():
 assert add(4,6) == 10

'''
# stdout:
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-5.3.4, py-1.8.1, pluggy-0.13.1
rootdir: D:\Python3.7\project\pytest
plugins: allure-pytest-2.8.9, rerunfailures-8.0
collected 1 item

test_case\test_func.py .                                                 [100%]

============================== warnings summary ===============================
test_case\test_func.py:4
  D:\Python3.7\project\pytest\test_case\test_func.py:4: PytestCollectionWarning: cannot collect test class 'TestFunc' because it has a __init__ constructor (from: test_case/test_func.py)
    class TestFunc:

-- Docs: https://docs.pytest.org/en/latest/warnings.html
======================== 1 passed, 1 warning in 0.04s =========================
[Finished in 1.4s]
######################################################################
'''

会报错,pytest只能找到test_开头的函数,但是不能找到Test开头的含有构造函数的测试类。

自定义测试用例命名规则

如果因为某种需要,需要使用其他命名规则命名的测试文件、测试函数、测试类以及测试类的方法,可以通过pytest.ini配置文件做到。

在测试系统的顶层目录创建pytest.ini文件,在pytest.ini文件中写入如下配置:

[pytest]
# 更改测试文件命名规则
python_files = HG*

# 更改测试类命名规则
python_classes = HG*

# 更嗨测试函数命名规则
python_functions = HG*

示例:

# func.py
def add(a,b):
 return a+b

# ./test_case/HG_func.py
import pytest
from func import *

class HGFunc:

 #def __init__(self):
  #self.a = 1

 def HG_add_by_class(self):
  assert add(2,3) == 5


def HG_add_by_func():
 assert add(4,6) == 10

'''
stdout:
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-5.3.4, py-1.8.1, pluggy-0.13.1 -- D:\Python3.7\python.exe
cachedir: .pytest_cache
rootdir: D:\Python3.7\project\pytest, inifile: pytest.ini
plugins: allure-pytest-2.8.9, rerunfailures-8.0
collecting ... collected 2 items

test_case/HG_func.py::HGFunc::HG_add_by_class PASSED                     [ 50%]
test_case/HG_func.py::HG_add_by_func PASSED                              [100%]

============================== 2 passed in 0.03s ==============================
[Finished in 1.3s]
'''

Tips:

  • pytest.ini是可以改变pytest运行方式的配置文件,但是正常情况下,测试系统里根本不需要存在pytest.ini文件,我们使用默认的运行方式即可工作。
  • pytest.ini还有许多其他个性化配置,当有需要时,可以在自动化测试项目的顶层目录里创建pytest.ini文件,添加配置,达到个性化运行的目的。

到此这篇关于Pytest之测试命名规则的使用的文章就介绍到这了,更多相关Pytest 命名规则内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
一个超级简单的python web程序
Sep 11 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
python发送邮件脚本
May 22 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
python利用线程实现多任务
Sep 18 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
Codeigniter校验ip地址的方法
2015/03/21 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
2019年.net常见面试问题
2012/02/12 面试题
一名女生的自荐信
2013/12/08 职场文书
活动邀请函范文
2014/01/19 职场文书
合作经营协议书范本
2014/09/16 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
行政二审代理词
2015/05/25 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
Win11开始菜单添加休眠选项
2022/04/19 数码科技