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中数据解析
May 05 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
Python调用Windows命令打印文件
Feb 07 Python
Django实现celery定时任务过程解析
Apr 21 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
 python中的元类metaclass详情
May 30 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
PHP count()函数讲解
2019/02/03 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
详细讲解JS节点知识
2010/01/31 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
学习python (2)
2006/10/31 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
python3处理含有中文的url方法
2018/05/10 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
性能测试工程师的面试题
2015/02/20 面试题
淘宝网店营销策划书
2014/01/11 职场文书
大学班长的职责
2014/01/27 职场文书
《太阳》教学反思
2014/02/21 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
vue 实现上传组件
2021/05/31 Vue.js
Python实现socket库网络通信套接字
2021/06/04 Python
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python