从浅到深的pymysql requests框架搭建思路

以一个登录案例:正常的一个接口测试

准备数据--发送请求--解析响应结果--断言结果

import requests
#1、准备数据
url ='http://cms.duoceshi.cn/cms/manage/loginJump.do'
data={
    'userAccount':'admin',
    'loginPwd':'123456'
}
#2\、发送请求
req=requests.post(url=url,data=data)

#3、解析响应结果,判断本次请求是否成功
print(req.text)#返回的是字符串格式
print(req)

#4、用断言判断本次请求测试是否成功
msg='登录成功!'
assert  msg == req.json()['msg'],'断言失败'
print( req.json()['msg'])

正常的一个request的测试框架需要包含逻辑层、测试层、数据层,有时候我们需要生成日志的话那就需要在加一个report日志层、工具层、运行层,所以就有了requests6层封装的结构。(具体创建请往下看)

案例中,只是访问一个网址,为了减少代码的冗余

一个正常的接口测试步骤:准备数据(url等)--请求访问--响应请求---断言测试

        根据步骤我们将url、data进行提取放到数据层,我们这里创建一个data包,和一个data文件存放url和传参。--数据封装

        将请求是使用的方法post、或者get封装到逻辑层,创建一个api_lj包和api.py文档,并在这里对post、get方法进行定义。--请求方法封装

        然后就是到我们的响应检测层,这里其实就是一个用例的测试层,我们创建一个testCase包,和一个case.py文件,在这里编辑用例。调用到data中的数据和api中的请求方法。--测试用例封装

        到这里用例已经执行完了,那我们需要查看日志,那么我们创建一个工具包utilit存放日志的模板;创建一个report日志包,用来存放生成的日志;再创建一个运行包runner,run.py文件,用来运行用例并生成报告。

这就是一个完成的requests的框架的创建思路。

里面主要用到了unittest、requests两个类。

### 构建接口自动化测试框架 #### 一、准备阶段 为了成功构建一个高效的接口自动化测试框架,前期准备工作至关重要。这包括但不限于安装必要的开发工具和库文件。Python 是一种广泛应用于自动化测试的语言,因为它拥有丰富的第三方库支持以及简洁易读的语法结构。 对于所使用的具体技术栈而言,在此推荐采用 Python 结合 `unittest` 单元测试模块来编写测试脚本;利用 `requests` 库发送 HTTP 请求并处理响应数据;借助 `openpyxl` 对 Excel 文件中的测试案例进行管理;通过 `myddt` 实现参数化测试功能;最后依靠 `pymysql` 完成数据库操作[^2]。 #### 二、创建项目目录结构 合理的项目架构有助于提高代码可维护性和团队协作效率。建议按照如下方式规划: ``` project_name/ │ ├── config/ # 配置文件夹 │ └── settings.py # 存储全局配置项 │ ├── data/ # 数据存储区 │ ├── test_data.xlsx # 测试用例输入源表单 │ └── ... │ ├── logs/ # 日志记录路径 │ ├── reports/ # 报告输出位置 │ ├── tests/ # 测试套件所在处 │ ├── __init__.py │ ├── test_api.py # API 接口测试类定义 │ └── ... │ └── utils/ # 工具函数集合体 ├── db_helper.py # 封装好的 SQL 查询方法 ├── excel_reader.py # 解析Excel文档辅助程序 └── http_client.py # 自定义HTTP请求客户端封装 ``` #### 三、初始化环境设置 在开始编码之前,先完成虚拟环境建立与依赖包安装工作。可以使用 pipenv 或者 conda 创建独立于系统的 Python 虚拟环境,并根据需求列表批量下载所需软件包。 ```bash pip install requests openpyxl pymysql ddt unittest ``` #### 四、核心组件设计 ##### 1. **Http Client** 针对 RESTful APIs 的特点,应该专门打造一款轻量级但又不失灵活性的 Http Client 类型对象作为整个体系的基础构件之一。此类需具备发起 GET / POST 等多种类型的网络调用能力的同时还要能够方便快捷地解析返回结果。 ```python import requests class HttpClient(object): def get(self, url, params=None, headers=None): response = requests.get(url=url, params=params, headers=headers) return self._parse_response(response) @staticmethod def _parse_response(resp): try: resp.raise_for_status() json_result = resp.json() status_code = resp.status_code message = "success" except Exception as e: json_result = None status_code = resp.status_code if hasattr(resp, 'status_code') else -999 message = str(e) finally: result_dict = { "json": json_result, "code": status_code, "msg": message } return result_dict ``` ##### 2. **TestCase Class** 基于上述提到的技术选型方案,接下来便是围绕着具体的业务逻辑去构思 TestCase 的继承关系及其内部属性成员的设计思路了。这里给出一段简单的例子用于说明如何运用 DDT (Data Driven Testing) 思维模式来进行单元级别的验证活动。 ```python from ddt import ddt, file_data import unittest @ddt class TestApi(unittest.TestCase): @file_data('../data/test_cases.yaml') def test_case_template(self, method='GET', endpoint='', payload={}, expected={}): client = HttpClient() actual_resp = getattr(client, method.lower())(endpoint, payload=payload) assertEqual(actual_resp['json'], expected) if __name__ == '__main__': unittest.main() ``` #### 五、执行测试计划 当所有的准备工作都完成后,则可以通过命令行界面直接启动全部或者指定部分的测试集。如果是在 IDE 中调试的话也可以右键点击对应的 .xml/.suite 文件选择 Run As -> TestNG Suite 方式快速触发一次完整的回归检验过程[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值