97 lines
2.1 KiB
Go
97 lines
2.1 KiB
Go
|
|
package hotime
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
. "code.hoteas.com/golang/hotime/common"
|
||
|
|
. "code.hoteas.com/golang/hotime/db"
|
||
|
|
)
|
||
|
|
|
||
|
|
// FlowTest 业务流程测试集合(流程名 → 定义)
|
||
|
|
type FlowTest map[string]FlowDef
|
||
|
|
|
||
|
|
// FlowDef 单条业务流程定义
|
||
|
|
type FlowDef struct {
|
||
|
|
Group string // 左侧分组,如 "user" / "expect_demo"
|
||
|
|
Desc string // 流程短标题(右侧标题)
|
||
|
|
Prep string // 业务说明与前置/数据准备(右侧描述)
|
||
|
|
Func func(f *Flow)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Flow 业务流程测试入口,整条流程共用一次测试事务
|
||
|
|
type Flow struct {
|
||
|
|
app *TestApp
|
||
|
|
t *testing.T
|
||
|
|
name string
|
||
|
|
group string
|
||
|
|
desc string
|
||
|
|
prep string
|
||
|
|
session Map
|
||
|
|
stepIdx int
|
||
|
|
lastResp *ApiResponse
|
||
|
|
}
|
||
|
|
|
||
|
|
// WithSession 返回携带 session 的 Flow
|
||
|
|
func (f *Flow) WithSession(s Map) *Flow {
|
||
|
|
return &Flow{
|
||
|
|
app: f.app,
|
||
|
|
t: f.t,
|
||
|
|
name: f.name,
|
||
|
|
group: f.group,
|
||
|
|
desc: f.desc,
|
||
|
|
prep: f.prep,
|
||
|
|
session: s,
|
||
|
|
stepIdx: f.stepIdx,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Step 开始流程中的一步,返回指向指定路径的 Api(记录会归入 flows)
|
||
|
|
func (f *Flow) Step(stepName, path string) *Api {
|
||
|
|
f.stepIdx++
|
||
|
|
return &Api{
|
||
|
|
app: f.app,
|
||
|
|
path: path,
|
||
|
|
t: f.t,
|
||
|
|
session: f.session,
|
||
|
|
flowName: f.name,
|
||
|
|
flowGroup: f.group,
|
||
|
|
flowDesc: f.desc,
|
||
|
|
flowPrep: f.prep,
|
||
|
|
flowStep: stepName,
|
||
|
|
flowStepIndex: f.stepIdx,
|
||
|
|
flowParent: f,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// AtPath 在当前流程上下文中切换路径(不增加步骤序号)
|
||
|
|
func (f *Flow) AtPath(path string) *Api {
|
||
|
|
return &Api{
|
||
|
|
app: f.app,
|
||
|
|
path: path,
|
||
|
|
t: f.t,
|
||
|
|
session: f.session,
|
||
|
|
flowName: f.name,
|
||
|
|
flowGroup: f.group,
|
||
|
|
flowDesc: f.desc,
|
||
|
|
flowPrep: f.prep,
|
||
|
|
flowStep: "",
|
||
|
|
flowStepIndex: f.stepIdx,
|
||
|
|
flowParent: f,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// DB 获取测试库(流程级事务内)
|
||
|
|
func (f *Flow) DB() *HoTimeDB {
|
||
|
|
return f.app.DB()
|
||
|
|
}
|
||
|
|
|
||
|
|
// Resp 最近一次步骤响应
|
||
|
|
func (f *Flow) Resp() *ApiResponse {
|
||
|
|
return f.lastResp
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetLastResp 由框架在步骤执行后更新
|
||
|
|
func (f *Flow) SetLastResp(r *ApiResponse) {
|
||
|
|
f.lastResp = r
|
||
|
|
}
|