场景(Scenarios)

场景是Cucumber结构的核心之一。每个场景都以关键字“Scenario:”(或本地化一)开头,后面是可选的场景标题。每个Feature可以有一个或多个场景,每个场景由一个或多个步骤组成。一个非常简单的场景示例可以是:

Scenario:验证帮助功能。给定用户导航到Facebook。当用户单击帮助时,将打开帮助页面。

考虑一种情况,其中我们需要不止一次地执行测试场景。假设,我们需要确保登录功能适用于所有类型的订阅用户。这需要多次执行登录功能场景。复制粘贴相同的步骤为了只重新执行代码,似乎不是一个聪明的主意。为此,Gherkin提供了一个更多的结构,这是场景概要。

Scenario Outline: 场景大纲类似于场景结构;唯一的区别是提供多个输入。从下面的示例中可以看出,测试用例保持不变,不可重复。在底部,我们为变量“Username”和“Password”提供了多个输入值。运行实际测试时,Cucumber将用提供的输入值替换变量,它将执行测试。一旦执行了pass-1,测试将使用另一个输入值重新运行第二次迭代。这样的变量或占位符可以用“<>”表示,同时用gherkin语句提及。

例如:ScenarioOutline:一个社交网站的登录功能。将用于引导到Facebook。当用户输入用户名:<username>,密码:<password>,这时登录成功。

参数列表如下:

有一些提示和技巧来巧妙地定义Cucumber场景:

1. 每个步骤应该清楚地定义,以便它不会给读者造成任何混乱。

2. 不要重复测试场景,如果需要使用场景大纲来实现重复。

3. 以一种方式开发测试步骤,它可以在多个场景和场景大纲中使用。

4. 尽可能保持每个步骤完全独立。例如:“给定用户已登录”。这可以分为两个步骤:输入用户名、点击登录。

附注(Annotations)

附注是预定义的文本,其具有特定的含义。 它让编译器/解释器知道,应该在执行时做什么。Cucumber有以下几个附注。

Given

它描述了要执行的测试的先决条件。示例:GIVEN I am a Facebook user

When

它定义任何测试场景执行的触发点。示例:WHEN I enter "<username>"

Then

Then保存要执行的测试的预期结果。示例:THEN loginshould be successful

And

它提供任何两个语句之间的逻辑AND条件。AND可以与GIVEN、WHEN和THEN语句结合使用。示例:WHEN I enter my "<username>" AND Ienter my "<password>"

But

它表示任何两个语句之间的逻辑或条件。But可以与GIVEN、WHEN和THEN语句结合使用。示例:THEN login should be successful.BUT home page should not be missing

Scenario

关于测试下的场景的详细信息需要在关键字“Scenario:”之后捕获。示例:

 Scenario:

         GIVEN I am aFacebook user

         WHEN I enter my

         AND I enter my

         THEN loginshould be successful.

         BUT home pageshould not be missing.

Scenario Outline

Scenario Outline: Login functionality for a socialnetworking site.

Givenuser navigates to Facebook

WhenI enter Username as "<username>"

AndPassword as "<password>"

Thenlogin should be unsuccessful

示例:

Background

Background通常具有在每个场景运行之前要设置什么的指令。但是,它在“Before”hook之后执行。因此,当我们想要设置Web浏览器或者我们想要建立数据库连接时,这时最佳的运用代码的方式。示例:

Background:

Go to Facebook home page.

场景实例

Step_1:创建一个名为:parm.feature的feature文件。创建步骤,在src\test\resources\feature路径下,创建parm.feature,然后输入文件名:parm.feature,打开文件,填写如下信息到文件,并保存:

Feature: 360影视登录页面参数化登录功能

#怎样实现重复输入账号密码操作的步骤
Background: 用户打开360影视首页
Given 用户正停留在360影视登录页 #输入账号密码a1/a1
Scenario:
When 用户输入用户名 "a1"
And 用户输入密码 "a1"
Then 登录失败,提示手机号不合法 #输入账号密码a2/a2
Scenario:
When 用户输入用户名 "a2"
And 用户输入密码 "a2"
Then 登录失败,提示手机号不合法 #输入账号密码a3/a3
Scenario:
When 用户输入用户名 "a3"
And 用户输入密码 "a3"
Then 登录失败,提示手机号不合法

Step_2:创建一个step定义文件。创建步骤,创建一个类ParamDemo,java

ParamDemo.java

package com.cucumber.demo;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; public class ParamDemo { WebDriver driver; @Given("^用户正停留在360影视登录页$")
public void goToCsdn() {
driver = new ChromeDriver();
driver.navigate().to("https://i.360kan.com/login");
driver.manage().window().maximize();
} @When("^用户输入用户名 \"(.*)\"$")
public void enterUsername(String arg1) {
driver.findElement(By.name("loginname")).sendKeys(arg1);
} @When("^用户输入密码 \"(.*)\"$")
public void enterPassword(String arg1) {
driver.findElement(By.name("loginpassword")).sendKeys(arg1);
driver.findElement(By.linkText("立即登录")).click();
} @Then("^登录失败,提示手机号不合法$")
public void checkFail() {
String msg=driver.findElement(By.xpath("//p[@class='b-signin-error js-b-signin-error error-2']")).getText();
Assert.assertEquals("输入手机号不合法",msg);
driver.close();
}
}

Step_3:创建一个runner 类文件。创建步骤,创建执行文件RunCukesTest.java

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith; @RunWith(Cucumber.class)
@CucumberOptions(
features = {"src/test/resources/feature/"},
format = {"pretty", "html:target/cucumber", "json:target/cucumber.json"},
glue = {"com.cucumber"}
)
public class RunCukesTest {
}

Step_4:运行test的选项:选择RunCukesTest.java,右击选择“Run as”运行即可

参考链接:https://blog.csdn.net/henni_719/article/details/53608144

行为驱动:Cucumber + Selenium + Java(一) - Cucumber简单操作实例的更多相关文章

  1. 行为驱动:Cucumber + Selenium + Java(一) - 环境搭建

    1.1 什么是行为驱动测试 说起行为驱动,相信很多人听说过. 行为驱动开发-BDD(Behavior Driven Development)是一个诞生于2003年的软件开发理念.其关键思想在于通过与利 ...

  2. 行为驱动:Cucumber + Selenium + Java(四) - 实现测试用例的参数化

    在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的使用Tags对测试用例分组的实现方法,这一篇我们用数据表格来实现测试用例参数化. 4.1 什么是用例参数化 实际测试中 ...

  3. 行为驱动:Cucumber + Selenium + Java(三) - 使用标签实现测试分组

    在上一篇中,我们写出了Selenium + Cucumber + Java环境下的第一个BDD自动化测试用例,这一篇我们说说怎么用标签对用例进行分组. 3.1 Cucumber标签 实际工作中,我们的 ...

  4. 行为驱动:Cucumber + Selenium + Java(二) - 第一个测试

    在上一篇中,我们搭建好了Selenium + Cucumber + Java的自动化测试环境,这一篇我们就赶紧开始编写我们的第一个BDD测试用例. 2.1 创建features 我们在新建的java项 ...

  5. 行为驱动:Cucumber + Selenium + Java(二) - extentreports 测试报告+jenkins持续集成

    1.extentreports 测试报告 pom文件 <dependency> <groupId>com.vimalselvam</groupId> <art ...

  6. 行为驱动:Cucumber + Selenium + Java(五) - 使用maven来实现cucumber测试和报告

    在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的测试用例参数化/数据驱动,这一篇我们来使用maven去搭建cucumber框架以及实现测试报告. 5.1 为什么要用m ...

  7. 在mac电脑上创建java的一些简单操作

    首先你要在电脑上下载一个JDK创造出一个java环境 如下第二个: 然后步奏如下: step1:苹果->系统偏好设置->最下边点MySQL 在弹出页面中 关闭mysql服务(点击stop ...

  8. Java最全文件操作实例汇总

    本文实例汇总了Java文件操作.分享给大家供大家参考,具体如下: 1.创建文件夹 ? 1 2 3 4 5 6 7 8 9 10 11 //import java.io.*; File myFolder ...

  9. 使用spring框架的JdbcTemplate实现对Oracle数据库的简单操作实例

    最近实现了一个小功能,针对Oracle数据库两张关联表进行查询和修改,因为比较简单,所以选择了spring框架里的JdbcTemplate.JdbcTemplate算是老古董了,是当年spring为了 ...

随机推荐

  1. Cards and Joy CodeForces - 999F (贪心+set)

    There are nn players sitting at the card table. Each player has a favorite number. The favorite numb ...

  2. python批量修改linux主机密码

    +++++++++++++++++++++++++++++++++++++++++++标题:python批量修改Linux服务器密码时间:2019年2月24日内容:基于python实现批量修改linu ...

  3. Apache Tomcat 7 Configuration BIO NIO AIO APR ThreadPool

    Apache Tomcat 7 Configuration Reference (7.0.93) - The Executor (thread pool)https://tomcat.apache.o ...

  4. [硬件]超能课堂(181):我们为什么需要4+8pin CPU供电接口?

    超能课堂(181):我们为什么需要4+8pin CPU供电接口? https://www.expreview.com/68008.html 之前算过TDP 来计算机器的功耗 发现自己 理解的还是有偏差 ...

  5. HashTable和HashMap

    参考自: http://blog.csdn.net/tgxblue/article/details/8479147 HashMap和HashTable的异同: 1 HashMap是非线程安全的,Has ...

  6. 【win7】安装php7.3及扩展

    php7.3插件php-redisphp-igbinaryphp-amqp [初识RabbitMQ,附RabbitMQ+PHP演示实例]https://www.cnblogs.com/miketwai ...

  7. GC Tools

    GC Tools There are multiple ways to enable the GC log: specifying either of the flags -verbose:gc or ...

  8. BZOJ 2243 染色

    树链剖分+区间染色 因为是一颗树不是森林,所以应该用树剖就行,但是LCT好像也能写.. 直接用线段树维护树上的节点,注意pushdown还有询问的时候要考虑区间相交的地方,也就是左孩子右边和有孩子的左 ...

  9. 为什么要写 tf.Graph().as_default()

    首先,去tensorflow官网API上查询 tf.Graph() 会看到如下图所示的内容: 总体含义是说: tf.Graph() 表示实例化了一个类,一个用于 tensorflow 计算和表示用的数 ...

  10. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试

    这一部分的主要目的是 配置spring-service.xml  也就是配置spring  并测试service层 是否配置成功 用IntelliJ IDEA 开发Spring+SpringMVC+M ...