英文视频教程地址是百度网盘,后续会放到微信公众号:【软测小生】里面,请关注公号更新相关文章和视频资源。
****************************分割线*****************************
此文只是搬运工,最准确的请查看原文,文章来源:https://www.toolsqa.com/cucumber/first-cucumber-selenium-java-test/
到目前为止,在Cucumber系列教程中,我们已经介绍了Feature files, Gherkins, Step Definitions, Annotations, Test Runner Class和许多其他内容。毫无疑问,在您了解所有概念之前,您无法设置BDD框架,但是在Cucumber自动化的生活中,仍然有一些领域是非常重要的,比如Cucumber Options, Regular Expressions, Page Object factory等等。让我们从Cucumber Options开始吧。
在一个外行看来@CucumberOptions类似于测试中的属性文件或设置。实际上 @CucumberOptions让可以完成我们使用cucumber命令行时可以做的所有事情。如果我们只使用IDE这样的Eclipse来执行我们的项目,那么这是非常有用的,也是非常重要的。您一定注意到,我们在前一章的“TestRunner”类中设置了一些选项。
TestRunner Class
package cucumberTest;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "Feature"
,glue={"stepDefinition"}
)
public class TestRunner {
}
在上面的例子中,我们设置了两个不同的Cucumber Options。一个用于Feature File,另一个用于Step Definition文件。现在我们将详细讨论它,并且有了这个,我们可以说@CucumberOptions用于为Cucumber测试设置一些特定的属性。
Cucumber提供了以下主要选项:
Options Type (选项类型) |
Purpose(用途) |
Default Value(默认值) |
dryRun |
true:检查所有步骤是否都有步骤(Step Definition)定义 |
false |
features(剧本) |
set:feature文件的路径 |
{} |
glue |
set:步骤定义(Step Definition)文件的路径 |
{} |
tags |
instruct(指示): 指定应该执行features文件中的哪些标签 |
{} |
monochrome |
True:以可读的方式显示控制台输出 |
false |
format |
set:What all report formaters to use |
false |
strict |
true:如果存在未定义或挂起的步骤,则执行将失败。 |
false |
dryRun选项可以设置为true或false。
如果设置为true,这意味着Cucumber将只检查 Feature文件中提到的每个Step是否在Step Definition文件中编写了相应的代码。。 因此,如果在Feature文件中的任何一个步骤的Step Definition中遗漏了某个函数,它将向我们提供消息。 对于练习,只需在TestRunner类中添加代码'dryRun = true':
TestRunner Class
package cucumberTest;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "Feature"
,glue={"stepDefinition"}
,dryRun = true
)
public class TestRunner {
}
现在右键单击TestRunner类运行它,然后单击Run As > JUnit Test。Cucumber将运行脚本,结果将显示在JUnit选项卡的左侧project explorer窗口中。
【如果要使用TestNG 则要 extends AbstractTestNGCucumberTests, 然后单击Run As > TestNG Test】
看看每个步骤结束时的持续时间,它是(0.000s)。这意味着没有执行任何一个步骤,但是Cucumber仍然确保每个步骤在步骤定义文件中都有相应的方法可用。尝试一下,从Test_Steps类中删除' @Given(" ^User is on Home Page$ ") '语句,然后再次运行TestRunner类。您将得到以下信息:
此选项可以设置为true或false。
如果将其设置为true,则意味着Cucumber测试的控制台输出更具可读性。如果将其设置为false,那么控制台输出就没有应有的可读性。为了练习,只需在TestRunner类中添加代码“monochrome = true”:
TestRunner类:
TestRunner Class
package cucumberTest;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "Feature"
,glue={"stepDefinition"}
,monochrome = false
)
public class TestRunner {
}
现在右键单击TestRunner类运行它,然后单击Run As > JUnit Test。Cucumber将运行脚本,控制台输出将如下所示:
这一次将值从true更改为false,即“monochrome = false”:,并再次运行TestRunner类。这一次控制台输出将如下所示:
@Login @tag1
Scenario: Successful Login with Valid Credentials [90m# src/test/resources/features/LogIn_Test.feature:5[0m
^User is on Home Page$
[32mGiven [0m[32mUser is on Home Page[0m [90m# StepDefinitions.User_is_on_Home_Page()[0m
^User Navigate to LogIn Page$
[32mWhen [0m[32mUser Navigate to LogIn Page[0m [90m# StepDefinitions.User_Navigate_to_LogIn_Page()[0m
^User enters UserName and Password$
[32mAnd [0m[32mUser enters UserName and Password[0m [90m# StepDefinitions.User_enters_UserName_Password()[0m
^Message displayed Login Successfully$
[32mThen [0m[32mMessage displayed Login Successfully[0m [90m# StepDefinitions.Message_displayed_Login_Successfully()[0m
1 Scenarios ([32m1 passed[0m)
4 Steps ([32m4 passed[0m)
0m0.182s
Features Options帮助Cucumber在项目文件夹结构中指定Feature文件。您一定注意到,从第一章开始,我们就在TestRunner类中指定了Feature Option。我们只需要指定文件夹路径,Cucumber就会自动找到所有的‘.features‘文件夹中的扩展文件。可以这样指定:
features = “Feature“
或者如果Feature 文件位于深层文件夹结构中
features = “src/test/features“
它与Features选项几乎是相同的,但唯一的区别是它帮助Cucumber定位step Definitions文件。当Cucumber遇到一个步骤时,它会在Glue Option中提到的文件夹中的所有文件中寻找一个步骤定义。可以这样指定:
glue = “stepDefinition“
或者如果Feature 文件位于深层文件夹结构中
glue = “src/test/stepDeinition“
Format Option用于为输出报告指定不同的格式化选项。可用作事项的各种选择如下:
Pretty: 为查找错误,使用额外的颜色和堆栈打印Gherkin源信息。 使用以下代码:
format = {“pretty“}
HTML: 这将在for-matter本身标注的位置生成一个HTML报告。 使用以下代码:
format = {“html:Folder_Name“}
JSON: 此报告包含JSON格式的gherkin 源的所有信息。 此报告旨在通过第三方工具(如Cucumber Jenkins)进行后处理,转换为另一种可视格式。 使用以下代码:
format = {“json:Folder_Name/cucumber.json“}
JUnit: 该报告生成XML文件,就像Apache Ant的JUnit报告任务一样。 大多数Continuous Integration服务器都会解析这种XML格式,他们将使用它来生成可视化报告。 使用以下代码:
format = { “junit:Folder_Name/cucumber.xml“}