Java TestNG在失败后不继续执行测试
我有一个带有页面对象模型的测试自动化框架。 我的所有测试都位于同一个包中的不同类中 在testng.xml中,我有Java TestNG在失败后不继续执行测试,java,automation,testng,Java,Automation,Testng,我有一个带有页面对象模型的测试自动化框架。 我的所有测试都位于同一个包中的不同类中 在testng.xml中,我有 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Smoke Test"> <test name="SmokeTest"> <classes> <class name="name.tes
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test">
<test name="SmokeTest">
<classes>
<class name="name.test1"/>
<class name="name.test2"/>
<class name="name.test3"/>
</classes>
</test>
</suite>
问题是,在运行TestNG.xml之后,如果第一个测试失败,它将停止测试执行。但是我想继续执行所有测试用例
我在我的项目中使用Jenkins,如果其中一个测试失败,它会立即停止执行
测试示例
public class LoginTestTest {
public AndroidDriver<AndroidElement> driver;
public AOWebClient aoWebClient;
AOWebClient aoWeb;
public LoginTestTest(AndroidDriver<AndroidElement> driver, AOWebClient aoWeb){
this.driver = driver;
this.aoWeb = aoWeb;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public LoginTestTest() {
}
SoftAssert softAssert = new SoftAssert();
@BeforeClass
public void setUp() throws Exception {
driver = DesiredCapabilitiesSetup.startAppiumServer();
aoWebClient = DesiredCapabilitiesSetup.getAOWeb();
LogIn logIn = new LogIn(driver,aoWebClient);
logIn.logIn();
}
@org.testng.annotations.Test
public void goToSettings() throws InterruptedException {
HeaderMenu header = new HeaderMenu(driver,aoWeb);
HamburgerMenuList ham = new HamburgerMenuList(driver);
header.clickHamburgerButton();
header.clickHamburgerButton();
header.editButtonClick();
softAssert.assertAll();
}
@AfterClass
public void tearDown(ITestResult result) throws Exception {
if (result.getStatus() == ITestResult.FAILURE) {
TakeScreenshot screenshot = new TakeScreenshot();
screenshot.TakeScreenshot("screenshots/");
}
LogOut logOut = new LogOut(driver,aoWeb);
logOut.logOut();
}
}
公共类LoginTestTest{
公共AndroidDriver;
公共AOWebClient AOWebClient;
AOWebClient aoWeb;
公共LoginTest(AndroidDriver驱动程序,AOWebClient aoWeb){
this.driver=driver;
this.aoWeb=aoWeb;
initElements(新的AppiumFieldDecorator(驱动程序),this);
}
公共登录测试(){
}
SoftAssert-SoftAssert=新的SoftAssert();
@课前
public void setUp()引发异常{
driver=DesiredCapabilitiesSetup.startAppiumServer();
aoWebClient=DesiredCapabiliteSetup.getAOWeb();
登录=新登录(驱动程序、aoWebClient);
logIn.logIn();
}
@org.testng.annotations.Test
public void goToSettings()引发中断异常{
HeaderMenu header=新的HeaderMenu(驱动程序,aoWeb);
HamburgerMenuList火腿=新的HamburgerMenuList(司机);
header.单击汉堡按钮();
header.单击汉堡按钮();
header.editButtonClick();
softAssert.assertAll();
}
@下课
public void拆卸(ITestResult结果)引发异常{
if(result.getStatus()==ITestResult.FAILURE){
TakeScreenshot screenshot=新的TakeScreenshot();
截图。截图(“截图/”);
}
注销注销=新注销(驱动程序,aoWeb);
logOut.logOut();
}
}
如果我的测试在@test
中失败,它将永远不会继续使用@AfterClass
方法。
我希望如果@Test
失败,它将继续执行@AfterClass
方法,并在这个类continue之后从testng.xml
的其他类执行测试 来自:
alwaysRun:对于after方法(afterSuite,afterClass,…):如果设置为
如果为true,则即使有一个或多个
以前调用的方法失败或被跳过
然后,只需将您的@AfterClass
替换为@AfterClass(alwaysRun=true)
即可:
alwaysRun:对于after方法(afterSuite,afterClass,…):如果设置为
如果为true,则即使有一个或多个
以前调用的方法失败或被跳过
然后,只需将您的
@AfterClass
替换为@AfterClass(alwaysRun=true)
xml中的套件标记应包括configfailurepolicy=“continue”。这告诉testng,即使一个类中的配置失败,您仍然希望运行该套件中的其他类。请参阅中的“配置故障策略”
因此,您的xml将成为:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test" configfailurepolicy="continue">
<test name="SmokeTest">
<classes>
<class name="name.test1"/>
<class name="name.test2"/>
<class name="name.test3"/>
</classes>
</test>
</suite>
xml中的套件标记应包括configfailurepolicy=“continue”。这告诉testng,即使一个类中的配置失败,您仍然希望运行该套件中的其他类。请参阅中的“配置故障策略” 因此,您的xml将成为:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test" configfailurepolicy="continue">
<test name="SmokeTest">
<classes>
<class name="name.test1"/>
<class name="name.test2"/>
<class name="name.test3"/>
</classes>
</test>
</suite>
我发现,当您在项目中运行带有一些测试的包时,这种方法是有效的。但如果您运行Testng.xml,它仍然会停止执行,即使在测试中始终运行。当第一个测试失败时,它是执行冻结的国王。我们也使用Gradle,tasks.withType(test){scanForTestClasses=false包括“***test.class”}test{useTestNG{suites'testng.xml'}}我发现的另一个问题是:当在testng.xml中我指向运行一个包时,它运行所有的测试类,即使第一个失败。在它告诉我只有失败的测试之后。但是如果我指向多个类而不是testng.xml中的包,第一个失败将停止执行。抱歉,但我不知道预期的行为是什么,观察到的行为是什么。我想如果我在套件中一个接一个地创建一个类列表的测试套件(testng.xml),它应该继续一个接一个地运行它们,即使第一个是失败的。但现实是,如果第一个失败,它将停止执行其余的。当它不是指向testng.xml中的测试类而是指向整个包时,即使某些测试失败,它也会执行所有包。我发现,当您在项目中运行带有一些测试的包时,该方法是有效的。但如果您运行Testng.xml,它仍然会停止执行,即使在测试中始终运行。当第一个测试失败时,它是执行冻结的国王。我们也使用Gradle,tasks.withType(test){scanForTestClasses=false包括“***test.class”}test{useTestNG{suites'testng.xml'}}我发现的另一个问题是:当在testng.xml中我指向运行一个包时,它运行所有的测试类,即使第一个失败。在它告诉我只有失败的测试之后。但是如果我指向多个类而不是testng.xml中的包,第一个失败将停止执行。抱歉,但我不知道预期的行为是什么,观察到的行为是什么。我想如果我在套件中一个接一个地创建一个类列表的测试套件(testng.xml),它应该继续一个接一个地运行它们,即使第一个是失败的。但现实是,如果第一个失败,它将停止执行其余的。当它不是指向testng.xml中的测试类而是指向整个包时,它将执行所有包,即使某些测试失败。