前言
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 文件中可以支持多个用例, 用例可以是一个步骤也可以是多个步骤。
代码语言:javascript复制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 示例
代码语言:javascript复制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 文件所在的目录为项目根目录。 比如我的项目结构是这样的
代码语言:javascript复制├─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 运行
代码语言:javascript复制pytest testcase