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创建系统目录的方法
Mar 11 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
基于Python的文件类型和字符串详解
Dec 21 Python
python编写分类决策树的代码
Dec 21 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
python opencv读mp4视频的实例
Dec 07 Python
Django框架实现的分页demo示例
May 25 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
Python如何在DataFrame增加数值
Feb 14 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
使用php清除bom示例
2014/03/03 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
PHP.vs.JAVA
2016/04/29 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
Linux文件系统类型
2012/09/16 面试题
教师应聘个人求职信
2013/12/10 职场文书
公司拓展活动方案
2014/02/13 职场文书
境外导游求职信
2014/02/27 职场文书
精神文明单位申报材料
2014/05/02 职场文书
兴趣小组活动总结
2014/05/05 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
主持人开幕词
2015/01/29 职场文书
2015年副班长工作总结
2015/05/15 职场文书