前言
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
命令运行用例
(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
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
执行用例
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