Dan*_*umb 8 java integration-testing maven
我们的测试环境有各种依赖中间件的集成测试(CMS平台,底层数据库,Elasticsearch索引).
它们是自动化的,我们使用Docker管理我们的中间件,因此我们没有不可靠网络的问题.但是,有时我们的数据库崩溃,我们的测试失败.
问题是这种失败的检测是通过一连串的org.hibernate.exception.JDBCConnectionException消息.这些是通过超时发生的.当发生这种情况时,我们最终会遇到数百个因此异常而失败的测试,每个测试都需要几秒钟才能失败.因此,我们的测试需要一个年龄才能完成.实际上,当我们意识到它们已经完成时,我们通常会手动终止这些构建.
我的问题:在Maven驱动的Java测试环境中,有没有办法指导构建系统注意特定类型的异常并杀死整个过程,如果它们到达(或达到某种阈值)?
我们可以监视我们的容器并以这种方式杀死构建过程,但我希望有一种更清洁的方式来实现它与maven.
如果使用TestNG而不是JUnit,则还有其他可能将测试定义为依赖于其他测试.
例如,像上面提到的其他人一样,您可以使用一种方法来检查数据库连接,并将所有其他测试声明为依赖于此方法.
@Test
public void serverIsReachable() {}
@Test(dependsOnMethods = { "serverIsReachable" })
public void queryTestOne() {}
Run Code Online (Sandbox Code Playgroud)
这样,如果serverIsReachable测试失败,将跳过所有其他依赖于此测试的测试,并且不会将其标记为失败.跳过的方法将在最终报告中报告,这很重要,因为跳过的方法不一定是失败的.但是由于您的初始测试serverIsReachable失败,构建应该完全失败.积极的效果是,你的其他测试不会执行,这应该很快失败.
您还可以使用组扩展此逻辑.假设您之后的某些域逻辑测试使用了数据库查询,您可以使用组声明每个数据库测试,例如
@Test(groups = { "jdbc" })
public void queryTestOne() {}
Run Code Online (Sandbox Code Playgroud)
并声明您的域逻辑测试依赖于这些测试
@Test(dependsOnGroups = { "jdbc.* })
public void domainTestOne() {}
Run Code Online (Sandbox Code Playgroud)
因此,TestNG将保证测试的执行顺序.
希望这有助于使您的测试更有条理.有关更多信息,请查看TestNG依赖文档.
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |