Files
httprunner/docs/summary-structure.md
2025-06-24 17:00:29 +08:00

18 KiB
Raw Blame History

Summary 数据结构说明文档

概述

HttpRunner 的 Summary 数据结构用于存储测试执行的完整汇总信息,包括测试结果、统计数据、时间信息、平台信息以及详细的测试步骤记录。本文档基于 summary.go 和相关代码的最新定义进行详细说明。

数据结构层次关系

Summary (根结构)
├── Success (bool)
├── Stat (统计信息)
│   ├── TestCases (测试用例统计)
│   └── TestSteps (测试步骤统计)
├── Time (时间信息)
├── Platform (平台信息)
└── Details (测试用例详情列表)
    └── TestCaseSummary (单个测试用例汇总)
        ├── Stat (步骤统计)
        ├── Time (用例时间)
        ├── InOut (输入输出)
        ├── Logs (日志)
        └── Records (步骤记录)
            └── StepResult (步骤结果)
                ├── Data (步骤数据)
                │   ├── ReqResps (请求响应)
                │   └── Validators (验证器)
                ├── Actions (操作列表)
                │   ├── Requests (请求记录)
                │   ├── Plannings (AI规划)
                │   │   ├── ToolCalls (工具调用)
                │   │   ├── Usage (模型使用统计)
                │   │   ├── ScreenResult (屏幕结果)
                │   │   └── SubActions (子操作)
                │   ├── AIResult (统一AI操作结果)
                │   │   ├── QueryResult (查询结果)
                │   │   ├── PlanningResult (规划结果)
                │   │   └── AssertionResult (断言结果)
                │   └── ScreenResults (屏幕截图)
                └── Attachments (附件信息)

详细数据结构说明

1. Summary (主汇总结构)

字段名 类型 JSON标签 说明
Success bool success 整体测试执行是否成功
Stat *Stat stat 汇总统计信息
Time *TestCaseTime time 整体执行时间信息
Platform *Platform platform 平台和版本信息
Details []*TestCaseSummary details 各个测试用例的详细信息
rootDir string - 根目录路径(私有字段)

示例数据:

{
    "success": true,
    "stat": { /* 统计信息 */ },
    "time": { /* 时间信息 */ },
    "platform": { /* 平台信息 */ },
    "details": [ /* 测试用例详情 */ ]
}

2. Stat (统计信息)

字段名 类型 JSON标签 说明
TestCases TestCaseStat testcases 测试用例统计
TestSteps TestStepStat teststeps 测试步骤统计

3. TestCaseStat (测试用例统计)

字段名 类型 JSON标签 说明
Total int total 测试用例总数
Success int success 成功的测试用例数
Fail int fail 失败的测试用例数

示例数据:

{
    "testcases": {
        "total": 1,
        "success": 1,
        "fail": 0
    }
}

4. TestStepStat (测试步骤统计)

字段名 类型 JSON标签 说明
Total int total 测试步骤总数
Successes int successes 成功的步骤数
Failures int failures 失败的步骤数
Actions map[option.ActionName]int actions 各种操作的统计计数

示例数据:

{
    "teststeps": {
        "total": 5,
        "successes": 5,
        "failures": 0,
        "actions": {}
    }
}

5. TestCaseTime (时间信息)

字段名 类型 JSON标签 说明
StartAt time.Time start_at,omitempty 开始时间
Duration float64 duration,omitempty 持续时间(秒)

示例数据:

{
    "time": {
        "start_at": "2025-06-23T13:41:06.150641+08:00",
        "duration": 188.998332334
    }
}

6. Platform (平台信息)

字段名 类型 JSON标签 说明
HttprunnerVersion string httprunner_version HttpRunner 版本号
GoVersion string go_version Go 语言版本
Platform string platform 操作系统平台信息

示例数据:

{
    "platform": {
        "httprunner_version": "v5.0.0-beta-2506222254",
        "go_version": "go1.24.1",
        "platform": "darwin-arm64"
    }
}

7. TestCaseSummary (测试用例汇总)

字段名 类型 JSON标签 说明
Name string name 测试用例名称
Success bool success 用例执行是否成功
CaseId string case_id,omitempty 用例ID可选
Stat *TestStepStat stat 该用例的步骤统计
Time *TestCaseTime time 该用例的时间信息
InOut *TestCaseInOut in_out 输入输出信息
Logs []interface{} logs,omitempty 日志信息
Records []*StepResult records 步骤执行记录
RootDir string root_dir,omitempty 根目录路径

8. TestCaseInOut (输入输出信息)

字段名 类型 JSON标签 说明
ConfigVars map[string]interface{} config_vars 配置变量
ExportVars map[string]interface{} export_vars 导出变量

示例数据:

{
    "in_out": {
        "config_vars": {
            "OPENAI_API_KEY": "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",
            "dramaName": "涂山赊刀",
            "userName": "青榕小剧场"
        },
        "export_vars": {}
    }
}

9. StepResult (步骤结果)

步骤结果是 Records 数组中的元素,包含每个测试步骤的详细执行信息:

字段名 类型 JSON标签 说明
Name string name 步骤名称
Identifier string identifier,omitempty 步骤标识符
StartTime int64 start_time 开始时间Unix时间戳毫秒
StepType StepType step_type 步骤类型(如 "android_validation", "android"
Success bool success 步骤执行是否成功
Elapsed int64 elapsed_ms 执行耗时(毫秒)
HttpStat map[string]int64 httpstat,omitempty HTTP统计信息毫秒
Data interface{} data,omitempty 步骤相关数据
ContentSize int64 content_size,omitempty 响应体长度
ExportVars map[string]interface{} export_vars,omitempty 提取的变量
Actions []*ActionResult actions,omitempty 执行的操作列表
Attachments interface{} attachments,omitempty 附件信息(如截图等)

示例数据:

{
    "name": "启动快手 app",
    "start_time": 1750657267057,
    "step_type": "android_validation",
    "success": true,
    "elapsed_ms": 8797,
    "data": { /* 步骤数据 */ },
    "actions": [ /* 操作列表 */ ],
    "attachments": { /* 附件信息 */ }
}

10. ActionResult (操作结果)

每个步骤可能包含多个操作,每个操作的详细执行信息:

字段名 类型 JSON标签 说明
MobileAction option.MobileAction ,inline 移动端操作信息(内联)
StartTime int64 start_time 操作开始时间Unix时间戳毫秒
Elapsed int64 elapsed_ms 操作耗时(毫秒)
Error string error,omitempty 操作执行错误信息
Plannings []*uixt.PlanningExecutionResult plannings,omitempty AI规划执行结果用于start_to_goal操作
AIResult *uixt.AIExecutionResult ai_result,omitempty 统一AI执行结果用于ai_query/ai_action/ai_assert操作
SessionData uixt.SessionData - 会话数据(内联,包含请求和屏幕截图信息)

11. AIExecutionResult (统一AI执行结果)

这是所有AI操作ai_query、ai_action、ai_assert的统一结果结构

字段名 类型 JSON标签 说明
Type string type 操作类型:"query"、"action"、"assert"
ModelCallElapsed int64 model_call_elapsed 模型调用耗时(毫秒)
ScreenshotElapsed int64 screenshot_elapsed 截图耗时(毫秒)
ImagePath string image_path 截图文件路径
Resolution *types.Size resolution 屏幕分辨率
QueryResult *ai.QueryResult query_result,omitempty 查询操作结果仅query类型
PlanningResult *ai.PlanningResult planning_result,omitempty 规划操作结果仅action类型
AssertionResult *ai.AssertionResult assertion_result,omitempty 断言操作结果仅assert类型
Error string error,omitempty 操作失败的错误信息

示例数据:

{
    "type": "query",
    "model_call_elapsed": 1234,
    "screenshot_elapsed": 567,
    "image_path": "/path/to/screenshot.png",
    "resolution": {"width": 1080, "height": 1920},
    "query_result": { /* 查询结果详情 */ }
}

12. QueryResult (查询结果)

用于ai_query操作的具体结果

字段名 类型 JSON标签 说明
Content string content 提取的内容/信息
Thought string thought AI的推理过程
Data interface{} data,omitempty 结构化数据当提供OutputSchema时
ModelName string model_name 使用的模型名称
Usage *schema.TokenUsage usage,omitempty token使用统计

示例数据:

{
    "content": "搜索框位于屏幕右上角",
    "thought": "通过分析截图,我看到了页面右上角有一个搜索图标",
    "model_name": "doubao-1.5-thinking-vision-pro-250428",
    "usage": {
        "prompt_tokens": 1234,
        "completion_tokens": 56,
        "total_tokens": 1290
    }
}

13. PlanningResult (规划结果)

用于ai_action操作的具体结果

字段名 类型 JSON标签 说明
ToolCalls []schema.ToolCall tool_calls 工具调用列表
Thought string thought AI的思考过程
Content string content 模型的原始内容
Error string error,omitempty 规划错误信息
ModelName string model_name 使用的模型名称
Usage *schema.TokenUsage usage,omitempty token使用统计

示例数据:

{
    "tool_calls": [
        {
            "id": "tap_xy_1750657286",
            "type": "function",
            "function": {
                "name": "uixt__tap_xy",
                "arguments": "{\"x\":1107.6,\"y\":232.4}"
            }
        }
    ],
    "thought": "点击页面右上角的搜索图标,打开搜索界面",
    "model_name": "doubao-1.5-thinking-vision-pro-250428",
    "usage": {
        "prompt_tokens": 2199,
        "completion_tokens": 135,
        "total_tokens": 2334
    }
}

14. AssertionResult (断言结果)

用于ai_assert操作的具体结果

字段名 类型 JSON标签 说明
Pass bool pass 断言是否通过
Thought string thought AI的推理过程
ModelName string model_name 使用的模型名称
Usage *schema.TokenUsage usage,omitempty token使用统计

示例数据:

{
    "pass": true,
    "thought": "根据截图分析,当前页面确实显示了搜索结果",
    "model_name": "doubao-1.5-thinking-vision-pro-250428",
    "usage": {
        "prompt_tokens": 1500,
        "completion_tokens": 45,
        "total_tokens": 1545
    }
}

15. SessionData (会话数据)

字段名 类型 JSON标签 说明
ReqResps *ReqResps req_resps 请求响应数据
Address *Address address,omitempty 网络地址信息
Validators []*ValidationResult validators,omitempty 验证结果列表

16. ReqResps (请求响应)

字段名 类型 JSON标签 说明
Request interface{} request 请求信息
Response interface{} response 响应信息

17. ValidationResult (验证结果)

字段名 类型 JSON标签 说明
Check string check 验证检查项
Assert string assert 断言类型
Expect interface{} expect 期望值
Msg string msg 验证消息
CheckValue interface{} check_value 实际检查值
CheckResult string check_result 检查结果("pass"/"fail"

示例数据:

{
    "check": "ui_foreground_app",
    "assert": "equal",
    "expect": "com.smile.gifmaker",
    "msg": "app [com.smile.gifmaker] should be in foreground",
    "check_value": null,
    "check_result": "pass"
}

18. PlanningExecutionResult (规划执行结果)

用于复杂的start_to_goal操作包含规划和执行的完整信息

字段名 类型 JSON标签 说明
PlanningResult ai.PlanningResult - 继承的规划结果字段
ScreenshotElapsed int64 screenshot_elapsed_ms 截图耗时(毫秒)
ImagePath string image_path 截图文件路径
Resolution *types.Size resolution 图像分辨率
ScreenResult *ScreenResult screen_result 完整屏幕结果数据
ModelCallElapsed int64 model_call_elapsed_ms 模型调用耗时(毫秒)
ToolCallsCount int tool_calls_count 生成的工具调用数量
ActionNames []string action_names 解析的操作名称列表
StartTime int64 start_time 规划开始时间
Elapsed int64 elapsed_ms 规划耗时(毫秒)
SubActions []*SubActionResult sub_actions,omitempty 此规划生成的子操作

19. ToolCall (工具调用)

AI规划中的工具调用信息

字段名 类型 JSON标签 说明
ID string id 工具调用唯一标识
Type string type 调用类型(通常为 "function"
Function Function function 函数调用详情

20. Function (函数调用)

字段名 类型 JSON标签 说明
Name string name 函数名称(如 "uixt__tap_xy"
Arguments string arguments 函数参数JSON字符串格式

21. TokenUsage (token使用统计)

字段名 类型 JSON标签 说明
PromptTokens int prompt_tokens 输入token数量
CompletionTokens int completion_tokens 输出token数量
TotalTokens int total_tokens 总token数量

22. Size (分辨率)

字段名 类型 JSON标签 说明
Width int width 屏幕宽度(像素)
Height int height 屏幕高度(像素)

23. ScreenResult (屏幕结果)

字段名 类型 JSON标签 说明
ImagePath string image_path 截图文件路径
Resolution Size resolution 屏幕分辨率
UploadedURL string uploaded_url 上传后的URL通常为空
Texts []Text texts 识别的文本信息可为null
Icons []Icon icons 识别的图标信息可为null
Tags []Tag tags 识别的标签信息可为null

24. SubActionResult (子操作结果)

规划中实际执行的具体操作:

字段名 类型 JSON标签 说明
ActionName string action_name 操作名称(如 "uixt__tap_xy"
Arguments interface{} arguments,omitempty 操作参数
StartTime int64 start_time 操作开始时间
Elapsed int64 elapsed_ms 操作耗时
Error error error,omitempty 操作执行错误
SessionData SessionData - 会话数据(内联)

示例数据:

{
    "action_name": "uixt__tap_xy",
    "arguments": {"x": 1107.6, "y": 232.4},
    "start_time": 1750657286274,
    "elapsed_ms": 319,
    "requests": [ /* 请求记录 */ ],
    "screen_results": [ /* 屏幕截图 */ ]
}

重要架构变更说明

AI操作统一架构

HttpRunner v5 引入了统一的AI操作架构

  1. 统一结果结构: AIExecutionResult 作为所有AI操作的统一容器
  2. 类型区分: 通过 Type 字段区分不同的AI操作类型
  3. 具体结果: 根据操作类型,在对应的结果字段中存储具体数据
  4. 统一时间统计: 所有AI操作都包含模型调用和截图的时间统计
  5. 统一错误处理: 通过 Error 字段统一处理所有AI操作的错误

数据类型和时间格式

时间戳格式

  • Unix时间戳毫秒: 用于 start_time 字段,如 1750657267057
  • ISO时间格式: 用于 start_atrequest_time 字段,如 "2025-06-23T13:41:06.150641+08:00"

耗时统计

  • 毫秒级: elapsed_ms, model_call_elapsed, screenshot_elapsed
  • 秒级: duration 字段使用浮点数表示秒

状态标识

  • 布尔值: success, pass 表示操作或测试是否成功
  • 字符串: check_result 使用 "pass"/"fail" 表示验证结果

这个数据结构设计充分考虑了现代UI自动化测试的需求特别是AI驱动的测试场景。通过统一的AI操作架构和详细的嵌套字段定义为测试结果的分析、报告生成和调试提供了完整的数据基础。