是否可以在 pyunitest 中实现多个测试运行程序?而只有 运行 个测试套件一次

Is it possible to implement multiple test runners in pyunitest? while only running the test suite once

if __name__ == '__main__':
    if is_running_under_teamcity():
        runner = TeamcityTestRunner()
    else:
        runner =  HTMLTestRunner.HTMLTestRunner(
                stream=outfile,
                title='Test Report',
                description='This is an example.'
                )
    unittest.main(testRunner=runner)

我目前正在 运行使用 python 中的 unittest 模块进行一些测试,这是我上面的当前代码。我正在 Teamcity 上部署此测试设置,第一个模块允许我将输出转换为 teamcity-messages,第二个模块创建结果的 html 报告。有没有一种方法可以 运行 这两个 运行 人同时只 运行 进行一组测试?我在最后一分钟看到的唯一选择是尝试将这两个模块组合成一个混合模块,或者使用 Teamcity 支持的另一个测试模块。但是我想尽可能降低依赖性

任何想法都会很棒 :)

Any ideas would be great :)

看起来你必须手动操作它,查看代码 TeamcityTestRunner 是标准 TextTestRunner 的一个非常简单的扩展,但是 HTMLTestRunner 是一种更复杂的野兽。

遗憾的是,这是 stdlib 的一个区域,它的架构非常糟糕:可以预期 test 运行ner 只关注发现和 运行ning 测试,但是它也负责 测试报告 的一部分,而不是有一个完全独立的测试报告者(这个测试报告进一步与测试结果分开责任,这应该'也不要成为那个人的工作描述的一部分)。

坦率地说,如果您没有任何进一步的自定义 我建议只使用 pytest 作为您的测试 运行ner 而不是带有自定义 运行 纳尔:

  • 它应该能够 运行 unittest 测试正常
  • IME 它具有更好的关注点分离和可插拔性,因此具有多个记者/格式化程序应该开箱即用
    • pytest-html 在不影响正常文本输出的情况下生成报告当然没有问题
    • 根据自述文件,teamcity 会自动启用并用于 pytest
    • 所以我假设在您的 teamcity 构建期间生成 html 报告会很好(测试)
  • 你最终可以迁移到使用 pytest 测试(它好多了,甚至都不好笑)