pytest + yaml 框架 -23.支持步骤中添加局部变量

发布时间 2023-04-13 11:14:38作者: 上海-悠悠

前言

一个用例中会调用多个接口步骤,每个步骤中可能会存在相同的变量名,如登录用户名username,注册用户名usename, 这2个接口中需要使用不同的值。
于是可以在步骤中添加局部变量来解决此问题,局部变量的范围只在当前请求步骤中有效,不会污染全局变量的使用。
此功能实现在v1.2.0 版本上解决

环境准备

v1.2.0 版本解决和优化以下问题
1.断言的时候 None 和 'None' 可以判断是相等,在yaml中可以写null 或者 None, 不区分类型了
2.添加局部变量variables
3.优化request 下的hook 功能
4.其它细节优化

使用示例

以下是示例demo

config:
    name: 步骤变量测试
    variables:
        user: test

test_s1:
    print: ${user}
    validate:
      - eq: ['${user}', test]


test_s2:
    name: 步骤变量优先
    print: ${user}
    variables:
        user: test3
    validate:
      - eq: ['${user}', test3]

test_s3:
    name: 全局变量不受影响
    print: ${user}
    validate:
      - eq: ['${user}', test]

test_s4:
    name: 每个步骤变量是独立的
    variables:
        user: testx
    print: ${user}
    validate:
      - eq: ['${user}', testx]

test_s5:
-
    name: 每个用例中可以有多个步骤变量
    variables:
        user: testq1
    print: ${user}
    validate:
      - eq: ['${user}', testq1]

-
    name: 每个用例中可以有多个步骤变量
    variables:
        user: testq2
    print: ${user}
    validate:
      - eq: ['${user}', testq2]

-
    name: 全局变量不受影响
    print: ${user}
    validate:
      - eq: ['${user}', test]

在request 请求中也可以支持步骤变量的使用

config:
  name: post示例
  variables:
    name: test

teststeps:
-
  name: post 1
  variables:
    name: yoyo
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${name}
      password: "123456"
  validate:
    - eq: [status_code, 200]


-
  name: post 2
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${name}
      password: "123456"
  validate:
    - eq: [status_code, 200]

在上面的实例中,post 1 得到步骤变量里面的 yoyo 值,post 2得到全局变量里面的test