Python接口自动化测试:实现数据与代码分离的三步法
本文详解Python接口自动化测试中数据与代码分离的实现方法。通过封装os模块获取路径、使用pyyaml读取YML文件以及Pytest参数化调用,将测试数据独立存放。文章提供完整代码示例,展示如何构建可维护的自动化测试工程结构,提升测试用例的复用性与管理效率。

在Python接口自动化测试项目中,common目录通常用于存放整个项目公共使用的封装方法。
从工程目录结构上可以清晰地看到这种区分。
datas目录专门用于存放测试数据,通常采用yml文件格式。
cases目录则专门集中存放具体的测试用例文件。
实现数据分离的第一步是确定工程项目路径。
# -*- encoding: utf-8 -*-
"""
@__Software__: PyCharm
@__File__: osPath.py
@__Date__: 2021/6/14 21:08
"""
import os
# 获取项目的根目录,apiTest层
FILE = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
# 获取存放测试数据的文件夹
DATAS = os.path.join(FILE, 'datas')
print(DATAS)
F:\project_gitee\Test\apiTest\datas
Process finished with exit code 0
运行结果可以清晰看到,已经成功找到存放数据的文件夹路径并完成拼接。
如果对os模块不熟悉,可以参考菜鸟教程的相关文档。
数据分离的第二步是封装一个读取yml文件的函数或类方法。
这里我们先编写一个独立的函数来实现该功能。
首先需要安装pyyaml库。
pip install pyaml
接着导入相关包,然后进行代码封装。
# -*- encoding: utf-8 -*-
"""
@__Software__: PyCharm
@__File__: readData.py
@__Date__: 2021/6/14 21:07
"""
import os
import yaml
from common import osPath as sp
def read_yml(file):
with open(file, mode='r', encoding='utf-8') as read_data:
results = yaml.load(read_data, Loader=yaml.FullLoader)
return results
print(read_yml(os.path.join(sp.DATAS, 'test_data.yml')))
{'test_data': [[{'type': 1}, {'reason': '查询成功!'}], [{'type': 2}, {'reason': '查询成功!'}], [{'type': 3}, {'reason': '查询成功!'}]]}
Process finished with exit code 0
读取yml的函数编写完成后,务必测试其是否满足所需功能;从结果来看,它满足我目前的功能需求。
如果对yaml语法不熟悉,也可以参考菜鸟教程的相关介绍。
数据分离的第三步是在测试用例中引入数据并运行测试。
# -*- encoding: utf-8 -*-
"""
@__Software__: PyCharm
@__File__: test_example.py
@__Date__: 2021/6/13 19:00
"""
import os
import pytest
import requests
from common import osPath as sp
from common.readData import read_yml
class TestExample:
s = requests.Session()
data = read_yml(os.path.join(sp.DATAS, 'test_data.yml'))
@pytest.mark.parametrize("test_data, expected", data['test_data'])
def test_example(self, test_data, expected):
with self.s as s:
url = "http://apis.juhe.cn/fapig/euro2020/schedule?key=9d0dfd9dbaf51de283ee8a88e58e218b"
response = s.get(url, params=test_data)
print(response.json())
assert response.json()["reason"] == expected["reason"]
if __name__ == '__main__':
pytest.main(["-v", "-s", "test_example"])
Launching pytest with arguments F:/project_gitee/Test/apiTest/cases/test_example.py in F:\project_gitee\Test\apiTest\cases
============================= test session starts ============================
collecting ... collected 3 items
test_example.py::TestExample::test_example[test_data0-expected0]
test_example.py::TestExample::test_example[test_data1-expected1]
test_example.py::TestExample::test_example[test_data2-expected2]
============================== 3 passed in 0.66s ==============================
data['test_data']用于字典取值,即获取key为test_data对应的value值。
从返回的结果可以清晰看到,3个测试用例全部通过(3 passed),且耗时0.66秒。
至此,测试数据和代码分离的工作已完成。
以上就是Python接口自动化测试中数据与代码分离解析的详细内容,更多关于Python接口自动化测试资料可关注本站其他相关文章。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













