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