我实现Cucumber Testng是为了学习。我已经意识到@After钩子方法会执行两次。我可以通过调试集和测试报告输出来确认它。我只运行了一个功能文件,我的测试报告显示了两个具有相同类名的条目。
有人知道为什么吗?
代码:
@After
public void tearDown(Scenario scen) throws IOException {
ExtentTest logger = reportMgr.getLogger();
String feature = getClass().getName() + " Feature"; //+ "." + Thread.currentThread().getStackTrace()[1].getMethodName().toString();
logger = reportMgr.getExtent().createTest(feature);
String screenShot = CaptureScreenshot.captureScreen(WebDriverManager.driver, CaptureScreenshot.generateFileName(feature));
if (!scen.isFailed()) {
logger.pass("Pass");
logger.addScreenCaptureFromPath(screenShot);
} else {
logger.fail("Fail");
logger.addScreenCaptureFromPath(screenShot);
}
}
功能文件:
@Login_Valid Feature: Login to Volare Collector Description: As a user, I want login to Volare Collector
Scenario: Valid Login
Given Volare Collector Home Page opens in browser
When I login to Volare Collector with Username and Password
Then Page navigate to Volare Collector Home Page
在名为Multiple Definitions的特征文件中会显示警告:Volare Collector Home Page opens in browser(在浏览器中打开Volare Collector主页)。
请从这个link下载我的源代码。
发布于 2018-04-20 04:50:58
testng.xml
调用TestRunner
类。在cucumberoptions
中有 no tags option
,因此没有基于标签的过滤。因此,它将拾取features
选项- "src/Features"
ie中给出的文件夹中的所有功能文件。Login.feature和Logout.feature。
每个特征文件都有,每个有一个场景。因此,在总中有2个场景,因此将运行2个测试。这就解释了为什么您在report中看到2测试。
当每个场景运行时,它们将运行任何现有的Before and After hooks
。因此,对于2场景,钩子将运行两次。
此外,钩子本质上是全局钩子,即,只要它们出现在glue(glue = {"Step_Definitions"})
中定义的选项中的任何类中,它们就会被拾取。在您的例子中,在Login和Logout类中有two之前的钩子,您可能需要考虑修复它。使用一个之前的钩子,并在value选项中将其传递给一个标记过滤器。
在Login
类中定义的single After钩子中,这段代码
String feature = getClass().getName();
logger = reportMgr.getExtent().createTest(feature);
这意味着测试的名称将始终是完整的类名 ie。Step_Definitions.Login
。因此,它显示为具有相同名称的2测试,尽管它们是不同的。
发布于 2018-04-18 07:42:32
我假设您使用的是TestNG 6.8或更高版本
使用下面的Test类模板并检查是否有问题
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
class PlaygroundTest {
@BeforeClass
public void setUp(){
}
@AfterClass
public void tearDown() {
}
@Test
public void test(){
}
}
https://stackoverflow.com/questions/49791109
复制