【问题标题】:Timing out tests in TestNGTestNG 中的超时测试
【发布时间】:2008-12-08 21:18:56
【问题描述】:

感谢库升级(easymock 2.2 -> 2.4),我们的测试已经开始锁定。我想暂停一下个人测试,所有这些测试。这个想法是识别锁定的测试 - 我们目前正在猜测 - 并修复它们。

这可能吗,最好是在整个套件级别上?我们有 400 次测试,每个方法甚至每个类都这样做会很耗时。

【问题讨论】:

    标签: java multithreading testng


    【解决方案1】:

    suite tag 可以具有超时属性。此超时将用作所有测试方法的默认值。

    这个默认超时可以在每个测试方法的基础上被覆盖。

    【讨论】:

    • 我们使用的是maven,所以我必须在surefire插件上找到相关设置。不幸的是,它并没有告诉我们哪个测试正在死亡?!哦,那将是另一个问题。
    • 您还可以在 下的 元素中添加 timeout 属性。这与 元素中的包含/排除相结合,可以让您进行更细粒度的控制。
    【解决方案2】:

    如果套件级别被证明是错误的方法(即“网络太宽”,因为您最终标记了太多带有超时限制的方法),您需要定义一个自定义 IAnnotationTransformer,对于每个难以辨认的功能,将使您有机会修改@Test 注释(例如setTimout() method)。
    setTimout(0) 取消超时指令)

    【讨论】:

      【解决方案3】:

      很晚,但是:运行jstack -l <PID> 将为您提供堆栈转储,您可以检查以找出哪些调用被卡住了。您可能需要采样几次以确保它们被卡住。

      【讨论】:

        【解决方案4】:

        您可以搜索“@Test”并将其替换为“@Test(timeout=)” 应该努力找到锁定的测试,然后可以撤消。

        【讨论】:

        • 这对 DRY 不太友好
        猜你喜欢
        • 2020-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 1970-01-01
        相关资源
        最近更新 更多