文档章节

第3章Cucumber场景与附注实例---------------Cucumber简单操作实例

henni_719
 henni_719
发布于 2017/04/22 17:26
字数 1474
阅读 15
收藏 0


3.1 场景(Scenarios)

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

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

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

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

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

    参数列表如下:

          

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

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

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

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

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

3.2 附注(Annotations)

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

3.2.1 Given

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

3.2.2 When

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

3.2.3 Then

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

3.2.4 And

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

3.2.5 But

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

3.2.6 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.

3.2.7 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

    示例:

         

3.2.8 Background

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

         Background:

         Go to Facebook home page.

3.3 场景实例

Step_1:打开Eclipse,在src/test/java包下,创建一个Annotation包并保存。(之前安装环境)

            

Step_2:创建一个名为:Annotation.featurefeature文件。创建步骤,右击Annotation包,选择New file,然后输入文件名:Annotation.feature,打开文件,填写如下信息到文件,并保存:

           

Annotation.feature

Feature: annotation 

#This is how background can be used to eliminate duplicate steps 
Background: User navigates to CSDN
Given I am on CSDN login page 

#Scenario with AND 
Scenario: When I enter username as "TOM" 
And I enter password as "JERRY" 
Then Login should fail 

#Scenario with BUT 
Scenario: 
When I enter username as "TOM" 
And I enter password as "JERRY" 
Then Login should fail 
But Relogin option should be available

Step_3:创建一个step定义文件。创建步骤,右击Annotation包,选择New file,然后输入文件名:Annotation.java,打开文件,填写如下信息到文件,并保存:

      

Annotation.java   

package Annotation; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver;
import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When;

public class Annotation { 
	WebDriver driver = null;

	@Given("^I am on CSDN login page$")
	public void goToCsdn() { 
		driver = new ChromeDriver();
		driver.navigate().to("https://passport.csdn.net/account/login?ref=toolbar");
	} 
 
	@When("^I enter username as \"(.*)\"$")
	public void enterUsername(String arg1) { 
		driver.findElement(By.id("username")).sendKeys(arg1); 
	}
 
	@When ("^I enter password as \"(.*)\"$") 
	public void enterPassword(String arg1) { 
		driver.findElement(By.id("password")).sendKeys(arg1); 
		driver.findElement(By.className("logging")).click(); 
	}
	
	@Then("^Login should fail$")
	public void checkFail() { 
		if(driver.getCurrentUrl().equalsIgnoreCase("http://my.csdn.net/my/mycsdn")){
			System.out.println("Test1 Pass"); 
		} 
		else { 
			System.out.println("Test1 Failed"); 
		} 
		driver.close(); 
	 	}
	
	@Then("^Relogin option should be available$") 
	public void checkRelogin() { 
		if(driver.getCurrentUrl().equalsIgnoreCase("http://my.csdn.net/my/mycsdn")){ 
			System.out.println("Test2 Pass"); } 
		else {
			System.out.println("Test2 Failed"); 
		} 
		driver.close(); 
	 	} 
}

Step_4:创建一个runner 类文件。创建步骤,右击Annotation包,选择New file,然后输入文件名:runTest.java,打开文件,填写如下信息到文件,并保存:   

package Annotation; 
import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 
@RunWith(Cucumber.class) 
@Cucumber.Options(format={"pretty", "html:target/cucumber"}) 
public class runTest {
	
}

     

Step_5:运行test的选项:进入左侧包浏览,选择runTest.java,右击选择“Run as”,在弹出框选择“JUnit test。运行结果如下:

        

运行此类文件时,将观察以下事项:

1.        Csdn在一个新的Chrome Web浏览器实例中打开。

2.        TOM将作为用户名字段的输入传递。

3.        JERRY将作为密码字段的输入传递。

4.        将单击登录。

5.        在登录失败时,浏览器上将显示信息。

6.        在控制台中,您将看到打印的“测试通过”。

7.        步骤结果1.5.将重新执行用户名为“”和密码为“”。

        

本文转载自:http://blog.csdn.net/henni_719/article/details/53608144

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
[每周软件]:Cucumber:Hello World

OSChina 的链接 [Cucumber][1] ruby 的 BDD框架,类似自然语言的DSL,适用于BDD模式和验收测试。 Book [The Rspec Book][2] [The Cucumber Book][3] 安装,Ruby和RubyGems环境就不说了,那就...

jerrytao
2013/01/21
3.8K
0
The Cucumber for Java Book读书笔记[一]

Part 1 Cucumber Fundamentals 总结起来就是在说用户写scenarios ,程序员写实现 Refer to Extreme Programming Explained: Embrace Change [Bec00] Test Driven Development: By Example [......

小紅
2016/03/30
100
0
[每周软件]:Cucumber:Second Day

OSChina 的链接 [Cucumber][1] ruby 的 BDD框架,类似自然语言的DSL,适用于BDD模式和验收测试。 Book [The Rspec Book][2] [The Cucumber Book][3] [1]: http://www.oschina.net/p/cucumber......

jerrytao
2013/01/22
435
0
最棒的 5 款开源 Android/iOS 自动化工具

现今自动化测试在产品测试中占有很重要地位。实现测试的自动化有很多积极的意义,比如尽量缩短测试执行时间,关键发布阶段在更短时间保证更大的测试覆盖,产品开发阶段可靠和重复运行确保不引...

oschina
2015/10/27
7.3K
7
FuncUnit 和 Cucumber —— 前端测试的最佳搭档

这周我花了些时间研究FuncUnit 和Cucumber. 本文中我将说明为啥要联合使用这两个框架及使用它们进行前端测试. Cucumber 这是 Cucumber wiki: Cucumber 可以执行基于文本描述的功能自动化测试...

oschina
2014/07/23
3.3K
4

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部