在上一篇中,我们写出了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(三) - 使用标签实现测试分组的更多相关文章

  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测试用例. 2.1 创建features 我们在新建的java项 ...

  4. 行为驱动:Cucumber + Selenium + Java(一) - Cucumber简单操作实例

    场景(Scenarios) 场景是Cucumber结构的核心之一.每个场景都以关键字“Scenario:”(或本地化一)开头,后面是可选的场景标题.每个Feature可以有一个或多个场景,每个场景由一 ...

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

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

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

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

  7. Selenium+Java(四)Selenium Xpath元素定位

    前言 关于Selenium元素定位,这是最后一篇博客. Xpath定位可以实现的功能 Selenium+Java(三)Selenium元素定位中讲的定位方式也可以实现,具体要用那种定位方式要根据自己的 ...

  8. Selenium+Java(一)Selenium基础环境配置

    前言 Selenium在Java中是以Jar包的形式存在,如要使用Java编写Selenium自动化测试用例,需要导入Jar包. selenium需要的Jar包下载地址: http://seleniu ...

  9. java把html标签字符转普通字符(反转换成html标签)(摘抄)

    下面是java把html标签字符转换,我用了spring 包中的 org.springframework.web.util.HtmlUtils 了解了源代码并且进步了使用,发现写得真不错...同时也可 ...

随机推荐

  1. Pycharm下同一目录的py文件不能相互调用的原因分析

    1.首先确保所在目录是Python Package而不是一般的New Stratch File Python Package下有__init___.py或自己建空的__init___.py 2.pyc ...

  2. 计蒜客 买书 dfs

    题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...

  3. 爬虫之requests模块

    requests模块 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的 ...

  4. LOJ.6060.[2017山东一轮集训Day1/SDWC2018Day1]Set(线性基)

    LOJ BZOJ 明明做过一道(最初思路)比较类似的题啊,怎么还是一点思路没有. 记所有元素的异或和为\(s\),那么\(x_1+x_2=x_1+x_1\ ^{\wedge}s\). \(s\)是确定 ...

  5. Android中View的绘制流程(专题讲解)

    Android中的UI视图有两种方式实现:.xml文件(实现代码和UI的分离)和代码实现. Android的UI框架基本概念: 1. Activity:基本的页面单元,Activity包含一个Wind ...

  6. linux的一些基础命令

    Linux是基于Unix的开源免费的操作系统,是部署服务器的很好选择. 系统:win10 工具:vm虚拟机+Xshell/CRT  虚拟机的系统为linux centos 7 首先看一下linux的基 ...

  7. Http_4个新的http状态码:428、429、431、511

    1.428 Precondition Required (要求先决条件) 先决条件是客户端发送 HTTP 请求时,必须要满足的一些预设条件.一个好的例子就是 If-None-Match 头,经常用在 ...

  8. gridlayout代码注释

    <div class="wrapper"> //定义一节或者一部分区域,它的css样式对应的css中class选择器的wrapper <div class=&qu ...

  9. 请问浏览器访问www.baidu.com经历了怎样的过程?

    1.查找浏览器缓存 首先会查找浏览器缓存,浏览器会保存一段时间你之前访问过的网址的DNS信息,不同的浏览器保存的时长不等. 2.查找系统缓存 如果上面的步骤没有找到对应的DNS信息,这个时候浏览器会尝 ...

  10. React state和props使用场景

    一个组件的显示状态可以由内部状态state.外部参数props所决定. props: 1.props 是从外部传进组件的参数,主要是父组件向子组件传递数据. 2.props 对于使用它的组件来说是只读 ...