黄瓜 – 情景大纲
黄瓜 – 情景大纲
场景大纲基本上用表中的值替换变量/关键字。表中的每一行都被认为是一个场景。
让我们继续使用 Facebook 登录功能的相同示例。到目前为止,我们一直在执行一个场景:提供正确的用户名后,登录成功。现在,假设我们要检查所有三种可能的输入类型(用户名、电子邮件地址或电话号码)的登录是否成功。为了实现这一点,我们需要编写三个不同的场景,其中每个场景都会随着输入的类型而变化,登录成功。在这种情况下,场景将如下所示。
设想:
给定用户导航到 Facebook
当我输入正确的用户名和密码时
那么登录应该就成功了
设想:
给定用户导航到 Facebook
当我输入正确的电子邮件地址和密码时
那么登录应该就成功了
设想:
给定用户导航到 Facebook
当我输入正确的电话号码和密码时
那么登录应该就成功了
在这里,如果我们仔细观察,对于上述三种情况:语句相同,只是输入参数(用户名/电子邮件地址/电话号码)发生了变化。这就是场景大纲的重要性体现出来的地方。
当我们使用场景大纲定义任何场景时,我们可以指定一个测试场景,并在其底部提供多个输入。该场景将执行与提供的输入数量一样多的次数。
例子
让我们创建一个场景大纲的例子 –
步骤 1 – 创建一个名为ScenarioOutlineTest的 Maven 测试项目
-
转到文件 → 新建 → 其他 → Maven → Maven 项目 → 下一步。
-
提供组 ID(组 ID 将在所有项目中唯一标识您的项目)。
-
提供 artifact Id(artifact Id 是没有版本的 jar 的名称。您可以选择任何小写的名称)。
-
单击完成。
-
打开pom.xml –
-
转到 Eclipse 左侧的包资源管理器。
-
展开 CucumberTest 项目。
-
找到 pom.xml 文件。
-
右键单击并选择选项,使用“文本编辑器”打开。
-
-
为 Selenium 添加依赖项 – 这将指示 Maven,哪些 Selenium jar 文件将从中央存储库下载到本地存储库。
-
在编辑模式下打开 pom.xml,在项目标签内创建依赖标签(<dependencies></dependencies>)。
-
在依赖项标签内,创建依赖项标签 (<dependency></dependency>)。
-
在依赖项标记中提供以下信息。
-
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.47.1</version> </dependency>
-
为 Cucumber-Java 添加依赖项:这将指示 Maven,哪些 Cucumber 文件将从中央存储库下载到本地存储库。
-
再创建一个依赖标签。
-
在依赖项标签内提供以下信息。
-
<dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java</artifactId> <version>1.0.2</version> <scope>test</scope> </dependency>
-
为 Cucumber-JUnit 添加依赖项:这将指示 Maven,哪些 Cucumber JUnit 文件将从中央存储库下载到本地存储库。
-
再创建一个依赖标签。
-
在依赖项标记中提供以下信息。
-
<dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-junit</artifactId> <version>1.0.2</version> <scope>test</scope> </dependency>
-
为 JUnit 添加依赖项 – 这将指示 Maven,哪些 JUnit 文件将从中央存储库下载到本地存储库。
-
再创建一个依赖标签。
-
在依赖项标记中提供以下信息。
-
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency>
-
为 JUnit 添加依赖项 – 这将指示 Maven,哪些 JUnit 文件将从中央存储库下载到本地存储库。
-
再创建一个依赖标签。
-
在依赖项标记中提供以下信息。
-
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency>
-
验证二进制文件。
-
pom.xml 编辑成功后,保存。
-
转到项目→清洁 – 这将需要几分钟。
-
第 2 步– 在src/test/java下创建一个名为“outline”的包
步骤 3 – 创建一个名为“outline.feature”的特征文件
-
选择并右键单击包轮廓。
-
单击“新建”文件。
-
提供文件名,例如“outline.feature”
-
在文件中写入以下文本并保存。
功能– 场景大纲
Scenario Outline – 社交网站的登录功能。
给定用户导航到 Facebook
当我输入用户名为“<用户名>”和密码为“<密码>”时
那么登录应该是不成功的
-
示例–
| username | password | | username1 | password1 | | username2 | password2 |
注意– 此处,示例注释描述了在场景执行时提供的输入范围。将为提供的每个输入执行测试场景。因此,在给定的示例中,测试场景将执行 3 次。
步骤 4 – 创建一个步骤定义文件。
-
选择并右键单击包轮廓。
-
单击“新建”文件。
-
将文件名指定为stepdefinition.java
-
在文件中写入以下文本并保存。
package Outline; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import cucumber.annotation.en.Given; import cucumber.annotation.en.Then; import cucumber.annotation.en.When; public class stepdefinition { WebDriver driver = null; @Given("^user navigates to facebook$") public void goToFacebook() { driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") public void I_enter_Username_as_and_Password_as(String arg1, String arg2) { driver.findElement(By.id("email")).sendKeys(arg1); driver.findElement(By.id("pass")).sendKeys(arg2); driver.findElement(By.id("u_0_v")).click(); } @Then("^login should be unsuccessful$") public void validateRelogin() { if(driver.getCurrentUrl().equalsIgnoreCase( "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ System.out.println("Test Pass"); } else { System.out.println("Test Failed"); } driver.close(); } }
注意– 在上面的代码中,我们必须定义一个具有两个输入参数的函数:一个用户名,另一个用于密码。因此,对于示例标签中提供的每组输入,将执行 Set of GIVEN、WHEN 和 THEN。
第 5 步– 创建一个跑步者类文件。
-
选择并右键单击包轮廓。
-
单击“新建”文件。
-
给出文件名,例如runTest.java
-
在文件中写入以下文本并保存。
package Outline; import org.junit.runner.RunWith; import cucumber.junit.Cucumber; @RunWith(Cucumber.class) @Cucumber.Options(format = {"pretty", "html:target/cucumber"}) public class runTest { }
-
使用选项运行测试 –
-
从包资源管理器中选择runTest.java文件。
-
右键单击并选择选项‘Run as’。
-
选择 JUnit 测试。
-
运行这个类文件你会观察到以下几点
-
Facebook 在新的 Firefox 网络浏览器实例中打开。
-
Username1 和 password1 将作为输入传递给用户名和密码字段。
-
登录将被点击。
-
浏览器将显示有关登录失败的消息。
-
在控制台中,您将看到打印的“测试通过”。
-
对username2 和password2 将重新执行步骤结果1 到5。
简而言之,当场景没有变化而只是数据值发生变化时,建议使用场景大纲数据表。