首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不满足先决条件,则跳过使用Artos的测试。

如果不满足先决条件,则跳过使用Artos的测试。
EN

Stack Overflow用户
提问于 2019-08-28 01:58:23
回答 1查看 48关注 0票数 2

我在用Artos跑步机。在我们的开发环境中,我们保留了<property name="stopOnFail">true</property>,这样我就可以调试我的更改,而不必处理依赖的测试用例失败。在生产环境中,我们保留<property name="stopOnFail">false</property>,这样测试执行就不会在失败时停止,我们可以在早上分析日志。

现在我有了一个不同的要求,我有一些测试是其他单元的先决条件,所以如果关键测试失败了,我想跳过单元的其余部分,否则它会使我们的产品陷入糟糕的状态。

是否只有在特定测试用例或测试单元失败时,Artos才能跳过单元的其余部分?或者我们可以执行特定的步骤,在情况下测试不能确保我们安全地执行其余的测试?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-01 06:07:40

根据需求,在Artos中有多种实现方法。

  • 首先,确保您的所有单位都有一个序列号,以便它们始终以相同的顺序执行。
  • 假设testUnit_1()是关键单元,必须成功地执行它才能执行以下单元的其余部分。在这种情况下,设置dropRemainingUnitsUponFailure = true,如下所示。这将确保如果testUnit_1()失败,其余的单元将从执行列表中删除。
代码语言:javascript
复制
    @TestPlan(preparedBy = "user", preparationDate = "19/02/2019", bdd = "GIVEN..WHEN..AND..THEN..")
    @TestCase(sequence = 1)
    public class TestCase_1 implements TestExecutable {

        @Unit(sequence = 1, dropRemainingUnitsUponFailure = true)
        public void testUnit_1(TestContext context) {
            context.getLogger().info("do something");
        }

        @Unit(sequence = 2)
        public void testUnit_2(TestContext context) {
            context.getLogger().info("do something");
        }

        @Unit(sequence = 3)
        public void testUnit_3(TestContext context) {
            context.getLogger().info("do something");
        }

    }
  • 如果测试用例相互依赖,那么您可以在测试用例级别进行类似的操作。
  • 确保为TestCases分配序列号,使它们遵循相同的执行顺序(类似于单元)
  • 如下所示。如果testUnit_1()失败了,那么dropRemainingTestsUponFailure = truedropRemainingUnitsUponFailure = true不仅会删除其余的单元,而且剩余的测试用例也会从执行列表中删除,这样就可以实现干净的退出。
代码语言:javascript
复制
    @TestPlan(preparedBy = "user", preparationDate = "19/02/2019", bdd = "GIVEN..WHEN..AND..THEN..")
    @TestCase(sequence = 1, , dropRemainingTestsUponFailure = true)
    public class TestCase_1 implements TestExecutable {

        @Unit(sequence = 1, dropRemainingUnitsUponFailure = true)
        public void testUnit_1(TestContext context) {
            context.getLogger().info("do something");
        }

        @Unit(sequence = 2)
        public void testUnit_2(TestContext context) {
            context.getLogger().info("do something");
        }

        @Unit(sequence = 3)
        public void testUnit_3(TestContext context) {
            context.getLogger().info("do something");
        }

    }

在日志文件中,您将看到警告

代码语言:javascript
复制
=========================================================================
========== DROP REMAINING UNITS UPON FAILURE IS TRIGGERED ===============
================== REMAINING UNITS WILL BE DROPPED ======================
=========================================================================

代码语言:javascript
复制
=========================================================================
========== DROP REMAINING TESTS UPON FAILURE IS TRIGGERED ===============
================== REMAINING TESTS WILL BE DROPPED ======================
=========================================================================

这样你就会知道发生了什么。

回答你的第二个问题

(问题:如果有任何方法在测试单元失败时执行清理,那么在执行下一个单元测试之前,您可以从糟糕的状态中恢复产品)

如果我正确地理解了它,那么就可以使用注释@AfterFailedUnit来完成它。

如果您创建了一个方法,如下所示,在runner类中

代码语言:javascript
复制
    @AfterFailedUnit
    public void globalAfterFailedTestUnit(TestContext context) throws Exception {
        context.getLogger().info("This method executes after failed test unit");
    }

然后在每个测试单元发生故障后执行,您应该在这个方法中实现清理逻辑。希望这能回答你的问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57684150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档