【发布时间】:2016-11-12 12:58:04
【问题描述】:
这是一个面试问题,我的检票口。我们有一个包含 5,6 个硒测试的硒测试类。
测试 3 正在执行中,发生网络故障。现在一旦网络恢复,如何配置框架,以便它应该从失败的地方开始,比如从第三次测试开始。并且应该执行已经执行的测试1和2。假设框架是junit。
【问题讨论】:
这是一个面试问题,我的检票口。我们有一个包含 5,6 个硒测试的硒测试类。
测试 3 正在执行中,发生网络故障。现在一旦网络恢复,如何配置框架,以便它应该从失败的地方开始,比如从第三次测试开始。并且应该执行已经执行的测试1和2。假设框架是junit。
【问题讨论】:
我不同意 javaguy 的回答。我认为这个问题是完全有效的。作为概念的单元测试与作为工具的 JUnit 之间存在很大差异。
javaguy 的回答中描述的是单元测试。这些确实不能使用任何东西,只能将类加载到内存中并写入。但是使用 Selenium Web 驱动程序的测试肯定不是单元测试。并且选择 JUnit 作为实现这些测试的框架是有效的。当然,我们可以争论 JUnit 是否是最好的工具,但它是另一回事,如果选择 JUnit 作为这些测试的实现工具,这是一个有效的选择。
现在关于您的问题。有许多不同的方法可以实现您想要的。
创建一个允许重新运行测试的 JUnit 规则。一般来说,如果您熟悉 AOP 术语,则规则有点像拦截器或方面。他们拦截测试,使其失败,他们可以重新运行它。 Here您可以找到解释规则并提供一些链接的问题。
实现自定义运行器。这种方法只有在您不使用其他跑步者时才有效,因为 JUnit 只为跑步者提供一个插槽。
此自定义运行程序将再次拦截测试调用,并在网络故障/ping 网络时重新运行并等待,只有当它“回来”时才会重新运行。然后你可以使用@RunWith 注解来激活你的实际跑步者进行测试。
应用解决方案。假设 selenium web 驱动程序是您的测试中唯一实际依赖于网络的东西,请将 selenium 驱动程序调用包装到您的调用中。为 selenium 中的所有调用提供try/catch,当您捕获异常时 - 重试。您甚至可以为此使用方面或手动实现包装器。
在 Jenkins/您的构建工具级别也有一些解决方案,但我认为这些实际上超出了范围。
【讨论】: