根据需求,Artos 有多种实现方式
- 首先,确保所有单元都有一个序列号,以便它们始终以相同的顺序执行。
- 假设 testUnit_1() 是关键单元,它必须成功执行才能执行以下单元的其余部分。在这种情况下,设置
dropRemainingUnitsUponFailure = true,如下所示。如果 testUnit_1() 失败,这将确保其余单元从执行列表中删除。
@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");
}
}
- 如果测试用例相互依赖,那么您可以在测试用例级别执行类似操作
- 确保为测试用例分配序列号,以便它们遵循相同的执行顺序(类似于单元)
- 如下图所示。如果
dropRemainingTestsUponFailure = true 和dropRemainingUnitsUponFailure = true 那么在 testUnit_1() 失败时,不仅剩余的单元会被丢弃,而且剩余的测试用例也会从执行列表中被丢弃,这样你就可以实现干净的退出。
@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");
}
}
在日志文件中你会看到警告
=========================================================================
========== DROP REMAINING UNITS UPON FAILURE IS TRIGGERED ===============
================== REMAINING UNITS WILL BE DROPPED ======================
=========================================================================
和
=========================================================================
========== DROP REMAINING TESTS UPON FAILURE IS TRIGGERED ===============
================== REMAINING TESTS WILL BE DROPPED ======================
=========================================================================
这样你就会知道发生了什么。
回答你的第二个问题
(问题:如果测试单元失败,如果有任何方法可以执行清理,那么在执行下一个单元测试之前,您可以从坏状态中恢复您的产品)
如果我理解正确,那么可以使用注解@AfterFailedUnit来完成
如果您在运行器类中创建如下所示的方法
@AfterFailedUnit
public void globalAfterFailedTestUnit(TestContext context) throws Exception {
context.getLogger().info("This method executes after failed test unit");
}
那么它将在每个测试单元失败后执行,你应该在这个方法中实现清理逻辑。
希望这能回答您的问题