TestNG-获取before方法的开始时间



我在测试类中执行了几百个测试,这些测试类包括一个奇异的beforeMethod测试,然后是大量的主测试,偶尔还有一个afterMethod。

beforeMethod测试的目的是用主要测试中使用的数据填充测试环境,同时将日志记录和记录与我们报告的主要测试分离

我们已经使用监听器设置了一个自动问题创建工具。我们发现,为这个工具增加执行时间会带来很大的价值,这样它就可以向我们展示重现上述问题中的错误需要多长时间。

为此,我对这段代码做了一个简单的添加,它使用ITestResult.getEndMillis((和getStartMillis(((来获取执行时间。我们使用这种方法遇到的问题是,如果测试在主测试期间遇到失败,ITestResult.getStartMillis((将不考虑before方法的开始时间,而只考虑主方法。

我们如何确定测试类本身的开始时间(总是beforeMethod(,而不仅仅是当前方法?

由于我们在一个大规模的设置中运行数百个测试,因此一个允许在不更改每个单独的测试类的情况下进行此操作的解决方案无疑是更可取的。

java测试类的设置看起来像这样(去掉了业务细节(:

package foobar;
import foobar
@UsingTunnel
@Test
public class FLOWNAME_TESTNAME extends TestBase {
private final Value<String> parameter;
public FLOWNAME_TESTNAME(Value<String> parameter) {
super(PropertyProviderImpl.get());
this.parameter = parameter;
}
@StoryCreating(test = "TESTNAME")
@BeforeMethod
public void CONDITIONS() throws Throwable {
new TESTNAME_CONDITIONS(parameter).executeTest();
}
@TestCoverage(test = "TESTNAME")
public void PRIMARYTESTS() throws Throwable {
TESTCASE1 testcase1 = new TESTCASE1(parameter.get());
testcase1.executeTest();
testcase1.throwSoftAsserts();
TESTCASE2 testcase2 = new TESTCASE2(parameter.get());
testcase2.executeTest();
testcase2.throwSoftAsserts();
}
}

因此,在这种情况下,当侦听器检测到TESTCASE1或TESTCASE2中的失败时,问题就会出现,因为这些不包括TESTNAME_CONDITIONS的执行时间,因为该测试在不同的方法中,但实际上,它们是同一测试流的一部分,也就是同一测试类。

我找到了这个问题的解决方案。可以使用ITestResult.getTestContext((.getStartDate((.geTime((来获取测试类本身运行的时间,而不是当前的测试方法。

最终的解决方案非常简单:

result.getEndMillis((-result.getTestContext((.getStartDate((.geTime(((/60000

其中"结果";对应于ITestResult。

这将输出从测试开始到最后执行的方法结束之间的时间。

最新更新