签名约定
请求签名
func(map[string]string) interface{}
入参:性能测试服务内置参数以及自定义参数。
出参:interface需实现IResultV1接口,如有必要,请使用性能测试服务提供的IResultV1接口实现。
名称 |
含义 |
补充说明 |
---|---|---|
__name |
请求名称 |
- |
__goroutine_id |
协程id |
- |
__executor_index |
执行机索引 |
序号从0开始。 |
__executor_count |
执行机总数 |
- |
函数签名
func(map[string]string) string
入参:自定义参数。
出参:字符串。
检查点签名
func(map[string]string) string
入参:自定义参数
出参:字符串,空字符串表示检查成功,非空字符串表示检查失败信息。
IResultV1接口实现
package main import ( "fmt" "time" ) const ( InnerVarName = "__name" InnerVarGoroutineId = "__goroutine_id" InnerVarExecutorIndex = "__executor_index" InnerVarExecutorCount = "__executor_count" ) type IResultV1 interface { GetName() string GetUrl() string GetMethod() string GetRequestHeader() map[string]string GetRequestBody() string GetSentBytes() int GetResponseCode() int GetResponseHeader() map[string]string GetResponseBody() string GetReceivedBytes() int GetFailureMessage() string IsSuccess() bool GetBeginTime() int64 GetEndTime() int64 GetSubResults() []interface{} } //acquireResult generates root result. //just call one time on the main func and generate sub result using parent.addSub() func acquireResult(name string) *Result { result := &Result{} result.Name = name result.RequestHeader = map[string]string{} result.ResponseHeader = map[string]string{} result.ResponseCode = 200 result.Success = true result.BeginTime = time.Now().UnixMilli() result.EndTime = time.Now().UnixMilli() return result } type Result struct { Name string Url string Method string RequestHeader map[string]string RequestBody string SentBytes int ResponseCode int ResponseHeader map[string]string ResponseBody string ReceivedBytes int FailureMessage string Success bool BeginTime int64 EndTime int64 SubResults []interface{} SubIndex int } func (r *Result) GetName() string { return r.Name } func (r *Result) GetUrl() string { return r.Url } func (r *Result) GetMethod() string { return r.Method } func (r *Result) GetRequestHeader() map[string]string { return r.RequestHeader } func (r *Result) GetRequestBody() string { return r.RequestBody } func (r *Result) GetSentBytes() int { return r.SentBytes } func (r *Result) GetResponseCode() int { return r.ResponseCode } func (r *Result) GetResponseHeader() map[string]string { return r.ResponseHeader } func (r *Result) GetResponseBody() string { return r.ResponseBody } func (r *Result) GetReceivedBytes() int { return r.ReceivedBytes } func (r *Result) GetFailureMessage() string { return r.FailureMessage } func (r *Result) IsSuccess() bool { return r.Success } func (r *Result) GetBeginTime() int64 { return r.BeginTime } func (r *Result) GetEndTime() int64 { return r.EndTime } func (r *Result) GetSubResults() []interface{} { return r.SubResults } //begin records begin time, do not forget call this function to update func (r *Result) begin() { r.BeginTime = time.Now().UnixMilli() } //end records end time, do not forget call this function to update func (r *Result) end() { r.EndTime = time.Now().UnixMilli() } //addSub adds sub result to parent, call this function adding sub result always. //if name is not empty, renaming will be disabled func (r *Result) addSub(name string) *Result { if name == "" { name = fmt.Sprintf("%s-%d", r.Name, r.SubIndex) r.SubIndex++ } else { name = fmt.Sprintf("%s-%s", r.Name, name) } sub := acquireResult(name) r.SubResults = append(r.SubResults, sub) return sub }
名称 |
含义 |
补充说明 |
---|---|---|
Name |
请求名称 |
根result需使用内置参数__name设置。 |
Url |
请求地址 |
- |
Method |
方法 |
用于HTTP的POST,GET等。 |
RequestHeader |
请求头 |
用于HTTP。 |
RequestBody |
请求数据 |
建议不要记录请求较大的数据,例如上传文件,仅记录摘要即可。 |
SentBytes |
发送字节数 |
- |
ResponseCode |
响应码 |
记录响应状态,可以用于HTTP状态码或者自定义状态码,用于报告统计响应状态数量用于分析。 响应码范围:[100,599] |
ResponseHeader |
响应头 |
用于HTTP。 |
ResponseBody |
响应数据 |
建议不要记录响应较大的数据,例如下载文件,仅记录摘要即可。 |
ReceivedBytes |
接收字节数 |
- |
FailureMessage |
失败信息 |
- |
Success |
是否成功 |
- |
BeginTime |
请求开始时间 |
单位:毫秒 |
EndTime |
请求结束时间 |
单位:毫秒 |
SubResults |
子请求 |
当自定义请求需要多个子请求共同完成,需要使用该字段记录各个子请求执行情况。 |
SubIndex |
子请求索引 |
当使用父Result的addSub方法生成子Result时,如果不为子Result自定义名称,将使用该字段自增产生索引用于生成子Result名称。 |