【问题标题】:Is it possible to implement multiple test runners in pyunitest? while only running the test suite once是否可以在 pyunitest 中实现多个测试运行器?只运行一次测试套件
【发布时间】:2020-05-30 09:34:12
【问题描述】:
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 支持的另一个测试模块。但是我希望尽可能降低依赖关系

任何想法都会很棒:)

【问题讨论】:

    标签: python python-3.x teamcity python-unittest runner


    【解决方案1】:

    任何想法都会很棒:)

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

    遗憾的是,这是 stdlib 的一个领域,它的架构非常糟糕:人们可能期望 test runner 只关心发现和运行测试,但它也负责 测试报告而不是拥有一个完全独立的测试报告者(此测试报告还与测试结果分开负责,这也不应该是该人的工作描述的一部分)。

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

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

    【讨论】:

    • 我尝试了 py-test,但是作为测试的一部分,我正在运行子进程,当这些子进程与 py-test 一起运行时,它似乎总是失败?它是 pytest 支持的吗?如果是这样,我会继续这样做!
    • @charlie 我不知道。我不能说我在 pytest(甚至使用 xdist)中创建/运行子进程时遇到过任何问题,所以这可能取决于你具体在做什么。
    • 好吧,完美,我将继续集成 pytest,以节省手卷的头痛!非常感谢您的帮助:)
    • 出于兴趣,如果您想看看stackoverflow.com/questions/60281122/…,这是我遇到的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多