我一直在经历一些非常奇怪的事情。也许有人可以向我解释我在哪里犯错。 我在功能文件中有以下情况
@DeleteUserAfterTest
Scenario: Testing a functionality
Given admin exists
When a user is created
Then the user is verified
我在Hooks类中的@After方法如下所示
@After
public void tearDown(Scenario scenario) {
if (scenario.isFailed()) {
final byte[] screenshot = ((TakesScreenshot) driver)
.getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png"); //stick it in the report
}
driver.quit();
}
我在步骤定义中使用以下方法,根据在测试方案中传递的标记删除创建的用户,如下所示:
@After("@DeleteUserAfterTest")
public void deleteUser(){
//Do fucntionalities to delete user
}
我的测试跑步者看起来像这样:
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
@CucumberOptions(
plugin = {"pretty","com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:", "json:target/cucumber-report/TestResult.json"},
monochrome = false,
features = "src/test/resources/features/IntegrationScenarios.feature",
tags="@DeleteUserAfterTest",
glue="Steps")
public class IntegrationTest extends AbstractTestNGCucumberTests {
}
但是,当我启动测试用例时,有时我的用户在After(“ @ DeleteUserAfterTest”)中被删除,但是有时我的测试根本无法识别标记的After。它直接转到我的Hooks类中的After方法,并退出驱动程序。也许有人遇到此问题或知道解决方法!
答案 0 :(得分:1)
方法顺序未在Java中定义。因此,您必须告诉Cucumber,应以哪种顺序执行挂接。先运行较高的数字(否则,将出现钩子)。
@After(order = 500)
public void tearDown(Scenario scenario) {
}
@After(value = "@DeleteUserAfterTest", order = 1000)
public void deleteUser(){
}