如何搭建Python+Requests接口自动化框架
时间: 2025-08-01 15:33:49 浏览: 9
<think>我们正在讨论如何使用Python和Requests库搭建接口自动化测试框架。根据用户的问题,他想要一个教程。我将参考提供的引用内容,特别是引用[2][3][4][5],它们都涉及使用Python和requests搭建接口自动化测试框架。目标:提供一个清晰、结构化的教程,帮助用户搭建一个基本的接口自动化测试框架。框架结构通常包括以下部分:1.项目结构规划2.基础模块(如请求封装、配置管理、日志记录)3.测试用例管理4.测试执行与报告根据引用[1]中给出的示例结构:-api_tests/-base.py#基础类,如请求的封装-conftest.py#pytest的配置文件,可以放一些fixture-testcases/#测试用例目录-test_login.py-test_order.py-utils/#工具类目录-config.py#配置管理-logger.py#日志记录-request.py#请求的封装(如果放在utils下)但是,引用[4][5]中提到了用例的配置方式(使用字典配置用例),我们可以考虑两种方式:一种是将用例写在Python文件中(如test_login.py),另一种是用外部文件(如JSON)管理用例。这里我们先以Python文件为例。步骤:1.环境准备-安装Python(建议3.6以上)-安装requests库:`pipinstallrequests`-安装pytest(测试框架):`pipinstallpytest`-安装pytest-html(生成HTML报告):`pipinstallpytest-html`-安装其他可能需要的库(如日志处理,配置文件处理等)2.项目结构```project/│conftest.py#pytest的配置文件,可以定义钩子和fixture│pytest.ini#pytest的配置文件(可选)│├───common/#公共模块││__init__.py││base_request.py#封装的请求类││config.py#配置管理(读取配置文件)││logger.py#日志模块│├───testcases/#测试用例││__init__.py││test_login.py#登录接口测试用例││...#其他测试用例│├───data/#存放测试数据(如json文件,excel等)(可选)│├───reports/#存放测试报告│└───utils/#工具类(可选)```3.封装请求类(base_request.py)目的:封装requests,使得发送请求更加方便,可以统一添加请求头、处理响应等。示例代码:```pythonimportrequestsfromcommon.loggerimportloggerclassBaseRequest:def__init__(self):#可以在这里读取配置,设置基础URL等self.base_url="http://api.example.com"#从配置文件中读取defsend_request(self,method,url,**kwargs):#拼接完整的URLurl=self.base_url+urllogger.info(f"请求方法:{method},请求URL:{url},请求参数:{kwargs}")try:response=requests.request(method,url,**kwargs)logger.info(f"响应状态码:{response.status_code},响应内容:{response.text}")returnresponseexceptExceptionase:logger.error(f"请求发生异常:{e}")raise```4.配置管理(config.py)通常使用配置文件(如config.ini,config.yaml,或者环境变量)来管理不同环境的配置。示例(使用config.ini):```ini[test]base_url=http://api.example.com```然后使用config.py读取:```pythonimportconfigparserimportosclassConfig:def__init__(self,config_file="config.ini"):self.config=configparser.ConfigParser()self.config.read(os.path.join(os.path.dirname(__file__),'..',config_file))defget(self,section,option):returnself.config.get(section,option)```5.日志模块(logger.py)配置日志,方便记录测试过程中的信息。```pythonimportloggingimportosfromdatetimeimportdatetime#创建日志目录log_dir=os.path.join(os.path.dirname(os.path.dirname(__file__)),'logs')ifnotos.path.exists(log_dir):os.mkdir(log_dir)#日志文件路径log_file=os.path.join(log_dir,f"test_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log")#创建loggerlogger=logging.getLogger('api_test')logger.setLevel(logging.DEBUG)#创建文件处理器fh=logging.FileHandler(log_file,encoding='utf-8')fh.setLevel(logging.DEBUG)#创建控制台处理器ch=logging.StreamHandler()ch.setLevel(logging.INFO)#创建格式器formatter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')fh.setFormatter(formatter)ch.setFormatter(formatter)#将处理器添加到loggerlogger.addHandler(fh)logger.addHandler(ch)```6.编写测试用例(test_login.py)使用pytest编写测试用例,利用封装的BaseRequest发送请求,并进行断言。```pythonimportpytestfromcommon.base_requestimportBaseRequestclassTestLogin:request=BaseRequest()deftest_login_success(self):"""测试登录成功"""url="/login"data={"username":"test_user","password":"123456"}response=self.request.send_request("post",url,json=data)assertresponse.status_code==200assertresponse.json().get("message")=="登录成功"deftest_login_failed(self):"""测试登录失败"""url="/login"data={"username":"test_user","password":"wrong"}response=self.request.send_request("post",url,json=data)assertresponse.status_code==401assertresponse.json().get("message")=="用户名或密码错误"```7.运行测试并生成报告可以使用pytest命令运行测试,并生成HTML报告。```pytesttestcases/-v--html=reports/report.html```8.扩展考虑-参数化:使用pytest的`@pytest.mark.parametrize`进行参数化测试。-数据驱动:将测试数据放在外部文件(如JSON、Excel)中,然后读取数据执行测试。-夹具(fixture):在conftest.py中定义夹具,例如初始化操作、清理操作等。-断言封装:可以封装一些常用的断言方法,使断言更简洁。-配置文件管理多环境:例如测试环境、预生产环境、生产环境。以上是一个基本的框架搭建教程。用户可以根据实际需求进行扩展。根据用户的问题,我们生成了相关问题:§§相关问题§§1.如何实现接口自动化测试框架中的数据驱动?2.在接口自动化测试中如何处理接口依赖(例如登录后的token)?3.如何将接口自动化测试框架集成到持续集成(CI)流程中?4.如何生成更详细的测试报告(包括请求和响应的详细信息)?5.在接口测试中如何进行异常处理?</think>### Python Requests接口自动化测试框架搭建教程
下面是一个基于Python+Requests的接口自动化测试框架搭建步骤,结合最佳实践和引用内容:
#### 一、环境准备
1. 安装Python(建议3.6+)
2. 安装核心库:
```bash
pip install requests pytest pytest-html allure-pytest
```
3. 可选工具:
- Allure报告工具
- Jenkins(持续集成)
- Git(版本控制)
#### 二、项目结构设计
```plaintext
api_framework/
├── common/ # 公共模块
│ ├── base_request.py # 请求封装
│ ├── logger.py # 日志模块
│ └── config.py # 配置管理
├── testcases/ # 测试用例
│ ├── test_login.py # 登录模块用例
│ └── test_order.py # 订单模块用例
├── data/ # 测试数据
│ └── test_data.json
├── reports/ # 测试报告
├── conftest.py # pytest全局配置
└── pytest.ini # pytest配置文件
```
#### 三、核心模块实现
1. **请求封装(base_request.py)**:
```python
import requests
from common.logger import logger
class BaseRequest:
def __init__(self):
self.session = requests.Session()
def send_request(self, method, url, **kwargs):
logger.info(f"请求: {method} {url} | 参数: {kwargs}")
try:
response = self.session.request(method, url, **kwargs)
logger.info(f"响应状态: {response.status_code} | 响应内容: {response.text[:200]}")
return response
except Exception as e:
logger.error(f"请求异常: {str(e)}")
raise
```
2. **配置管理(config.py)**:
```python
import os
class Config:
BASE_URL = "https://api.example.com" # 基础URL
TIMEOUT = 10 # 默认超时时间
LOG_LEVEL = "DEBUG" # 日志级别
```
3. **日志模块(logger.py)**:
```python
import logging
import os
def setup_logger():
logger = logging.getLogger('api_test')
logger.setLevel(logging.DEBUG)
# 文件日志
file_handler = logging.FileHandler('logs/api_test.log')
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
# 控制台日志
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter('%(levelname)s - %(message)s'))
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
logger = setup_logger()
```
#### 四、测试用例编写(test_login.py)
```python
import pytest
from common.base_request import BaseRequest
from common.config import Config
class TestLogin:
request = BaseRequest()
@pytest.mark.parametrize("username, password, expected", [
("valid_user", "correct_pwd", 200),
("invalid_user", "wrong_pwd", 401)
])
def test_login(self, username, password, expected):
url = f"{Config.BASE_URL}/login"
data = {"username": username, "password": password}
response = self.request.send_request("POST", url, json=data)
assert response.status_code == expected
if expected == 200:
assert "token" in response.json()
```
#### 五、运行与报告生成
1. 执行测试:
```bash
pytest testcases/ --alluredir=./reports/allure-results
```
2. 生成HTML报告:
```bash
allure serve ./reports/allure-results
```
#### 六、框架扩展建议
1. **数据驱动**:使用JSON/YAML管理测试数据
2. **接口依赖处理**:通过fixture共享token
```python
@pytest.fixture(scope="module")
def auth_token():
# 获取登录token
return get_token()
```
3. **持续集成**:Jenkins集成测试任务
4. **异常监控**:企业微信/钉钉通知
5. **性能扩展**:集成Locust进行压力测试
> **框架优势**:
> 1. 支持非技术人员通过修改配置文件参与自动化测试[^2]
> 2. 可用于上线前回归测试和线上环境定时巡检[^2]
> 3. 统一封装降低维护成本,提高代码复用率[^1][^5]
阅读全文
相关推荐


















