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 相关文章推荐
JPype实现在python中调用JAVA的实例
Jul 19 Python
python中format()函数的简单使用教程
Mar 14 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
python多线程http压力测试脚本
Jun 25 Python
如何通过python的fabric包完成代码上传部署
Jul 29 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
Python天气语音播报小助手
Sep 25 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
python中的闭包用法实例详解
2015/05/05 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
django静态文件加载的方法
2018/05/20 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
社区包粽子活动方案
2014/01/21 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
党员政治学习材料
2014/05/14 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
2014离婚协议书范文
2014/09/10 职场文书
离婚案件原告代理词
2015/05/23 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL