Java 如何根据TestNG+中的运行时结果选择下一个@Test方法;Selenium网络驱动程序?
我有第一个@Test方法。接下来的步骤将取决于第一个@Test方法的结果。以下是一个例子:Java 如何根据TestNG+中的运行时结果选择下一个@Test方法;Selenium网络驱动程序?,java,selenium,testng,Java,Selenium,Testng,我有第一个@Test方法。接下来的步骤将取决于第一个@Test方法的结果。以下是一个例子: @测试 public void checkErrorMessage(){ if(search.isErrorExist()==true){ //转到方法1(); }否则{ //转到方法continue1(); } } @测试(dependsOnMethods={“checkErrorMessage”}) 第1部分()中的公共无效{ //对错误进行处理…第一步 } @测试(dependsOnMethods=
@测试
public void checkErrorMessage(){
if(search.isErrorExist()==true){
//转到方法1();
}否则{
//转到方法continue1();
}
}
@测试(dependsOnMethods={“checkErrorMessage”})
第1部分()中的公共无效{
//对错误进行处理…第一步
}
@测试(dependsOnMethods={“dealWithErrorPart1”})
第2部分()中的公共无效{
//对错误进行处理…第二步
}
@测试(dependsOnMethods={“checkErrorMessage”})
公共空间继续1(){
//继续做某事…第一部分
}
@测试(dependsOnMethods={“continue1”})
公共空间2(){
//继续做某事……第二部分
}
如果方法checkErrorMessage()
发现错误消息,那么应该调用的下一个方法是dealWithErrorPart1()
。然后应运行dealwitherorpart2()
如果方法checkErrorMessage()
发现No错误消息,则应调用的下一个方法是continue1()
。然后应运行continue2()
因此,checkErrorMessage()
将决定下一个代码流
因为我无法更改应用程序的行为,所以我需要分别处理每个行为。如果应用程序给我结果A,那么我的测试自动化应该执行方法A1()、A2()和A3()。如果应用程序给我结果B,那么我的测试自动化应该执行方法B1()、B2()和B3()
如何在TestNG中实现这一点?我尝试使用抛出新的SkipException(“跳过此异常”)但这似乎并不能解决这个问题。多谢各位 据我所知,TestNG不允许您构建这种流畅的测试方法编排
TestNG允许用户通过以下方式定义测试方法的执行顺序:
- 使用
优先级
(这里用户只能定义顺序,并且方法将始终被执行)
- 使用
dependsOnMethods
/dependsOnGroups
(此处用户可以定义顺序,期望当前方法所依赖的方法将在且仅当该方法运行完成且无故障时执行)
您可能只想定义一个TestNG测试方法,并让该测试方法将所有应用程序行为作为条件处理,而不是期望TestNG为您控制这个编排。这真的不是一个好主意-单元测试背后的理论是每个测试用例完全独立于其他测试用例(因此可以以任何顺序运行)。因此,如果您想测试代码是否正确处理错误,那么让该测试用例显式地创建错误条件(而不是依赖于其他用例)。为什么您要根据结果选择下一个@Test
方法?您的checkErrorMessage
中不是只有两个单独的案例吗?我不是TestNG的专家,但您不能像其他方法一样直接调用特定于案例的方法吗?谢谢大家。忘了提到,我实际上使用了TestNG和Selenium Web驱动程序(Java)。因此,我这里不是在做单元测试,而是测试自动化。测试自动化应该做操作1
,然后看看结果是什么。结果取决于应用程序的行为。测试自动化将根据该结果决定下一个操作是什么。