Python中接口测试产生的数据如何处理与存储?

各位大神,用 python 测试接口新增入库的数据,我想删除这些数据让数据数据库恢复到初始状态这个该怎么做呢??谢谢


Python中接口测试产生的数据如何处理与存储?
11 回复

删库。。重建。。


在Python接口测试中,处理与存储数据主要看你的测试框架和需求。我用得最多的是pytest,数据管理大概分这么几种情况:

1. 测试数据管理

# 用fixture管理测试数据
import pytest
import requests

@pytest.fixture
def test_user():
    return {"username": "test_user", "password": "test123"}

def test_login(test_user):
    response = requests.post("http://api.example.com/login", json=test_user)
    assert response.status_code == 200

2. 响应数据验证

def test_api_response():
    response = requests.get("http://api.example.com/users")
    data = response.json()
    
    # 验证数据结构
    assert isinstance(data, list)
    assert "id" in data[0]
    assert "name" in data[0]
    
    return data  # 可以返回供后续测试使用

3. 数据存储方案

import json
import csv
import sqlite3
from datetime import datetime

class TestDataHandler:
    def __init__(self):
        self.timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    
    def save_to_json(self, data, test_name):
        filename = f"test_results/{test_name}_{self.timestamp}.json"
        with open(filename, 'w') as f:
            json.dump(data, f, indent=2)
    
    def save_to_csv(self, data, test_name):
        filename = f"test_results/{test_name}_{self.timestamp}.csv"
        if isinstance(data, list) and data:
            keys = data[0].keys()
            with open(filename, 'w', newline='') as f:
                writer = csv.DictWriter(f, fieldnames=keys)
                writer.writeheader()
                writer.writerows(data)
    
    def save_to_sqlite(self, data, test_name):
        conn = sqlite3.connect('test_results.db')
        cursor = conn.cursor()
        
        # 创建表(如果不存在)
        cursor.execute(f'''
            CREATE TABLE IF NOT EXISTS {test_name} (
                id INTEGER PRIMARY KEY,
                timestamp TEXT,
                data TEXT
            )
        ''')
        
        # 插入数据
        cursor.execute(f'''
            INSERT INTO {test_name} (timestamp, data)
            VALUES (?, ?)
        ''', (self.timestamp, json.dumps(data)))
        
        conn.commit()
        conn.close()

# 使用示例
handler = TestDataHandler()
test_data = [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
handler.save_to_json(test_data, "user_api_test")

4. 实际测试中的整合

import pytest
import requests

@pytest.fixture(scope="session")
def data_handler():
    return TestDataHandler()

def test_complete_flow(data_handler):
    # 准备测试数据
    payload = {"query": "test"}
    
    # 发送请求
    response = requests.post("http://api.example.com/search", json=payload)
    result = response.json()
    
    # 验证响应
    assert response.status_code == 200
    assert "results" in result
    
    # 存储测试结果
    data_handler.save_to_json(result, "search_api_test")
    
    # 返回数据供断言或其他测试使用
    return result

简单建议:根据测试需求选择合适的数据存储方式,JSON文件最常用。

emmm,一般来说,让开发重新部署个测试库啊,你拿开发库做测试,这不摆明了三字儿“我想死”

自己不做备份?

🐮啊,兄弟

用 truncate 清空?

不做开发环境的?

开启事务

事物和 LZ 这个没关系吧
楼主是要想还原到数据库除了原始数据之外什么都没有的状态
这个应该找开发重新部署数据库

删库跑路

测试库做啊,直接进正式库,说实话,在下佩服

回到顶部