行为驱动:Cucumber + Selenium + Java(三) - 使用标签实现测试分组
在上一篇中,我们写出了Selenium + Cucumber + Java环境下的第一个BDD自动化测试用例,这一篇我们说说怎么用标签对用例进行分组。
3.1 Cucumber标签
实际工作中,我们的自动化用例库可能会变得非常庞大。如果只是按照先前的方式去执行,则每一次都会执行全部用例,真实使用时这是不现实的。
Cucumber给我们提供一种用标签来组织自动化用例的办法,通过分别在feature和scenario级别上定义一个或多个标签,然后再在runner类里定义要执行的标签情况,就可以达到测试分组的目的。
标签以“@”开头。在“@”之后,可以使用任何相关文字来定义标签。
根据实际的工作场景,我们可以定义出各种各样的标签,因为标签的起名是自由的,比如:
- 根据测试活动的不同可以定义:@SanityTest @RegressionTest @FunctionalTest
- 根据测试用例的不同优先级可以定义:@P1 @P2 @P3
- 根据测试的功能模块来定义:@UserManagement @ProductDetail @CheckOutFlow
等等等等,以上的标签名字都是自定义的。很好理解,比如打了@SanityTest标签的用例,就是一个做完整性测试的用例。
一个feature或者scenario都可以有多个标签,而由于scenario和feature之间又有一定的从属关系,可以理解为feature所拥有的标签都会被他内部的scenario继承。
3.2 Cucumber标签实例
我们在features文件夹下面,新建一个叫TestTags.feature的文件。
文件里写入以下gherkin代码:
@AddToBasket
Feature: Test JD add item into basket
Description @JD @SanityTest @FunctionalTest @P1
Scenario: Add first product into basket from PDP
Given I navigate to JD site
When I search for a keyword
And I pick the first item from PLP
And I add that particular item into basket
Then That particular item is added @JD @FunctionalTest @P2
Scenario: Add secondary product into basket from PDP
Given I navigate to JD site
When I search for a keyword
And I pick the second item from PLP
And I add that particular item into basket
Then That particular item is added
在这个特性文件里,我们定义了一个特性,包括两个场景。可以看到Feature这个层级有一个@AddToBasket的标签,而场景1和2之间的区别是,场景1属于@SanityTest并且优先级为@P1。
3.3 通过runner类实现分组执行
接下来只需要在runner类中,将标签进行一个选择就可以了。
比如,我们想要让有@SanityTest标签的用例进行执行,那么我们的runner类应该如下编写:
package CucumberRunner; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber; @RunWith(Cucumber.class)
@CucumberOptions(features="Features",glue="stepDefinitions",tags="@SanityTest") public class CucumberRunner { }
我们再通过这个runner类去执行cucumber用例的时候,就会只执行有相应标签的scenario。
Runner类中选择标签也是可以多选,而且还可以选择排除某些标签。
比如说,tags="@SanityTest, @P1"就是执行所有拥有这两个标签的用例。(注意这里是‘或’关系)。
又比如,tags="@FunctionalTest, ~@P2"就是执行所有FunctionalTest并且不为P2的用例。~符号表示排除某个标签。
到此为止,通过对features和scenario打标签,然后通过runner选择标签去执行,我们就可以实现测试分组的目的。
下一篇我们来实现cucumber用例的参数化。
行为驱动:Cucumber + Selenium + Java(三) - 使用标签实现测试分组的更多相关文章
- 行为驱动:Cucumber + Selenium + Java(一) - 环境搭建
1.1 什么是行为驱动测试 说起行为驱动,相信很多人听说过. 行为驱动开发-BDD(Behavior Driven Development)是一个诞生于2003年的软件开发理念.其关键思想在于通过与利 ...
- 行为驱动:Cucumber + Selenium + Java(四) - 实现测试用例的参数化
在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的使用Tags对测试用例分组的实现方法,这一篇我们用数据表格来实现测试用例参数化. 4.1 什么是用例参数化 实际测试中 ...
- 行为驱动:Cucumber + Selenium + Java(二) - 第一个测试
在上一篇中,我们搭建好了Selenium + Cucumber + Java的自动化测试环境,这一篇我们就赶紧开始编写我们的第一个BDD测试用例. 2.1 创建features 我们在新建的java项 ...
- 行为驱动:Cucumber + Selenium + Java(一) - Cucumber简单操作实例
场景(Scenarios) 场景是Cucumber结构的核心之一.每个场景都以关键字“Scenario:”(或本地化一)开头,后面是可选的场景标题.每个Feature可以有一个或多个场景,每个场景由一 ...
- 行为驱动:Cucumber + Selenium + Java(五) - 使用maven来实现cucumber测试和报告
在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的测试用例参数化/数据驱动,这一篇我们来使用maven去搭建cucumber框架以及实现测试报告. 5.1 为什么要用m ...
- 行为驱动:Cucumber + Selenium + Java(二) - extentreports 测试报告+jenkins持续集成
1.extentreports 测试报告 pom文件 <dependency> <groupId>com.vimalselvam</groupId> <art ...
- Selenium+Java(四)Selenium Xpath元素定位
前言 关于Selenium元素定位,这是最后一篇博客. Xpath定位可以实现的功能 Selenium+Java(三)Selenium元素定位中讲的定位方式也可以实现,具体要用那种定位方式要根据自己的 ...
- Selenium+Java(一)Selenium基础环境配置
前言 Selenium在Java中是以Jar包的形式存在,如要使用Java编写Selenium自动化测试用例,需要导入Jar包. selenium需要的Jar包下载地址: http://seleniu ...
- java把html标签字符转普通字符(反转换成html标签)(摘抄)
下面是java把html标签字符转换,我用了spring 包中的 org.springframework.web.util.HtmlUtils 了解了源代码并且进步了使用,发现写得真不错...同时也可 ...
随机推荐
- MongoDb安装和快速入门
1.Mongodb安装 2.mongodb的增删改查 3.MongoDB数据类型 4.Mongodb $关键字 $修改器 5.MongoDB 之 "$" 的奇妙用法 6.Mongo ...
- 2018-2019-2 网络对抗技术 20162329 Exp5 MSF基础应用
目录 Exp5 MSF基础应用 一.基础问题回答 二.攻击系统 ms08_067攻击(成功) 三.攻击浏览器 ms11_050_mshtml_cobjectelement(Win7失败) 手机浏览器攻 ...
- html5 input输入实时检测以及延时优化
有个项目是,这么个情况,输入框,实时监测输入,触发请求. 第一想法是input 上的onchange()方法,试了一下,不好用,是值等更改确认了,才会触发,不即时. 上网查了一下, $("# ...
- C++进阶:新人易入的那些坑 --1.常量、常指针和指针常量
声明:以下内容B站/Youtube学习笔记,https://www.youtube.com/user/BoQianTheProgrammer/ Advanced C++. /* why use con ...
- mysql命名规范
1.数据库表命名规范: (1)表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母大写. (2)数据库表名应该有意义,并且易于理解,最好使用可以 ...
- php GD库快速消耗CPU资源漏洞 CVE-2018-5711测试
漏洞说明: 用一张GIF图片就可导致服务器发生崩溃直至宕机,在现实中非常容易利用. 影响版本: PHP 5 < 5.6.33 PHP 7.0 < 7.0.27 PHP 7.1 < 7 ...
- SVM支持向量机 详解(含公式推导)
关于SVM的内容,这三位老哥写的都挺好的,内容是互补的,结合他们三位的一起看,就可以依次推导出SVM得公式了. https://www.cnblogs.com/steven-yang/p/565836 ...
- 单点登录实现原理(SSO)
简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘 ...
- python语法_模块
方便调用的分组函数文件,一个py模块就是一个模块,模块分三类 python标准库 第三方模块 应程序自定义模块 模块的掉用: 可以把多个功能(函数)包含在一个模块文件里,调用时直接使用import 就 ...
- 限制oracle某用户仅能从某IP登录
system用户创建触发器,登录后触发检查 CREATE OR REPLACE TRIGGER system.check_ip_addresses_test AFTER logon ON DATABA ...