Pytest之测试命名规则的使用
作者:阿刁阿 发布时间:2022-09-23 00:51:49
背景:
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文件,添加配置,达到个性化运行的目的。
来源:https://blog.csdn.net/lc_buzhidao/article/details/105081437
猜你喜欢
- 下面我给出几种常用的方法: 1 .对象冒充 原理: 构造函数使用this关键字给所有属性和方法赋值, 因为构造函数只是一个函数,所以可以使C
- 本文实例教大家如何编写一个vue上传图片组件,具体如下1.首先得有一个[type=file]文件标签并且隐藏,changge事件来获取图片:
- 本文实例讲述了python检测某个变量是否有定义的方法。分享给大家供大家参考。具体如下:第一种方法使用内置函数locals():'t
- python编程中,我们在修改代码,遇到空格很多的情况下,我们要删除空格。本文小编整理了三种字符串去除空格的方法:方法一:使用字符串函数re
- 我们要先配置npm的全局模块的存放路径以及cache的路径,例如我希望将以上两个文件夹放在nodejs的主目录下,便在nodejs下建立”n
- 一、条件语句条件语句能够改变Python程序的执行流程,是执行这个代码块还是另一个代码块。凡是需要判断来确定下一步如何执行的程序都要使用条件
- 问题你想从一个简单的XML文档中提取数据。解决方案可以使用 xml.etree.ElementTree 模块从简单的XML文档中提取数据。为
- 实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的操作。比如需要从A表找出限
- 本文实例讲述了Python模块的定义,模块的导入,__name__用法。分享给大家供大家参考,具体如下:相关内容:什么是模块模块的导入同级目
- SQL Server创建临时表:创建临时表 方法一: &n
- 在python2.x中 ,异常是这样的处理的,异常基类后面加一个逗号“ ,” 然后跟着异常类型import tracebackt
- 见下表:序号列类型需要的存储量1TINYINT1 字节2SMALLINT2 个字节3MEDIUMINT3 个字节4INT4 个字节5INTE
- 在网页局部的布局上,需要采用大量的自适应,来满足不同长度数据、内容的合理呈现。以此保证页面不至于因为内容过多等原因,导致重叠、溢出、撑开等破
- 在main.js中按需引入import { Toast} from 'vantVue.use(Toast)页面中的methods中使
- Microsoft SQL Server 表不应该包含重复行和非唯一主键。为简洁起见,在本文中我们有时称主键为“键”或“PK”,但这始终表示
- 一、简介我们知道在购买股票的时候,可以使用历史数据来对当前的股票的走势进行预测,这就需要对股票的数据进行获取并且进行一定的分析,当然了,人们
- 在开发过程中,我们有时会遇到这样的问题,将 2020-11-08T08:18:46+08:00 转成 2020-11-08 08:18:46
- 自己写的用js读取配置文件的程序 D:\Useful Stuff\Javascript\mytest.txt 文件内容如下 [plugin_
- 许多共享主机的服务提供商不允许运行你自己的服务进程,也不允许修改 httpd.conf 文件。 尽管如此,仍然有可能通过Web服务器产生的子
- 该脚本是为了结合之前的编写的脚本,来实现数据的比对模块,实现数据的自动化!由于数据格式是定死的,该代码只做参考,有什么问题可以私信我!CSV