Pytest执行unittest TestSuite(测试套件)的实现方法
作者:韩志超 发布时间:2023-12-23 06:05:14
标签:Pytest,unittest,TestSuite,测试套件
前言
TestSuite一直是unittest的灵活与精髓之处,在繁多的测试用例中,可以任意挑选和组合各种用例集,比如smoke用例集、
level1用例集、
webtest用例集、
bug回归用例集
等等,当然这些TestSuite需要我们提前定义好,并把用例加载进去。Pytest采取的是完全不同的用例组织和运行方式。用例的运行主要基于名称匹配;组织则基于用例目录,用例命名格式及用例mark标签, 这种方式省去了麻烦的提前定义TestSuite及加载用例的过程,执行时通过路径/用例名格式/不同的标签组合来动态匹配出要执行的用例,使用更加灵活。然而,从原有的unittest框架转向pytest怀抱时仍不得不面临这样一个问题:我原先定义好的TestSuite怎么执行?
实现方法
主要思路:
①迭代遍历TestSuite中的所有case得到每个case的路径test_demo.TestDemo.test_a
②将case路径转化为Pytest支持的运行格式test_demo.py::TestDemo::test_a并组成一个case名称列表供Pytest调用。
示例用例: test_demo.py:
import unittest
class TestDemo(unittest.TestCase):
def test_a(self):
print("a")
def test_b(self):
print("b")
示例测试套件:demo.py:
import unittest
import pytest
from test_demo import TestDemo
suite = unittest.TestSuite()
suite.addTests([TestDemo('test_a'), TestDemo('test_b')])
# 因为suite中可能会存在嵌套, 所以我们要迭代取出其中所有的用例:
def collect(suite):
cases = [] # 用于存放Pytest支持的用例路径字符串
def _collect(tests): # 递归,如果下级元素还是TestSuite则继续往下找
if isinstance(tests, unittest.TestSuite):
[_collect(i) for i in tests if tests.countTestCases() != 0]
else:
_path = tests.id().split(".") # case.id()可以获取用例路径(字符串)
_path[0] += ".py"
cases.append("::".join(_path)) # 如果下级元素是TestCase,则添加到TestSuite中
_collect(suite)
return cases
if __name__ == '__main__':
cases = collect(suite)
pytest.main([*cases, "-v"])
# pytest.main(cases) # 不加额外参数的化可直接执行cases
来源:https://www.jianshu.com/p/6a05ccd3ca94


猜你喜欢
- 这个函数是前几年刚流行小偷程序的时候,偶写来用于小偷程序中截取代码的;可能有些朋友在我以前的代码中看见过了,但没有写用法,现在把调用方法及使
- 本文实例讲述了JavaScript基于Ajax实现不刷新在网页上动态显示文件内容的方法。分享给大家供大家参考。具体如下:下面的JS代码是一个
- 我一直使用Microsoft的FrontPage 98来开发ASP/ADO之类的Internet数据库应用程序。现在我听说许多人都非常信奉采
- 上一节除了介绍使用 Python 连接 es,还有最简单的 query() 方法,这一节介绍一下几种其他的查询方式。1、query() 方法
- 我们在开发项目的时候经常会在后台管理时用到批量展示功能来动态的修改数据库的值。下面以修改数据库的status状态值来实现批量展示功能。批量选
- 有时表或结果集包含重复的记录。有时它是允许的,但有时它需要停止重复的记录。有时它需要识别重复的记录从表中删除。本章将介绍如何防止发生在一个表
- 之前我的一篇文章pytorch 计算图以及backward,讲了一些pytorch中基本的反向传播,理清了梯度是如何计算以及下降的,建议先看
- Windows上安装mysql-8.0.29-winx64,供大家参考,具体内容如下1.进入官网找到自己所需的安装包:https://dev
- 进程什么是进程进程指的是一个程序的运行过程,或者说一个正在执行的程序所以说进程一种虚拟的概念,该虚拟概念起源操作系统一个CPU 同一时刻只能
- 因为python默认使用的是国外镜像,有时候下载非常慢,最快的办法就是在下载命令中增加国内源:pip install requests -i
- 该方法编辑于2021年2月7日,自己使用的版本是8.0.23,事情的起因要从袁隆平教授说起…要从一本教科书说起,有一章节是“MySQL安全管
- 如何在线修改表?具体代码如下:<%Set conn1 = Server.CreateObject(&qu
- 前言今天我的 PyCharm 突然间就死掉了,双击图标,等半天没有反应,也没有抛出什么错误。打开任务管理器,发现双击时启动了一个PyChar
- 本文实例讲述了JS基于封装函数实现的表格分页。分享给大家供大家参考,具体如下:HTML代码:<html><head>
- 这篇文章主要介绍了基于python3实现倒叙字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 原始数据原始数据大致是这样子的:每条数据中的四个数据分别是 当前节点名称,节点描述(指代一些需要的节点属性),源节点(即最顶层节点),父节点
- 列表渲染 key 的原理和作用key就是为该节点做身份标识,如果对key绑定index的值,那么很容易出现问题:1.若对数据进行:逆序添加、
- 最后罗嗦一句,本人录入这篇文章用的机器上没有 ASP 环境,所以提供的代码未能进行测试,对这一点本人深表歉意。如果大家发现了代码中的任何问题
- 效果图:css:<style type="text/css"> /* 带复选框的下拉框 */ ul li{
- 三元条件判断的3种实现方法C语言中有三元条件表达式,如 a>b?a:b,Python中没有三目运算符(?:),但Python有它自己的