web自动化测试框架-05 创建数据驱动的测试用例,Doc String与Data Table

505 阅读2分钟

系列内容

备注:配合免费视频教程,获取更佳的学习效果!课程链接: ke.qq.com/course/2815…

主要内容

  • Doc String (文本字符串)

  • Data Tables(数据表)

配合免费视频教程,获取更佳的学习效果!课程链接:

https://ke.qq.com/course/281565?tuin=173f40be

前言

使用feature文件会在具体的操作步骤中描述业务,每个步骤一句话,但有时可能一句话不能完整的表述出所有的功能。这个时候需要使用到 Doc String 和 Table 。

  • Doc String(文本字符串)

    在描述操作步骤时,如果需要指定的信息无法放在一行内,可以使用Doc String,也称为多行字符串。DocString用于指定较大的文本。文本应由放在一行的三个并列的双引号 """ 开始(注意是英文的双引号,不是中文的全角双引号):例如常见的发帖场景中可以将帖子的内容放到Doc String 中。

    对应feature文本

    # language: zh-CN
    功能: 发表帖子
    用户登录系统发布帖子
    
      场景: 发布帖子
        假如用户登录系统
        当发布帖子内容并且点击发布按钮      
        """
          知识准备
          环境准备
          
          前端开发的历史演变
          前端MVC框架的兴起
          前后端分离
          全栈工程师
          前端开发的未来
          
          Node 的基本用法
          Restful API
          Express 框架搭建 Web 应用
          
          持续集成
          静态代码检查
          单元测试
          功能测试
          持续集成服务 Travis CI      
        """
        那么应该发布成功
    
    

    在js脚本,会自动把feature文件中的Doc String作为字符串变量传给函数

    When(/^发布帖子内容并且点击发布按钮$/, async function (docString) {
    
        // 函数中的Doc String 会作为变量传给docString.
    
    });
    
    
  • Data Tables

    单个步骤有时需要使用到数组数据或者对象数据,这时可以使用添加Data Tables。在对应的step下面 直接添加| 数据 | 即可。如下:

    对应的文本:

    
    Feature: use table datas
    
      Scenario: table datas
        Given the following people exist:
          | name  | email           |  
          | Jason | jason@email.com |  
          | Joe   | joe@email.com   |  
          | Zark  | zark@email.org  |  
    
    

    在js代码中,Cucumber 对Table数据提供 4 解析方法:

  • 数据中不包含标题

    • hashes() : 返回一个包含每一行数据作为对象的数组(标题作为对象的key)

    • rows(): 返回一个二维数组: 除了第一行数据,其余每一行数据为一个数组

  • 数据中包含标题

    • raw(): 将表单作为二维数组返回

    • rowsHash(): 将每行数据作为实例返回一个对象(第一行为key,第二行为value)

    为更好理解这四种方法,我们可以将数据打印出来对比。

    js代码如下:

    const { Given } = require('cucumber')
    Given(/^the following people exist:$/, async function (table) {
    
        // hashes()
        console.log("hashes:", table.hashes())
        // rows()
        console.log("rows:", table.rows())
    
        // raw()
        console.log('raw:', table.raw())
    
        // rowsHash()
        console.log('rowHash:', table.rowsHash())
    });
    
    

    打印结果:

    hashes: [ { name: 'Jason', email: 'jason@email.com' },  { name: 'Joe', email: 'joe@email.com' },  { name: 'Zark', email: 'zark@email.org' } ]
    
    rows: [ [ 'Jason', 'jason@email.com' ],  [ 'Joe', 'joe@email.com' ],  [ 'Zark', 'zark@email.org' ] ]
    
    raw: [ [ 'name', 'email' ],  [ 'Jason', 'jason@email.com' ],  [ 'Joe', 'joe@email.com' ],  [ 'Zark', 'zark@email.org' ] ]
    
    rowHash: { name: 'email',
      Jason: 'jason@email.com',
      Joe: 'joe@email.com',
      Zark: 'zark@email.org' }
    
    

    table的引入让测试脚本更好的支持数据驱动。在CukeTest中,对table的编辑非常方便,例如,可以通过csv导入数据表:

    以及其他操作如双击编辑数据表,或者导出数据表等等操作。


获取更多信息,可以关注公众号,也可以加QQ群:707467292 进行node.js自动化相关技术交流。