上篇文件已经简单介绍了requests的使用方法,本文将深入探讨如何在Python接口自动化测试中采用YAML文件进行数据驱动设计,以提高测试用例的可维护性和复用性。
1、引言
数据驱动测试是一种流行的测试策略,其核心在于将测试逻辑与测试数据分离,使得测试逻辑可以独立于具体的数据集运行。YAML作为一种直观、易于阅读的数据序列化格式,非常适合用来存储和管理接口自动化测试所需的复杂数据结构。
2、YAML文件驱动测试数据
我们可以采用YAML文件来存储和加载接口测试的各种场景数据,YAML文件的结构清晰,易于编写和理解【 关于YAML文件的数据格式要求请参考:http://t.csdnimg.cn/KVB1j】。例如:我们可以在data目录下创建一个login.yml文件,用于存放登录接口的测试数据
代码如下:
-
name: 登录
request:
url: 'http://xxx/auth/login'
method: post
headers:
Content-Type: application/json
json: {
"username": "xxx",
"password": "xxx"
}
validate: Null
3、封装读取YAML文件方法
接下来,我们可以使用PyYAML库解析这些YAML文件并执行测试,现在我们在common目录下创建个yaml_util.py文件,用于封装读取yml文件的方法,代码如下:
注意:此处需要安装PyYAML库
import os
import yaml
class YamlUtil:
# 读取data下的yml用例文件
def read_testcases_yaml(self, yaml_name):
with open(os.getcwd() + "./data/" + yaml_name, mode='r', encoding='utf-8') as f:
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value
4、实现数据驱动
最后,我们稍微改动下test_login.py的代码,先使用@pytest.mark.parametrize参数化用例数据,再用case_info来接收login.yml的测试用例数据,然后分别获取请求地址、请求方式、请求参数的值进行请求:
import pytest
import requests
from common.yaml_util import YamlUtil
class TestLogin:
@pytest.mark.parametrize('case_info', YamlUtil().read_testcases_yaml('login.yml'))
def test_login(self, case_info):
print('case_info:', case_info)
url = case_info['request']['url']
method = case_info['request']['method']
json = case_info['request']['json']
# requests.request请求
res = requests.request(url=url, method=method, json=json)
# 获取返回结果数据,文本格式接收
response = res.text
# 打印返回结果到控制台
print('返回结果:', response)
请求结果:
5、执行多条用例
上面我们在login.yml文件中已经写好了一条用例,现在我们只要再多复制一条并修改下参数值就可以了,执行后就可以看到已经多了一条测试结果,示例如下:
执行结果:
因为这里没有做断言处理,所以两次执行都是通过的,这是正常结果。
6、总结
通过在Python接口自动化测试中引入YAML文件进行数据驱动,不仅使测试用例的组织和维护变得更加简洁和灵活,而且方便团队成员理解和协作。此外,由于YAML支持嵌套结构,对于包含多个层级或复杂参数的接口测试尤为适用。在实际项目中,可以进一步扩展此方案,加入更丰富的断言逻辑,以及详尽的日志记录和错误报告机制,以提升测试的质量和效率。