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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
python进阶教程之动态类型详解
Aug 30 Python
python中执行shell命令的几个方法小结
Sep 18 Python
Python中http请求方法库汇总
Jan 06 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
Python用csv写入文件_消除空余行的方法
Jul 06 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
什么是python的id函数
Jun 11 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
python 对xml解析的示例
Feb 27 Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
You might like
php学习之流程控制实现代码
2011/06/09 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
8个必备的PHP功能开发
2015/10/02 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
Three.js学习之网格
2016/08/10 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python迭代用法实例教程
2014/09/08 Python
python私有属性和方法实例分析
2015/01/15 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python bisect模块原理及常见实例
2020/06/17 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
学习雷锋精神心得体会范文
2014/03/12 职场文书
大学生求职信例文
2014/06/29 职场文书
2014教师研修学习体会
2014/07/08 职场文书
建设工程授权委托书
2014/09/22 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android