pytest + yaml 框架 - yaml 用例规范与全部关键字总结
v1.4.4 版本新增对yaml 用例格式校验,不合法的用例格式不会被执行,避免出现用例格式不合法导致的报错。
全部关键字总结
config 中可用关键字
| 关键字 | 可支持类型 | 功能说明 |
|---|---|---|
| name | 可选 str | 没什么用,仅描述当前yaml 用例的名称 |
| base_url | 可选 str, 支持格式:http://、https://、ws://、wss:// | 当前yaml用例公共环境地址 |
| variables | 可选 dict | 声明当前yaml文件公共变量 |
| fixtures | 可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”] | 当前yaml文件公共fixtures |
| parameters | 可选,dict or list or 引用外部文件 | 模块级别参数化 |
| allure | 可选,dict 描述用例allure报告 | 当前yaml文件公共allure描述 |
| mark | 可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”] | 当前yaml文件每个用例加mark标记 |
| hooks | 可选,dict 格式:{"request": ["x"], "response": ["y"]} | 当前yaml文件每个用例都加钩子 |
| export | 可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”] | 变量提升全局,跨yaml文件引用 |
用例中可使用的关键字
| 关键字 | 可支持类型 | 功能说明 |
|---|---|---|
| name | 可选 str | 用例步骤描述,在allure报告中体现 |
| variables | 可选 dict | 声明当前用例局部变量 |
| fixtures | 可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”] | 当前用例调用的fixtures |
| parameters | 可选,dict or list or $p{}引用外部文件或外部数据 | 当前用例级别参数化 |
| allure | 可选,dict 描述用例allure报告 | 当前用例allure报告描述 |
| mark | 可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”] | 当前用例加mark标记 |
| 可选,str | 打印内容 | |
| sleep | 可选,int or float | sleep 休眠时间 |
| skip | 可选,str | 跳过用例,添加描述 |
| skipif | 可选,str | 表达式为真跳过用例 |
| request | 可选,dict | 发送http请求参数 |
| api | 可选,str | 用例分层,引用api层 |
| extract | 可选,dict | 提取结果 |
| validate | 可选, List[dict] | 校验结果 |
| export | 可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”] | 变量提升全局,跨yaml文件引用 |
websoket 协议2个关键字
| 关键字 | 可支持类型 | 功能说明 |
|---|---|---|
| ws | 可选 dict | 连接服务参数 |
| send | 可选 str or dict | 发送消息内容 |
API 层接口描述关键字,只有3个
| 关键字 | 可支持类型 | 功能说明 |
|---|---|---|
| name | 可选 str | 用例步骤描述,在allure报告中体现 |
| request | 可选,dict | 发送http请求参数 |
| validate | 可选, List[dict] | 校验结果 |
yaml 用例格式规范
一个yaml 文件中可以支持多个用例, 用例可以是一个步骤也可以是多个步骤。
-
config: -
name: demo -
test_1: -
name: 用例1 -
print: hello 11111 -
用例是多个步骤2: -
- -
name: get -
request: -
method: GET -
url: http://httpbin.org/get -
validate: -
- eq: [status_code, 200] -
- -
name: post -
request: -
method: POST -
url: http://httpbin.org/post -
json: -
username: test -
password: "123456" -
validate: -
- eq: [status_code, 200]
用例分层
API 层只做接口的描述,一般放到项目根目录api目录下
api/login.yaml 示例
-
name: post -
request: -
method: POST -
url: http://httpbin.org/post -
json: -
username: ${username} -
password: "123456" -
validate: -
- eq: [status_code, 200]
用例层通过api 关键字导入需要的API,导入的路径是相对路径,需根据项目的根目录去导入。
如果执行过程中代码无法识别哪个是项目根目录,最好在项目的根目录下放一个pytest.ini 文件,pytest会以pytest.ini 文件所在的目录为项目根目录。
比如我的项目结构是这样的
-
├─api -
└─ login.yml -
├─testcase -
└─ test_login.yml -
└─conftest.py -
└─pytest.ini
那么不管用例文件test_*.yml在哪个目录,都是以项目根目录去导入API 的yaml文件
-
config: -
name: login case -
base_url: http://127.0.0.0:1 -
variables: -
username: "test123" -
password: "123456" -
test_case: -
- -
name: step login1 -
api: api/login.yml -
extract: -
url: body.url -
validate: -
- eq: [status_code, 200] -
- eq: [ok, true] -
- -
name: step login2 -
api: api/login.yml
运行用例是在项目根目录去执行 pytest 运行
pytest testcase
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

更多推荐

所有评论(0)