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的几条建议分享
Feb 10 Python
理解Python中的类与实例
Apr 27 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
python中subprocess批量执行linux命令
Apr 27 Python
Python多线程原理与用法详解
Aug 20 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
Pycharm小白级简单使用教程
Jan 08 Python
Python程序控制语句用法实例分析
Jan 14 Python
Python中if有多个条件处理方法
Feb 26 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
php解压文件代码实现php在线解压
2014/02/13 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
jquery实现弹出层完美居中效果
2014/03/03 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
临床医学专业毕业生的自我评价
2013/10/17 职场文书
中学生班主任评语
2014/01/30 职场文书
小学毕业演讲稿
2014/04/25 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
借款协议书
2014/09/16 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS