python接口自动化测试数据和代码分离解析

代码的可维护性除了代码冗余之外还有就是数据尽量不要和代码掺杂在一起,因为阅读起来会非常的凌乱;数据分离能更好的增加代码可读性和可维护性,也能更好的二次修改使用

目录

common中存放的是整个项目中公共使用的封装方法

数据分离的第一步先找到工程项目路径

数据分离的第二步就是封装一个读取yml文件函数或类方法

数据分离的第三步,测试用例中引入数据并运行

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_giteeTestapiTestdatas Process finished with exit code 0

运行结果可以清晰看到,已经找到存放数据的文件夹路径并拼接成功 ...

os模块不熟悉可参考菜鸟教程

数据分离的第二步就是封装一个读取yml文件函数或类方法

这里就先写一个函数

首先要先安装yml

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_giteeTestapiTestcases ============================= 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 passed,且用时0.66s ...

至此,测试数据和代码分离完成 ...

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...