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导入oracle数据的方法
Jul 10 Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 Python
Python 多线程实例详解
Mar 25 Python
详解python调度框架APScheduler使用
Mar 28 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
django中瀑布流写法实例代码
Oct 14 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
cookie的secure属性详解
2015/04/08 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
简单解析Django框架中的表单验证
2015/07/17 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
python opencv肤色检测的实现示例
2020/12/21 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
毕业自我鉴定
2013/11/05 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
中药专业自荐信范文
2014/03/18 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
给市场的环保建议书
2014/05/14 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
Kubernetes控制节点的部署
2022/04/01 Servers
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript