我有两节cucumber赛跑课。其中一个是基于JUnit的runner,另一个是基于TestNG的。Junit one是我为API测试实现的第一个运行程序,并通过maven按预期运行。我在项目中添加了一个web测试,并使用TestNG来帮助我实现跨浏览器测试。因此,我创建了一个额外的cucumber runner(基于TestNG)。当我通过< code>testng.xml文件运行web测试时,它按预期运行。在这一点上没有问题。
JUnit Cucumber跑步者:
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("features")
@IncludeTags("api")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "stepdefinitions")
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "json:target/surefire-reports/cucumber.json")
public class RunCucumberTest {
}
TestNGcucumber跑步者
@CucumberOptions(
plugin = {"pretty", "html:target/surefire-reports/cucumber",
"json:target/surefire-reports/cucumberOriginal.json"},
glue = {"stepdefinitions"},
tags = "@web-1",
features = {"src/test/resources/features/web.feature"})
public class RunCucumberNGTest extends AbstractTestNGCucumberTests {
public final static ThreadLocal<String> BROWSER = new ThreadLocal<>();
@BeforeTest
@Parameters({"Browser"})
public void defineBrowser(String browser) {
//put browser value to thread-safe container
RunCucumberNGTest.BROWSER.set(browser);
System.out.println(browser);
}
}
TestNG配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests" thread-count="5">
<test name="Chrome Test">
<parameter name="Browser" value="CHROME"/>
<classes>
<class name="config.RunCucumberNGTest"/>
</classes>
</test>
<test name="Firefox Test">
<parameter name="Browser" value="FF"/>
<classes>
<class name="config.RunCucumberNGTest"/>
</classes>
</test>
</suite>
JUnit runner是通过maven-surefire插件嵌入到POM中的,因此如果我执行maven命令,例如<code>mvn test</code>,则如预期的那样,只执行JUnit运行程序。
现在,为了同时执行两个runner,我使用<code>在maven-surefire插件中添加了TestNG runner
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<properties>
<configurationParameters>
cucumber.junit-platform.naming-strategy=long
</configurationParameters>
</properties>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
<plugin>
<groupId>net.masterthought</groupId>
<artifactId>maven-cucumber-reporting</artifactId>
<version>5.6.2</version>
<executions>
<execution>
<id>execution</id>
<phase>verify</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<projectName>AutomationFrameworkSkeleton</projectName>
<!-- optional, per documentation set this to "true" to bypass generation of Cucumber Reports entirely, defaults to false if not specified -->
<skip>false</skip>
<outputDirectory>${project.build.directory}
</outputDirectory>
<inputDirectory>${project.build.directory}
</inputDirectory>
<jsonFiles>
<param>**/*.json</param>
</jsonFiles>
<!-- optional, set true to group features by its Ids -->
<mergeFeaturesById>false</mergeFeaturesById>
<!-- optional, set true to get a final report with latest results of the same test from different test runs -->
<mergeFeaturesWithRetest>false
</mergeFeaturesWithRetest>
<!-- optional, set true to fail build on test failures -->
<checkBuildResult>false</checkBuildResult>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
有没有办法和maven一起运行cucumber Junit和TestNG类?我想是有的。我可能错误地将< code>testng.xml文件添加到了POM中。
从您的问题来看,您似乎正在尝试同时运行 API 和跨浏览器 Web 测试。如果您由于其他原因不必使用两个运行器,则可以通过这种方式实现跨浏览器配置。我用 docker 容器对其进行了测试,但它可以在没有 docker 的情况下使用
在驱动程序工厂
类中执行此操作。这个类应该与你的stepdefs一起使用,因为它正在使用@Before
public class DriverFactory {
public static Collection tagList;
@Before
public void getScenarioTags(Scenario scenario) {
tagList = scenario.getSourceTagNames();
}
public RemoteWebDriver getManager() throws MalformedURLException , IOException {
if (tagList.contains("@firefox")){
//implement FirefoxManager class to return firefox instance . class may be outside your stepdefs
return new FirefoxManager().getDriver();
}
else if (tagList.contains("@chrome")){
//implement ChromeManager class to return chrome instance. class may be outside your stepdefs
return new ChromeManager().getDriver();
}
else{
return null;
}
}
}
在特征文件中相应地标记这些方案,并将它们包含在< code>@cucumberOptions中。我以这种方式包含标签< code>tags = {"@firefox或@chrome"},
我正在docker实例上运行这个场景级并行测试设置。但是,我使用的是courgettejvm
和testNG
。如果您想了解有关
和
testNG
的更多信息,请看一下这个问题。另请查看
courgettejvm
下面是我的赛跑课, 配置失败:@AfterClass tearDownClass java.lang.NullPoInterException at Cucumber.api.testng.AbstractTestngCucumberTests.tearDownClass(AbstractTestngCucumberTests.java:34)at Sun.Reflect.NativeMethod
我正在努力获得Cucumber-JVM V4.0.0与JUnit/Maven一起工作的新并行执行特性。 如前所述,如果在POM中相应地配置和,并使用依赖项注入来共享状态(我使用的是Pico Continer),那么Cucumber特性应该并行执行。 如果有用的话,下面是我的runner类(com.softwareAutomation.world是DI类) 请参阅下面从Maven运行时的失败堆栈跟踪
我正在用cucumber和硒网络司机一起工作。我的测试工作与预期的组合。为了实现跨浏览器测试,我添加了TestNG框架。为了验证我的跨浏览器测试运行良好,我单独使用TestNG运行了它,没有使用cucumber。它在Chrome和火狐浏览器中都运行完美。 } 测试开始了。xml文件: 我需要将TestNG测试与Cucumber设置相集成,这样我就可以用Cucumber运行整个测试。为此,我将cuc
我无法同时运行TestNG/JUnit的Cucumber TestRunner类。我希望在我的框架中包含Testng和junit。我得到一些abc类错误。我的项目中有所有的依赖项。我这里有2qns。1.当从cucumber junit导入时,我可以在我的cucumber脚本中使用Testng注释吗?2.如何解决错误执行我的testrun。 我错过了什么...如果我错过了什么,请帮我把它修好。
我试图在IntelliJ中运行cucumber特征文件。 Cucumber Options指向正确的文件夹,但在尝试执行JUnit运行程序类时,我会收到“无可用任务”通知。 我做错了什么? 这是我的: