D01_用例中设置变量(variables)

D01_用例中设置变量(variables)

在编写用例的时候,如果一项硬编码的数据,反复多次出现,可以将其提取出来设置为变量,然后分别进行调用,提高用例的灵活度。HttpRunner 支持变量申明(variables)和引用($var)的机制。

如某系统登录页面,其表单代码如下。

编写 YAML 格式的测试用例如下:

  • 表单提交方式为 POST,没有指定enctype属性,即默认为 application/x-www-form-urlencoded,所以提交的请求实体直接写入 data 关键字下。
  • 系统登录的用户名和密码: admin / admin
- config:
    name: 用例 - 测试进销存系统登录

- test:
    name: 步骤 - 完成登录操作

    request:
      url: http://localhost/myweb/jxc/index.asp?action=login
      method: POST
      data:
        username: admin
        pwd: admin

问题:以上用例中,用户名和密码直接写入请求实体 data 下,类似硬编码,如果以其他用户身份登录系统,或者其他补助也用到该用户名的时候,则每次都要修改用例文件,明显缺乏灵活性,所以我们将用户名和密码提取出来,设置为变量,做到一次修改多次使用。而且后面我们可以将其再存储到环境变量文件(.env)中,可以多个测试用例共用一套变量。

解决:将用户名和密码的输入存入变量中:

  • 存入当前步骤的区间中。该变量的作用域只能在当前步骤以内,相当于局部变量。
  • 存入config全局区域中。该变量的作用域为整个测试用例中,相当于全局变量。

变量的定义和使用:

  • 变量定义放到 variables 关键字下,可以同时定义多个变量
  • 定义变量方法: <变量名>: <变量值>, 如, p_username: admin
  • 使用变量方法: $<变量名>, 即:变量名前加上一个“$”符号。如, $p_username

案例1: 变量定义于测试步骤(test)中

- config:
    name: 用例 - 测试进销存系统登录

- test:
    name: 步骤 - 完成登录操作

    # 相当于定义局部变量,只能在当前步骤中被使用
    variables:
      p_username: admin
      p_password: admin

    request:
      url: http://localhost/myweb/jxc/index.asp?action=login
      method: POST
      data:
        # 引用变量:$<变量名>
        username: $p_username
        pwd: $p_password

    validate:
      # 断言,如果登录成功,登录后页面的HTML中会出现 “topFrame” 字符串  
      # contains: 包含判断,判断预期结果是否被包含在实际结果中
      #   content:实际结果,请求后返回的响应实体内容,即登录后打开的页面 HTML代码
      #   topFrame:预期结果,如果返回正确的页面,其 HTML 中会包含此字符串        
      - contains: [content, topFrame]

案例2:变量定义于 config 中

- config:
    name: 用例 - 测试进销存系统登录
    
    # 相当于全局变量,在当前测试用例的所有步骤中都可以被使用
    variables:
      p_username: admin
      p_password: admin

- test:
    name: 步骤 - 完成登录操作

    request:
      url: http://localhost/myweb/jxc/index.asp?action=login
      method: POST
      data:
        # 在用例文件的任何位置都可以引用变量:$<变量名>  
        username: $p_username
        pwd: $p_password

    validate:
      - contains: [content, topFrame]        

如果 config 区域里面的变量和 test 区域里面的变量有冲突时会怎样呢?

实验1:变量同时定义于 config 和 测试步骤 中

  • config 区域:使用 “正确” 的用户名和密码
  • test 区域:使用 “错误” 的用户名和密码
  • 实验结果: 运行成功,说明 config 区域的变量会替换 test 区域的同名变量
- config:
    name: 用例 - 测试进销存系统登录

    variables:
      # 在 config 区域,变量中使用 “正确” 的用户名和密码
      p_username: admin
      p_password: admin
    

- test:
    name: 步骤 - 完成登录操作

    variables:
      # 在步骤区域, 变量中使用 “错误” 的用户名和密码
      p_username: admin2
      p_password: admin2

    request:
      url: http://localhost/myweb/jxc/index.asp?action=login
      method: POST
      data:
        username: $p_username
        pwd: $p_password
        
    validate:
      - contains: [content, topFrame]  

实验2:变量同时定义于 config 和 测试步骤 中

  • config 区域:使用 “错误” 的用户名和密码
  • test 区域:使用 “正确” 的用户名和密码
  • 实验结果: 运行失败,证明: config 区域的变量优先级 > test 区域的同名变量
- config:
    name: 用例 - 测试进销存系统登录

    variables:
      # 在 config 区域,变量中使用 “正确” 的用户名和密码
      p_username: admin2
      p_password: admin2
    

- test:
    name: 步骤 - 完成登录操作

    variables:
      # 在步骤区域, 变量中使用 “错误” 的用户名和密码
      p_username: admin
      p_password: admin

    request:
      url: http://localhost/myweb/jxc/index.asp?action=login
      method: POST
      data:
        username: $p_username
        pwd: $p_password
        
    validate:
      - contains: [content, topFrame]  

发布了30 篇原创文章 · 获赞 0 · 访问量 232

猜你喜欢

转载自blog.csdn.net/weixin_42007999/article/details/105717872