Python接口自动化测试:实现数据与代码分离的三步法

小鹿同学
小鹿同学
发布时间:2026-10-14 | 2人浏览过
原创

本文详解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接口自动化测试资料可关注本站其他相关文章。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表