我试图使用 Page Factory Model 和 Cucumber 自动化一些示例测试场景,但似乎不明白为什么当我尝试运行单个测试用例时会出现多个驱动程序实例。当我尝试通过 Runner.java 文件仅运行测试用例 1 时package execution;import java.io.File;import org.junit.AfterClass;import org.junit.runner.RunWith;import com.cucumber.listener.Reporter;import cucumber.api.CucumberOptions;import cucumber.api.junit.Cucumber;@RunWith(Cucumber.class)@CucumberOptions(features = "D:\\Eclipse Wokspace\\EcommerceProject\\Features\\Test1.feature", glue = { "stepDefinition" }, plugin = { "html:target/cucumber-html-report", "pretty:target/cucumber-pretty.txt", "usage:target/cucumber-usage.json", "junit:target/cucumber-results.xml","com.cucumber.listener.ExtentCucumberFormatter:target/cucumber-reports/report.html" }, dryRun = false, monochrome = true, strict = true)public class Runner { @AfterClass public static void writeExtentReport() { Reporter.loadXMLConfig( new File("D:\\Eclipse Wokspace\\EcommerceProject\\src\\test\\resources\\extent-config.xml")); Reporter.setSystemInfo("User Name", System.getProperty("user.name")); Reporter.setSystemInfo("Time Zone", System.getProperty("user.timezone")); Reporter.setSystemInfo("Machine", "Windows 10 " + "64 Bit"); Reporter.setSystemInfo("Selenium", "3.7.0"); Reporter.setSystemInfo("Maven", "3.5.2"); Reporter.setSystemInfo("Java Version", "1.8.0_151"); }}
1 回答
湖上湖
TA贡献2003条经验 获得超2个赞
问题是 Cucumber 正在执行在各种包类中定义的所有@Before和@After方法stepDefinition。这也是预期的情况,因为除非您专门告诉它,否则黄瓜不知道要执行哪些方法。
对此的一个简单解决方案是为每个测试用例创建不同的包来保存不同的类,但正如 OP 正确指出的那样,对于 100 个用例来说,这不是一个可行的解决方案,并且这种方法将限制用户无法从单个运行程序类执行所有功能文件。
解决方案 -
1)对于这个特定情况下,使用@BeforeClass和@AfterClassJUnit标注,而不是@Before和@After黄瓜注解。由于每个测试用例 Step Def 都有自己的类,这应该适用于您的情况。
2) 你也可以使用Tagged Hooks。它基本上是将钩子附加到场景中的名称。前任 -
功能文件 -
@Test1
Scenario: blah blah
@Test2
Scenario: blah blah 2
步骤定义 -
@Before("@Test1")
public void beforeFirst(){
//This will run only before the Scenario Test1
}
@Before("@Test2")
public void beforeSecond(){
//This will run only before the Scenario Test2
}
添加回答
举报
0/150
提交
取消