更新活动名称以遵循命名规范,增强API测试参数验证逻辑,调整任务队列名称以保持一致性

This commit is contained in:
longpeng 2025-06-25 15:27:45 +08:00
parent a299cf384c
commit 6231ef37bf
4 changed files with 35 additions and 12 deletions

View File

@ -22,7 +22,7 @@ message ApiTestRequest {
string endpoint = 2; // API路径
string http_method = 3; // "GET", "POST", etc.
map<string, string> headers = 4;
bytes request_body = 5; // JSON或其他二进制数据
string request_body = 5; // JSON或其他二进制数据
int32 expected_status_code = 6;
}

View File

@ -34,7 +34,7 @@ func (s *WorkflowService) Start(compositeCaseId string) error {
workflowOptions := client.StartWorkflowOptions{
ID: "test_workflow_" + runID,
TaskQueue: "test-task-queue", // 保持与 Python Worker 一致
TaskQueue: "data-task-queue", // 保持与 Python Worker 一致
}
zap.L().Info("Starting TestRunWorkflow", zap.String("runID", runID))

View File

@ -42,7 +42,7 @@ class TestActivities:
# 心跳发送失败,记录警告但继续尝试
activity.logger.warning(f"Failed to send heartbeat: {e}")
@activity.defn(name="run_api_test")
@activity.defn(name="RunApiTest")
async def run_api_test(self, req: pb.ApiTestRequest) -> pb.ApiTestResult:
"""
执行API测试的Temporal Activity实现
@ -100,7 +100,7 @@ class TestActivities:
result.base_result.duration_seconds = time.time() - start_time
return result
@activity.defn(name="run_ui_test")
@activity.defn(name="RunUiTest")
async def run_ui_test(self, req: pb.UiTestRequest) -> pb.UiTestResult:
"""
执行UI测试的Temporal Activity实现

View File

@ -2,9 +2,7 @@ package workflows
import (
"encoding/json"
"fmt"
"go.temporal.io/sdk/temporal"
"reflect"
"sort"
"strconv"
"time"
@ -38,8 +36,9 @@ func DynamicTestSuiteWorkflow(ctx workflow.Context, input *pb.DynamicTestRunInpu
// 方式二 (适用于大数据): 工作流通过 Activity 从数据库动态加载步骤定义
// 这里采用方式二,通过 LoadCompositeCaseSteps Activity 从数据库加载步骤配置
ctxActivity := workflow.WithActivityOptions(ctx, workflow.ActivityOptions{
StartToCloseTimeout: 10 * time.Minute, // Activity 从开始到完成的最大允许时间
HeartbeatTimeout: 30 * time.Second, // Heartbeat 超时时间,防止 Worker 假死
TaskQueue: "data-task-queue", // 指定任务队列名称
StartToCloseTimeout: 10 * time.Minute, // Activity 从开始到完成的最大允许时间
HeartbeatTimeout: 30 * time.Second, // Heartbeat 超时时间,防止 Worker 假死
RetryPolicy: &temporal.RetryPolicy{ // Activity 级别的重试策略配置
InitialInterval: time.Second, // 首次重试前的等待时间
BackoffCoefficient: 1.0, // 重试间隔的递增系数
@ -99,7 +98,30 @@ func DynamicTestSuiteWorkflow(ctx workflow.Context, input *pb.DynamicTestRunInpu
// 这是动态工作流的核心:同一个工作流可以执行不同类型的测试
switch step.ActivityName {
case "RunApiTest":
// API 测试:创建 API 测试请求结构并解析参数
apiReq := &pb.ApiTestRequest{}
// 1. 首先验证JSON格式
if !json.Valid([]byte(step.ParametersJson)) {
logger.Error("Invalid JSON format in parameters")
overallSuccess = false
break
}
// 2. 解析JSON时增加错误详情
if err := json.Unmarshal([]byte(step.ParametersJson), apiReq); err != nil {
logger.Error("Failed to unmarshal API test parameters",
"error", err,
"raw_json", step.ParametersJson)
overallSuccess = false
break
}
// 3. 验证必要字段
if apiReq.Endpoint == "" || apiReq.HttpMethod == "" {
logger.Error("Missing required fields in API test parameters")
overallSuccess = false
break
}
/*// API 测试:创建 API 测试请求结构并解析参数
logger.Info("Running api test activity", "ParametersJson", step.ParametersJson)
fmt.Println(reflect.TypeOf(step.ParametersJson))
apiReq := &pb.ApiTestRequest{}
@ -107,7 +129,7 @@ func DynamicTestSuiteWorkflow(ctx workflow.Context, input *pb.DynamicTestRunInpu
logger.Error("Failed to unmarshal API test parameters", "error", err)
overallSuccess = false
break // 参数解析失败,跳出当前步骤
}
}*/
activityInput = apiReq
activityResult = &pb.ApiTestResult{} // 预创建结果容器
@ -156,8 +178,9 @@ func DynamicTestSuiteWorkflow(ctx workflow.Context, input *pb.DynamicTestRunInpu
// ------------------------------------------------------------------------------------
// 为 Activity 设置超时、重试等策略,确保测试的可靠性
ao := workflow.ActivityOptions{
StartToCloseTimeout: 10 * time.Minute, // 单个测试最长执行时间
HeartbeatTimeout: 30 * time.Second, // 心跳超时,用于检测 Activity 是否还在运行
TaskQueue: "python-task-queue", // 指定任务队列名称
StartToCloseTimeout: 10 * time.Minute, // 单个测试最长执行时间
HeartbeatTimeout: 30 * time.Second, // 心跳超时,用于检测 Activity 是否还在运行
RetryPolicy: &temporal.RetryPolicy{ // 重试策略配置
InitialInterval: time.Second, // 首次重试间隔
MaximumAttempts: 3, // 最大重试次数