整合分块请求大模型返回的测试用例及小工具显示bug修复

在之前的分块发送需求数据给大模型进行测试用例生成时,由于数据结构的改变,需要对分块的回复进行整合,正确的整合是保障系统稳定性和功能正确性的核心。随着测试需求的复杂化,这对测试工程师提出了更高的整合和管理要求。本文将为初学者详细介绍如何利用 Python 整合分块请求大模型返回的测试用例数据,并通过逻辑清晰的代码实现高效汇总,帮助你快速上手大模型生成的测试用例处理。


背景问题:分块测试用例数据的整合难点

在实际工作中,大型测试用例数据可能由于接口限制、网络传输或系统设计的原因以分块形式返回。例如:

  1. 每次请求返回部分测试用例数据。
  2. 数据块之间可能存在重复或不连续的序号。
  3. 测试用例需要按照特定逻辑(如序号顺序)重新排列。

如何正确地提取、整合并排序这些分块数据是一项挑战。特别是对于大模型生成的测试用例,结构化数据的处理显得尤为重要。


解决方案:Python 整合测试用例数据

下面是一段 Python 代码,它能够高效提取多个分块中的测试用例数据,并按照序号顺序整合成一个完整的 JSON 数据结构。实际分块后的返回数据如下所示,一般可能是json数据结构之后又会夹杂一些思考过程的数据,通过re进行正则匹配可能是一个比较好的解决办法,具体实现代码如下所示:

代码实现
import json
import re

str1 = """
多次请求后的汇总数据: #```json
[
  {
    "case_id": "TC_001",
    "case_name": "验证有效用户ID获取用户信息功能",
    "priority": "High",
    "pre_condition": "用户ID 123存在于系统中",
    "steps": [
      "发送GET请求到/users/123",
      "检查响应状态码是否为200",
      "验证响应体包含id=123和name=John"
    ],
    "expected_result": "返回正确的用户信息且数据结构完整",
    "test_data": {
      "user_id": 123
    },
    "test_type": "Functional"
  }]
# ```
该测试套件设计包含以下特点:
1. **多维覆盖**:涵盖功能、数据验证、安全、错误处理等多个测试类型
2. **边界处理**:包含参数类型校验、字符串长度边界等场景
3. **安全防护**:验证身份认证机制的有效性
4. **异常处理**:覆盖必填参数缺失、非法参数类型等异常场景
5. **数据驱动**:使用具体参数值验证业务规则
6. **可扩展性**:每个用例独立可执行,支持后续添加更多测试场景
7. **结果可验证**:每个步骤都包含明确的验证点
建议执行顺序按照优先级排序,先验证核心功能(High优先级),再覆盖其他场景。性能测试用例需要单独设计压测方案,建议使用工具进行并发测试。 # ```json
[
    {
        "case_id": "TC_001",
        "case_name": "验证使用有效商品ID删除商品时返回204并确认删除成功",
        "priority": "High",
        "pre_condition": "商品ID 789存在且用户已获得授权",
        "steps": [
            "发送DELETE请求到/products/789",
            "检查响应状态码是否为204",
            "发送GET请求到/products/789",
            "检查GET请求响应状态码是否为404"
        ],
        "expected_result": "DELETE请求返回204且后续GET请求确认商品不存在",
        "test_data": {
            "id": 789
        },
        "test_type": "Functional"
    }
]
# ```
"""


def extract_json_objects(text):
    """
    获取回复中的json字符串并进行整合
    """
    json_objects = []
    matches = re.findall(r'```json\s*([\s\S]*?)```', text, re.DOTALL)
    for match in matches:
        try:
            json_objects.append(json.loads(match))
        except json.JSONDecodeError as e:
            print(f"Error decoding JSON: {e}")
            print(match)
            continue
    json_objects = json.dumps(json_objects, ensure_ascii=False)
    return json_objects

# 转换为 JSON 格式输出
# final_json = json.dumps(final_cases, indent=4, ensure_ascii=False)
#
# 打印整合后的结果
print("整合后的测试用例:")
final_test_cases = extract_json_objects(str1)
final_test_cases = json.dumps(final_test_cases, ensure_ascii=False)
print(final_test_cases)
代码逻辑解析
  1. 提取数据:

    • 使用 re` 将每个数据块中的json字符串数据提取出来。
    • 如果存在解析错误,捕获 JSONDecodeError 并跳过该块。
  2. 输出结果:

    • 使用 json.dumps 将整合后的数据转换为漂亮的 JSON 字符串。

整合后的测试用例数据

运行以上代码后,整合后的数据如下:

[
  [
    {
      "case_id": "TC_001",
      "case_name": "验证有效用户ID获取用户信息功能",
      "priority": "High",
      "pre_condition": "用户ID 123存在于系统中",
      "steps": [
        "发送GET请求到/users/123",
        "检查响应状态码是否为200",
        "验证响应体包含id=123和name=John"
      ],
      "expected_result": "返回正确的用户信息且数据结构完整",
      "test_data": {
        "user_id": 123
      },
      "test_type": "Functional"
    }
  ],
  [
    {
      "case_id": "TC_001",
      "case_name": "验证使用有效商品ID删除商品时返回204并确认删除成功",
      "priority": "High",
      "pre_condition": "商品ID 789存在且用户已获得授权",
      "steps": [
        "发送DELETE请求到/products/789",
        "检查响应状态码是否为204",
        "发送GET请求到/products/789",
        "检查GET请求响应状态码是否为404"
      ],
      "expected_result": "DELETE请求返回204且后续GET请求确认商品不存在",
      "test_data": {
        "id": 789
      },
      "test_type": "Functional"
    }
  ]
]

在这里插入图片描述

对于测试工程师来说,通过本文介绍的 Python 整合方法,你可以轻松处理分块请求大模型返回的数据并生成结构化的测试用例集合。如果你是初学者,不妨尝试在自己的项目中实践这一方法,并探索如何结合大模型生成测试用例的更多可能性!在处理包含错误格式 JSON 数据块的情况下,我们需要对解析过程进行异常处理,确保程序不会因单个数据块的错误而中断。通过以上处理逻辑后,数据展示在GUI界面的生成结果会失败,因为当前仍是列表二元列表形式,需进一步处理。


测试用例 ID 重新编排

由于将数据分块后传递给大模型进行用例生成,返回的用例会出现用例ID重复的情况。通过下面代码,实现部分场景的用例ID重排并适配用例结果在Deepseek API+Python 测试用例一键生成与导出 V1.0.5小工具显示的问题。

1. 功能概述

该工具的核心功能是:

  • 合并测试用例列表: 将多个测试用例列表(列表的列表)合并成一个单一的列表。
  • 灵活 ID 字段名识别: 能够识别并处理具有不同 ID 字段名的测试用例,通过用户自定义的字段名列表,适配各种测试用例格式。
  • 重新生成统一的 ID: 根据用户提供的字段名列表,为每个测试用例生成唯一的、连续的 ID,并格式化为指定形式。
  • JSON 输出: 将重新编排后的测试用例数据以 JSON 字符串的形式输出,方便数据的存储、传输和进一步处理。
2. 代码结构与分析

以下是 Python 代码:

import json

def reformat_test_cases(data, id_fields=["case_id", "用例编号", "test_id"]):
    """
    合并测试用例列表,并重新编号用例 ID,支持自定义 ID 字段名列表。

    Args:
        data: 一个列表的列表,每个子列表包含测试用例字典。
        id_fields: (可选) 一个包含可能 ID 字段名的列表,默认为 ["case_id", "用例编号", "test_id"]。

    Returns:
        包含合并和重新编号的测试用例的 JSON 字符串。
    """

    combined_list = []
    for sublist in data:
        combined_list.extend(sublist)

    # 重新编号用例 ID
    for i, case in enumerate(combined_list):
        for id_field in id_fields:
            if id_field in case.keys():
                case[id_field] = f"TC_{i+1:03}"  # 格式化为 TC_001, TC_002 等
                break  # 找到一个 ID 字段后,跳出内层循环

    return json.dumps(combined_list, indent=2, ensure_ascii=False)

2.1 import json:

  • 导入 json 模块,用于将 Python 对象序列化为 JSON 字符串,以及将 JSON 字符串反序列化为 Python 对象。

2.2 reformat_test_cases(data, id_fields) 函数:

  • 函数定义: 定义了一个名为 reformat_test_cases 的函数,它接受两个参数:

    • data: 包含测试用例列表的列表。这是函数的主要输入数据。
    • id_fields: 一个可选的列表,包含所有可能作为 ID 字段名的字符串。 默认值为 ["case_id", "用例编号", "test_id"]。 这个参数赋予了函数极高的灵活性,使得它可以适应不同格式的测试用例数据。
  • 初始化 combined_list: 创建一个空列表 combined_list,用于存储合并后的测试用例。

  • 合并测试用例列表:

    for sublist in data:
        combined_list.extend(sublist)
    
    • 使用 for 循环遍历 data 中的每个子列表。
    • 使用 extend() 方法将每个子列表中的所有元素(测试用例字典)添加到 combined_list 中。extend() 方法与 append() 方法的区别在于,append() 方法会将整个子列表作为一个元素添加到 combined_list 中,而 extend() 方法会将子列表中的每个元素分别添加到 combined_list 中。
  • 重新编号用例 ID:

    for i, case in enumerate(combined_list):
        for id_field in id_fields:
            if id_field in case.keys():
                case[id_field] = f"TC_{i+1:03}"  # 格式化为 TC_
    

整合分块请求大模型返回的测试用例及小工具显示bug修复_第1张图片

你可能感兴趣的:(测试提效,测试用例,bug,服务器)