pytest 执行 unittest TestSuite (测试套件)的方法
前言
TestSuite一直是unittest的灵活与精髓之处, 在繁多的测试用例中, 可以任意挑选和组合各种用例集, 比如smoke用例集
, level1用例集
, webtest用例集
, bug回归用例集
等等, 当然这些TestSuite需要我们提前定义好, 并把用例加载进去.
Pytest采取的是完全不同的用例组织和运行方式.用例的运行主要基于名称匹配, 组织则基于用例目录, 用例命名格式及用例mark标签, 这种方式省去了提前定义TestSuite及加载用例的过程, 执行时通过路径/用例名格式/不同的标签组合来动态匹配出要执行的用例, 使用更加灵活.
在Pytest官方文档: 与原有的测试套件一起使用 (原文链接 | 翻译) 一节中, 提到Pytest支持大多数测试套件, 然后怎么使用却顾左右而言他, 相当于什么都没写.
实现方法:
- 迭代遍历TestSuite中的所有case得到每个case的路径
test_demo.TestDemo.test_a
- 将case路径转化为Pytest支持的运行格式
test_demo.py::TestDemo::test_a
并组成一个case名称列表供Pytest调用
示例用例:test_demo.py
1 2 3 4 5 6 7 8 | import unittest class TestDemo(unittest.TestCase): def test_a( self ): print ( "a" ) def test_b( self ): print ( "b" ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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
作者:Glen.He
出处:http://www.cnblogs.com/puresoul/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2010-08-16 Response.ContentType