pytest + yaml 框架 -26.export 导出全局变量,支持跨yaml文件用例传参了!

2023-08-22 11:16:09 浏览数 (2)

前言

v1.2.3 版本新功能,支持跨yaml文件用例传参了! 1.解决用例中,hooks单独写request 报错问题(在已发布的公开版本v1.2.0已经解决了) 2.内置to_json() 函数,字典转 json 3.export 导出功能, config 和 case 中都能添加。简单来说,就是test_a.yml 执行完成后,提取了变量x, 在后面的test_b.yml 和 test_c.yml 中可以直接引用变量x了。

备注:从v1.2.0 以后新版本不再公开,新功能内部 VIP 学员可以使用,公开版本仅解决bug, 不提供新功能了。

extrat 提取变量

在单个测试yaml 用例文件中,可以支持写多个用例,并且extract 提取的变量,在整个yaml文件中都可以直接引用。

test_ext3.yml

代码语言:javascript复制
config:
  name: 提取变量
  variables:
    name: msg

test_ext1:
  name: 提取email
  print: ${name}
  extract:
    email: 123@qq.com

test_ext2:
  name: 引用extract 变量
  print: ${email}

test_ext3:
-
  name: 步骤1
  print: ${email}

-
  name: 步骤2
  print: ${email}

使用pytest test_ext3.yml 命令运行用例

代码语言:javascript复制
(venv) D:demo>pytest test_ext3.yml
=========================== test session starts ==================================================
platform win32 -- Python 3.8.5, pytest-7.3.0, pluggy-1.0.0
rootdir: D:demountitled6_demo_test
configfile: pytest.ini
plugins: allure-pytest-2.13.1, Faker-18.4.0, yaml-yoyo-1.2.3
collecting ... 
----------------- live log collection ---------------------------
2023-05-14 10:15:22 [INFO]: --------[{'name': '提取email', 'print': '${name}', 'extract': {'email': '123@qq.com'}}]
2023-05-14 10:15:22 [INFO]: --------[{'name': '引用extract 变量', 'print': '${email}'}]
2023-05-14 10:15:22 [INFO]: --------[{'name': '步骤1', 'print': '${email}'}, {'name': '步骤2', 'print': '${email}'}]
collected 3 items                                                                                                        

test_extract/test_ext3.yml::test_ext1
------------------- live log call ------------------------
2023-05-14 10:15:22 [INFO]: 执行文件-> test_ext3.yml
2023-05-14 10:15:22 [INFO]: base_url-> http://124.70.221.221:8201
2023-05-14 10:15:22 [INFO]: config variables-> {'name': 'msg'}
2023-05-14 10:15:22 [INFO]: 运行用例-> test_ext1
2023-05-14 10:15:22 [INFO]: 取值表达式 name
2023-05-14 10:15:22 [INFO]: 取值结果:msg, <class 'str'>
2023-05-14 10:15:22 [INFO]: extract  提取变量-> {'email': '123@qq.com'}
2023-05-14 10:15:22 [INFO]: validate 校验内容-> []
2023-05-14 10:15:22 [INFO]: export 导出全局变量:{}
PASSED                                                                                                             [ 33%]
test_extract/test_ext3.yml::test_ext2
------------------- live log call -------------------
2023-05-14 10:15:22 [INFO]: 执行文件-> test_ext3.yml
2023-05-14 10:15:22 [INFO]: base_url-> http://124.70.221.221:8201
2023-05-14 10:15:22 [INFO]: config variables-> {'name': 'msg', 'email': '123@qq.com'}
2023-05-14 10:15:22 [INFO]: 运行用例-> test_ext2
2023-05-14 10:15:22 [INFO]: 取值表达式 email
2023-05-14 10:15:22 [INFO]: 取值结果:123@qq.com, <class 'str'>
2023-05-14 10:15:22 [INFO]: validate 校验内容-> []
2023-05-14 10:15:22 [INFO]: export 导出全局变量:{}
PASSED                                                                   [ 66%]
test_extract/test_ext3.yml::test_ext3
------------- live log call ------------
2023-05-14 10:15:22 [INFO]: 执行文件-> test_ext3.yml
2023-05-14 10:15:22 [INFO]: base_url-> http://124.70.221.221:8201
2023-05-14 10:15:22 [INFO]: config variables-> {'name': 'msg', 'email': '123@qq.com'}
2023-05-14 10:15:22 [INFO]: 运行用例-> test_ext3
2023-05-14 10:15:22 [INFO]: 取值表达式 email
2023-05-14 10:15:22 [INFO]: 取值结果:123@qq.com, <class 'str'>
2023-05-14 10:15:22 [INFO]: validate 校验内容-> []
2023-05-14 10:15:22 [INFO]: 取值表达式 email
2023-05-14 10:15:22 [INFO]: 取值结果:123@qq.com, <class 'str'>
2023-05-14 10:15:22 [INFO]: validate 校验内容-> []
2023-05-14 10:15:22 [INFO]: export 导出全局变量:{}
PASSED                                                                     [100%]

=============== 3 passed in 0.38s ==

export 导出全局变量

test_ext3.yml 用例中提取的email 变量作用范围仅在test_ext3.yml 中使用有效,无法跨yaml 文件引用。 如果想后面的用例,继续使用提取的email 变量, 需使用export 关键字,提升变量的级别为session会话级别,也就是真正的全局变量。 export 关键字可以写到config 也可以写到用例中,格式必须是list 类型。

test_extract/test_ext3.yml

代码语言:javascript复制
config:
  name: 提取变量
  variables:
    name: msg
  export:
    - email

test_ext1:
  name: 提取email
  print: ${name}
  extract:
    email: 123@qq.com

在接下来的test_ext4.yml 和其它用例可以直接引用 ${export} test_extract/test_ext4.yml

代码语言:javascript复制
config:
  name: 提取变量

test_ext5:
-
  name: 步骤1
  print: ${email}

-
  name: 步骤2
  print: ${email}

test_ext6:
  name: 6666
  print: ${email}

前提条件是 test_ext3.yml 用例要先执行,pytest 在执行的时候按用例名称顺序执行, 可以放到test_extract 同一个文件夹下一起执行

代码语言:javascript复制
pytest test_extract

执行后部分log日志

代码语言:javascript复制
test_extract/test_ext4.yml::test_ext6
----------------- live log call ------------------------------
2023-05-14 10:22:07 [INFO]: 执行文件-> test_ext4.yml
2023-05-14 10:22:07 [INFO]: base_url-> http://124.70.221.221:8201
2023-05-14 10:22:07 [INFO]: config variables-> {}
2023-05-14 10:22:07 [INFO]: 运行用例-> test_ext6
2023-05-14 10:22:07 [INFO]: 取值表达式 email
2023-05-14 10:22:07 [INFO]: 取值结果:123@qq.com, <class 'str'>
2023-05-14 10:22:07 [INFO]: validate 校验内容-> []
2023-05-14 10:22:07 [INFO]: export 导出全局变量:{'email': '123@qq.com'}
PASSED

export 关键字也可以在用例中使用,跟config 中使用效果引用,如果2个地方都有,会自动合并 test_extract/test_ext3.yml

代码语言:javascript复制
config:
  name: 提取变量
  variables:
    name: msg

test_ext1:
  name: 提取email
  print: ${name}
  extract:
    email: 123@qq.com
  export:
    - email

变量优先级

在整个用例中有 config 配置文件中设置的env 环境变量,export 导出的session 变量,yaml 文件中的config 模块变量,用例中的variables 局部变量。 整体优先级是:用例中的variables 局部变量 > extract 提取变量 > yaml 文件中的config 模块变量 > export 导出的session 变量 > 配置文件中设置的env 环境变量

test_extract/test_ext5.yml

代码语言:javascript复制
config:
  name: 提取变量

test_ext7:
  name: 6666
  variables:
    email: yoyo@qq.com
  print: ${email}

test_ext8:
  name: 6666
  print: ${email}

pytest test_extract执行用例

代码语言:javascript复制
test_extract/test_ext5.yml::test_ext7
---------------------- live log call ------------------
2023-05-14 10:34:16 [INFO]: 执行文件-> test_ext5.yml
2023-05-14 10:34:16 [INFO]: base_url-> http://124.70.221.221:8201
2023-05-14 10:34:16 [INFO]: config variables-> {}
2023-05-14 10:34:16 [INFO]: 运行用例-> test_ext7
2023-05-14 10:34:16 [INFO]: 取值表达式 email
2023-05-14 10:34:16 [INFO]: 取值结果:yoyo@qq.com, <class 'str'>
2023-05-14 10:34:16 [INFO]: validate 校验内容-> []
2023-05-14 10:34:16 [INFO]: export 导出全局变量:{'email': '123@qq.com'}
PASSED                                                  [ 54%]
test_extract/test_ext5.yml::test_ext8
------------------------ live log call ---------------------
2023-05-14 10:34:16 [INFO]: 执行文件-> test_ext5.yml
2023-05-14 10:34:16 [INFO]: base_url-> http://124.70.221.221:8201
2023-05-14 10:34:16 [INFO]: config variables-> {}
2023-05-14 10:34:16 [INFO]: 运行用例-> test_ext8
2023-05-14 10:34:16 [INFO]: 取值表达式 email
2023-05-14 10:34:16 [INFO]: 取值结果:123@qq.com, <class 'str'>
2023-05-14 10:34:16 [INFO]: validate 校验内容-> []
2023-05-14 10:34:16 [INFO]: export 导出全局变量:{'email': '123@qq.com'}
PASSED

可以看到 test_ext7 用例引用局部变量值yoyo@qq.com, test_ext8 引用

export 导出的 session 会话变量值123@qq.com

0 人点赞