• 行为驱动:Cucumber + Selenium + Java(三)


    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选择标签去执行,我们就可以实现测试分组的目的。

  • 相关阅读:
    『高性能模型』轻量级网络ShuffleNet_v1及v2
    『计算机视觉』物体检测之RefineDet系列
    『计算机视觉』目标检测前沿及回顾(2018)
    『高性能模型』轻量级网络MobileNet_v2
    『流畅的Python』第14章:可迭代的对象、迭代器和生成器
    『流畅的Python』第12章:继承的优缺点
    『关键点检测』CPN:Cascaded Pyramid Network for Multi-Person Pose Estimation
    『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
    『计算机视觉』Mask-RCNN_训练网络其三:训练Model
    『计算机视觉』mini深度学习框架实现
  • 原文地址:https://www.cnblogs.com/dayu2019/p/11539995.html
Copyright © 2020-2023  润新知