如何使用 cucumber 运行ner class 运行 多个特征文件?
How to run multiple feature files using the cucumber runner class?
使用下面这行代码,login.feature中提到的所有场景都可以执行。
@CucumberOptions(features= "src/main/resources/publish/login.feature", format = {"pretty"} )
如果我必须执行多个功能文件,我该如何定义?假设如果我如下定义,将执行发布文件夹中提到的功能。
@CucumberOptions(features= "src/main/resources/publish", format = {"pretty"} )
如果我要运行多个功能和场景在里面,我该如何定义?我必须创建多个 cucumberRunner classes 还是我可以在一个 class 文件中定义。
您可以通过在 cucumber 选项中定义标签值来实现(考虑到您已经在功能文件中对这些场景进行了分组)
例如:
features="src/test/resources/FeatureFiles",tags="@feature1scenariogroup1,@feature2cenariogroup2"
在特征文件中定义标签:
Feature: My Feature File
@smoke
Scenario: Login
Given I open "FireFox" browser
When I navigate to Sectionone "Home" page
And i do something
Then I Validate Something
@regression
Scenario: Compose Email
Given I open "FireFox" browser
When I Do An Action
@OnlyOneTime
Scenario:Send Email
....
您可以在使用标签的功能中使用选择性功能文件或选择性场景。请尝试使用此解决方案。
假设您有 n 个特征文件,您需要 运行 只从中选择特征。然后用@tag名称命名每个特征文件。
例如:在此文件夹下,如果您有 n 个功能 - "src/main/resources/publish"
第一个特征文件名:
Login.feature
//文件内部以特征标签名称开头
@Login
Feature: To Login to Email
//Then feature name followed with scenario tag name
@User
//Scenario1:
Scenario Outline: Navigate and logon to gmail application
Given User launches gmail application
When User updates emailID <emailID>
And User updates pwd <pwd>
Then User clicks on Login Button
Examples:
| emailID | pwd |
| a@gmail.com| 123 |
第二个功能文件名:
CreateEmail.feature
@Createmail
Feature: Create email
Scenario: Blah blah blah...
//Write all Given when And Then
第三个功能文件名:
SendEmail.feature
@Sendemail
Feature: Send email
Scenario: Blah blah blah...
//Write all Given when And Then
所以从上面的测试文件。假设您想单独测试第一个和第三个功能,那么您可以使用如下代码:
例如: # 这是针对 运行 特定的功能文件,即 1 和 3。同样,如果同一功能文件中有 n 个场景,您也可以使用场景标签。
@CucumberOptions(features= "src/main/resources/publish", tags="@Login, @Sendemail", format = {"pretty"} )
将我的代码修改为 运行 所有启用的功能、场景。 features 是 运行ner class 考虑 features
的要点
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"classpath:features"},
plugin = {"html:target/site/cucumber-pretty","json:target/cucumber.json"},
tags = {"@currentTest"},
glue={"helpers","stepDefinitions"},
// dryRun = true,
monochrome = true
)
public class RunCukesTest{
}
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"src/test/java/Features"},
tags= {"@FirstTimeLaunch, @SignUpPage"},
glue= {"testCode"},
plugin = { "pretty", "html:target/htmlreports" }
)
当您作为 Junit 测试 (runner class) 执行时,Features 文件夹(包)中的所有 *.feature 文件将按照文件名的字母顺序执行
你可以简单地写 tags = {"@fileName1, @fileName2"}
我们可以使用@File1、@File2、..添加多个文件
试试这个,下面的代码适用于多个特征文件(标签属性只在你想要 运行 特定场景时有效),我尝试了下面的多个特征文件,它有效:
@CucumberOptions(features = {"src\test\resources\cucumberfeaturefolder\cucumber1.feature",
"src\test\resources\cucumberfeaturefolder\cucumber2.feature"},
glue= "StepDef")
以下代码适用于我:
(1) BeerCans.feature
Feature: Beer Cans
Scenario: Counting Beer Cans
Given I have <opening balance> beer cans
And I have drunk processed beer cans
When I go to my fridge
Then I should have <in stock> beer cans
(2) multiplication.feature
Feature: Multiplication
I multiply two numbers
Scenario: multiple a and b
Given I have variable a
And I have variable b
When I multiply a and b
Then I display the Result
(3) MyStepdefs class
package org.example.njain51.steps; /**
* @author : Nitin Jain
* @mailto : official.nitinjain@gmail.com
* @created : 5/22/2022, Sunday
**/
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
/**
What this program snippet doing?
**/
public class MyStepdefs {
@Given("I have <opening balance> beer cans")
public void iHaveOpeningBalanceBeerCans() {
System.out.println("I have Opening Balance");
}
@And("I have drunk processed beer cans")
public void iHaveDrunkProcessedBeerCans() {
}
@When("I go to my fridge")
public void iGoToMyFridge() {
System.out.println("I go to my Fridge");
}
@Then("I should have <in stock> beer cans")
public void iShouldHaveInStockBeetCans() {
System.out.println("I should have in stock beer cans");
}
}
(4) 乘法步骤定义 class
package org.example.njain51.steps; /**
* @author : Nitin Jain
* @mailto : official.nitinjain@gmail.com
* @created : 5/22/2022, Sunday
**/
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
/**
What this program snippet doing?
**/
public class MultiplicationStepDef {
@Given("I have variable a")
public void iHaveVariableA() {
System.out.println("I have variable a");
}
@And("I have variable b")
public void iHaveVariableB() {
System.out.println("I have variable b");
}
@When("I multiply a and b")
public void iMultiplyAAndB() {
System.out.println("I Multiply a and b");
}
@Then("I display the Result")
public void iDispayTheResult() {
System.out.println("I Display the result");
}
}
(5) RunCucumberTest Class 实现多个功能
package org.example.njain51;/**
* @author : Nitin Jain
* @mailto : official.nitinjain@gmail.com
* @created : 5/22/2022, Sunday
**/
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"src/test/resources/features/BeerCans.feature",
"src/test/resources/features/multiplication.feature"},
glue = {"org.example.njain51.steps"})
public class RunCucumberTest {
}
(6) 当我运行 RunCucumberTest
时输出
C:\Users\offic\.jdks\corretto-1.8.0_292\bin\java.exe -ea -DnodeNamesHandler=org.jetbrains.plugins.cucumber.java.run.CucumberTestTreeNodeManager -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\lib\idea_rt.jar=49946:C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\charsets.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\access-bridge-64.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\cldrdata.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\dnsns.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\jaccess.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\jfxrt.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\localedata.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\nashorn.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunec.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunjce_provider.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunmscapi.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunpkcs11.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\zipfs.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jce.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jfr.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jfxswt.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jsse.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\management-agent.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\resources.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\rt.jar;D:\mylearning\SAMPLE_PROJECTS\Testing\cucumber-demo\target\test-classes;C:\Users\offic\.m2\repository\io\cucumber\cucumber-java.1.1\cucumber-java-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-core.1.1\cucumber-core-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-gherkin.1.1\cucumber-gherkin-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-gherkin-messages.1.1\cucumber-gherkin-messages-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\messages.1.1\messages-12.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\tag-expressions.0.0\tag-expressions-3.0.0.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-expressions.2.0\cucumber-expressions-10.2.0.jar;C:\Users\offic\.m2\repository\io\cucumber\datatable.3.1\datatable-3.3.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-plugin.1.1\cucumber-plugin-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\docstring.1.1\docstring-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\html-formatter.0.3\html-formatter-6.0.3.jar;C:\Users\offic\.m2\repository\org\apiguardian\apiguardian-api.1.0\apiguardian-api-1.1.0.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-junit.1.1\cucumber-junit-6.1.1.jar;C:\Users\offic\.m2\repository\junit\junit.13\junit-4.13.jar;C:\Users\offic\.m2\repository\org\hamcrest\hamcrest-core.3\hamcrest-core-1.3.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\plugins\cucumber-java\lib\cucumber-jvmFormatter.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 org.example.njain51.RunCucumberTest
I have Opening Balance
I go to my Fridge
I should have in stock beer cans
I have variable a
I have variable b
I Multiply a and b
I Display the result
Process finished with exit code 0
使用下面这行代码,login.feature中提到的所有场景都可以执行。
@CucumberOptions(features= "src/main/resources/publish/login.feature", format = {"pretty"} )
如果我必须执行多个功能文件,我该如何定义?假设如果我如下定义,将执行发布文件夹中提到的功能。
@CucumberOptions(features= "src/main/resources/publish", format = {"pretty"} )
如果我要运行多个功能和场景在里面,我该如何定义?我必须创建多个 cucumberRunner classes 还是我可以在一个 class 文件中定义。
您可以通过在 cucumber 选项中定义标签值来实现(考虑到您已经在功能文件中对这些场景进行了分组)
例如: features="src/test/resources/FeatureFiles",tags="@feature1scenariogroup1,@feature2cenariogroup2"
在特征文件中定义标签:
Feature: My Feature File
@smoke
Scenario: Login
Given I open "FireFox" browser
When I navigate to Sectionone "Home" page
And i do something
Then I Validate Something
@regression
Scenario: Compose Email
Given I open "FireFox" browser
When I Do An Action
@OnlyOneTime
Scenario:Send Email
....
您可以在使用标签的功能中使用选择性功能文件或选择性场景。请尝试使用此解决方案。
假设您有 n 个特征文件,您需要 运行 只从中选择特征。然后用@tag名称命名每个特征文件。
例如:在此文件夹下,如果您有 n 个功能 - "src/main/resources/publish"
第一个特征文件名:
Login.feature
//文件内部以特征标签名称开头
@Login
Feature: To Login to Email
//Then feature name followed with scenario tag name
@User
//Scenario1:
Scenario Outline: Navigate and logon to gmail application
Given User launches gmail application
When User updates emailID <emailID>
And User updates pwd <pwd>
Then User clicks on Login Button
Examples:
| emailID | pwd |
| a@gmail.com| 123 |
第二个功能文件名:
CreateEmail.feature
@Createmail
Feature: Create email
Scenario: Blah blah blah...
//Write all Given when And Then
第三个功能文件名:
SendEmail.feature
@Sendemail
Feature: Send email
Scenario: Blah blah blah...
//Write all Given when And Then
所以从上面的测试文件。假设您想单独测试第一个和第三个功能,那么您可以使用如下代码:
例如: # 这是针对 运行 特定的功能文件,即 1 和 3。同样,如果同一功能文件中有 n 个场景,您也可以使用场景标签。
@CucumberOptions(features= "src/main/resources/publish", tags="@Login, @Sendemail", format = {"pretty"} )
将我的代码修改为 运行 所有启用的功能、场景。 features 是 运行ner class 考虑 features
的要点@RunWith(Cucumber.class)
@CucumberOptions(
features = {"classpath:features"},
plugin = {"html:target/site/cucumber-pretty","json:target/cucumber.json"},
tags = {"@currentTest"},
glue={"helpers","stepDefinitions"},
// dryRun = true,
monochrome = true
)
public class RunCukesTest{
}
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"src/test/java/Features"},
tags= {"@FirstTimeLaunch, @SignUpPage"},
glue= {"testCode"},
plugin = { "pretty", "html:target/htmlreports" }
)
当您作为 Junit 测试 (runner class) 执行时,Features 文件夹(包)中的所有 *.feature 文件将按照文件名的字母顺序执行
你可以简单地写 tags = {"@fileName1, @fileName2"}
我们可以使用@File1、@File2、..添加多个文件
试试这个,下面的代码适用于多个特征文件(标签属性只在你想要 运行 特定场景时有效),我尝试了下面的多个特征文件,它有效:
@CucumberOptions(features = {"src\test\resources\cucumberfeaturefolder\cucumber1.feature",
"src\test\resources\cucumberfeaturefolder\cucumber2.feature"},
glue= "StepDef")
以下代码适用于我:
(1) BeerCans.feature
Feature: Beer Cans
Scenario: Counting Beer Cans
Given I have <opening balance> beer cans
And I have drunk processed beer cans
When I go to my fridge
Then I should have <in stock> beer cans
(2) multiplication.feature
Feature: Multiplication
I multiply two numbers
Scenario: multiple a and b
Given I have variable a
And I have variable b
When I multiply a and b
Then I display the Result
(3) MyStepdefs class
package org.example.njain51.steps; /**
* @author : Nitin Jain
* @mailto : official.nitinjain@gmail.com
* @created : 5/22/2022, Sunday
**/
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
/**
What this program snippet doing?
**/
public class MyStepdefs {
@Given("I have <opening balance> beer cans")
public void iHaveOpeningBalanceBeerCans() {
System.out.println("I have Opening Balance");
}
@And("I have drunk processed beer cans")
public void iHaveDrunkProcessedBeerCans() {
}
@When("I go to my fridge")
public void iGoToMyFridge() {
System.out.println("I go to my Fridge");
}
@Then("I should have <in stock> beer cans")
public void iShouldHaveInStockBeetCans() {
System.out.println("I should have in stock beer cans");
}
}
(4) 乘法步骤定义 class
package org.example.njain51.steps; /**
* @author : Nitin Jain
* @mailto : official.nitinjain@gmail.com
* @created : 5/22/2022, Sunday
**/
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
/**
What this program snippet doing?
**/
public class MultiplicationStepDef {
@Given("I have variable a")
public void iHaveVariableA() {
System.out.println("I have variable a");
}
@And("I have variable b")
public void iHaveVariableB() {
System.out.println("I have variable b");
}
@When("I multiply a and b")
public void iMultiplyAAndB() {
System.out.println("I Multiply a and b");
}
@Then("I display the Result")
public void iDispayTheResult() {
System.out.println("I Display the result");
}
}
(5) RunCucumberTest Class 实现多个功能
package org.example.njain51;/**
* @author : Nitin Jain
* @mailto : official.nitinjain@gmail.com
* @created : 5/22/2022, Sunday
**/
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"src/test/resources/features/BeerCans.feature",
"src/test/resources/features/multiplication.feature"},
glue = {"org.example.njain51.steps"})
public class RunCucumberTest {
}
(6) 当我运行 RunCucumberTest
时输出C:\Users\offic\.jdks\corretto-1.8.0_292\bin\java.exe -ea -DnodeNamesHandler=org.jetbrains.plugins.cucumber.java.run.CucumberTestTreeNodeManager -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\lib\idea_rt.jar=49946:C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\charsets.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\access-bridge-64.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\cldrdata.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\dnsns.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\jaccess.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\jfxrt.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\localedata.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\nashorn.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunec.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunjce_provider.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunmscapi.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\sunpkcs11.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\ext\zipfs.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jce.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jfr.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jfxswt.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\jsse.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\management-agent.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\resources.jar;C:\Users\offic\.jdks\corretto-1.8.0_292\jre\lib\rt.jar;D:\mylearning\SAMPLE_PROJECTS\Testing\cucumber-demo\target\test-classes;C:\Users\offic\.m2\repository\io\cucumber\cucumber-java.1.1\cucumber-java-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-core.1.1\cucumber-core-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-gherkin.1.1\cucumber-gherkin-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-gherkin-messages.1.1\cucumber-gherkin-messages-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\messages.1.1\messages-12.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\tag-expressions.0.0\tag-expressions-3.0.0.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-expressions.2.0\cucumber-expressions-10.2.0.jar;C:\Users\offic\.m2\repository\io\cucumber\datatable.3.1\datatable-3.3.1.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-plugin.1.1\cucumber-plugin-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\docstring.1.1\docstring-6.1.1.jar;C:\Users\offic\.m2\repository\io\cucumber\html-formatter.0.3\html-formatter-6.0.3.jar;C:\Users\offic\.m2\repository\org\apiguardian\apiguardian-api.1.0\apiguardian-api-1.1.0.jar;C:\Users\offic\.m2\repository\io\cucumber\cucumber-junit.1.1\cucumber-junit-6.1.1.jar;C:\Users\offic\.m2\repository\junit\junit.13\junit-4.13.jar;C:\Users\offic\.m2\repository\org\hamcrest\hamcrest-core.3\hamcrest-core-1.3.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2021.1\plugins\cucumber-java\lib\cucumber-jvmFormatter.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 org.example.njain51.RunCucumberTest
I have Opening Balance
I go to my Fridge
I should have in stock beer cans
I have variable a
I have variable b
I Multiply a and b
I Display the result
Process finished with exit code 0