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备份Mysql脚本
Aug 11 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
Python创建xml文件示例
Mar 22 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
Python 统计序列中元素的出现频度
Apr 26 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
vue router demo详解
2017/10/13 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
介绍Python中的__future__模块
2015/04/27 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
django实现用户登陆功能详解
2017/12/11 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
python for和else语句趣谈
2019/07/02 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
python 实现任务管理清单案例
2020/04/25 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
求职信格式要求
2014/05/23 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
辞职书格式样本
2015/02/26 职场文书
母亲节感言
2015/08/03 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js