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
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!