为什么选择yaml
-
- 方便在字典和yaml之间切换
-
- yaml拥有多种数据类型
yaml的主要作用
-
- 用于配置文件
-
- 用于编写用例
YAML数据组成
-
- 对象,通过字典来表示, key:(空格) value
-
- 数组,通过列表来表示,通过一组对齐的-(横线)表示
- 2.1 基本数据类型
yaml读写方式
命令行安装包 pip install pyyaml
YAML规则
name: 获取验证码
request:
method: post
url: https://api.education.ocean.com/get
data:
type: 2
mobile: 18888888888
configCode: YUAN
headers: null
validate: null
DDT数据驱动
数据驱动的目的: 一个接口由多个用例, 使用数据驱动可以一次性执行多条同一接口的用例
# 方法
@pytest.mark.parametize(args_name, args_value)
args_name: 参数名,自定义
args_value: 只有两种数据类型,要么时list,要么是tuple
常见用法
@pytest.mark.parametrize("caseInfo", ["乔恩", "安迪"])
@pytest.mark.parametrize("caseInfo", ("乔恩", "安迪"))
@pytest.mark.parametrize("caseInfo", [{"乔恩": 12},{"安迪": 13}])
解包用法
@pytest.mark.parametrize("name, age", [["乔恩", 12],[ "安迪", 13]])
封装读取yaml用例的方法
def read_case_yaml(case_path):
"""
:param case_path: yaml文件路径
:return: 返回的是python数据类型的数据
"""
with open(case_path, encoding="utf-8") as f:
result = yaml.load(stream=f, Loader=yaml.FullLoader)
return result
yaml测试用例实例
-
- 一个接口对应一个yaml文件,文件中写入接口请求的字段数据, 这里我给了两个用例
-
name: 获取手机号验证码1-post请求
request:
method: post
url: http://api.education.test.bedoke.com/getMobileCode
data:
type: 2
mobile: 18888888888
configCode: YUAN
headers:
Content-Type: application/json
validate: null
-
name: 获取手机号验证码2-get请求
request:
method: get
url: http://api.education.test.bedoke.com/getMobileCode
data:
type: 2
mobile: 19999999999
configCode: YUAN
headers:
Content-Type: application/json
validate: null
在python中进行调用, 利用之前封装的read_case_yaml方法
import pytest
from common.request_util import RequestUtil
from common.yaml_util import write_yaml, read_case_yaml
class Test():
@pytest.mark.parametrize("caseInfo", read_case_yaml("./testcase/test_get_token.yaml"))
def test_api(self, caseInfo):
print(caseInfo, type(caseInfo))
name = caseInfo["name"]
method = caseInfo["request"]["method"]
urls = caseInfo["request"]["url"]
data = caseInfo["request"]["data"]
headers = caseInfo["request"]["headers"]
validate = caseInfo["validate"]
res = RequestUtil().all_send_requests(method=method, url=urls, data=data, headers=headers)
result = res.json()
if "data" in result:
write_yaml({"msg": res.json()["msg"]})