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 13 Python
python使用rabbitmq实现网络爬虫示例
Feb 20 Python
Python是编译运行的验证方法
Jan 30 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
PyQt5实现拖放功能
Apr 25 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
Python 支付整合开发包的实现
Jan 23 Python
Python通用函数实现数组计算的方法
Jun 13 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
Python之eval()函数危险性浅析
2014/07/03 Python
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
深入理解Python中装饰器的用法
2016/06/28 Python
python 列表降维的实例讲解
2018/06/28 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
外贸公司实习自我鉴定
2013/09/24 职场文书
体育比赛口号
2014/06/09 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
pytorch 如何使用float64训练
2021/05/24 Python
详解Python常用的魔法方法
2021/06/03 Python