demo 账号:admin,密码:123456
在前面的章节中,我们了解了每个测试用例的执行都是由一个运行对象CaseRunner
来管理的。以下是CaseRunner
的主要执行步骤:
- 判断接口可用性: 通过调用
HasNext
方法判断是否还有待执行的接口。 - 创建运行会话: 通过
NewSession
方法创建一个运行会话,用于执行当前接口。 - 启动接口运行: 通过
Start
方法开始运行当前接口,这包括了解析和处理请求参数、执行SetupHooks
、发起实际请求、解析响应、执行TeardownHooks
等步骤。 - 获取运行结果: 通过
GetSummary
方法获取接口运行结果,并将其汇总组装到测试报告列表中。 - 退出机制: 在接口运行失败的情况下,根据设置的中断条件,可以终止整个用例的运行。
通过以上流程,CaseRunner
保证了每个测试用例的顺序执行,将每个接口的运行结果汇总到测试报告中,并提供了灵活的退出机制,以满足不同运行需求。
for it := caseRunner.parametersIterator; it.HasNext(); {
// 每次运行都有自己的会话运行器
sessionRunner := caseRunner.NewSession()
err1 := sessionRunner.Start(it.Next())
if err1 != nil {
log.Error().Err(err1).Msg("[Run] run testcase failed")
runErr = err1
}
// 获取用例的执行结果
caseSummary, err2 := sessionRunner.GetSummary()
s.appendCaseSummary(caseSummary)
if err2 != nil {
log.Error().Err(err2).Msg("[Run] get summary failed")
if err1 != nil {
runErr = errors.Wrap(err1, err2.Error())
} else {
runErr = err2
}
}
// 如果发生错误且设置了failfast标志,则终止运行
// 实际操作一般都会执行所有用例后,最后获取用例执行情况
if runErr != nil && r.failfast {
break
}
}
SessionRunner
是一个结构体,它用于管理测试用例执行的会话过程,包含了多个成员变量和方法。以下是 SessionRunner
结构体中的成员变量和方法,以及它们的大致作用,由于代码篇幅太长,如果需要看具体方法的源码解析,可以到项目查看:
成员变量:
caseRunner
: 指向执行当前会话的CaseRunner
实例。sessionVariables
: 保存会话中的变量和数据,可以在不同步骤之间共享。transactions
: 记录事务的时间信息,以事务名为键,存储事务类型和时间信息。startTime
: 记录会话开始的时间。summary
: 保存会话的测试结果和摘要信息。wsConnMap
: 保存所有WebSocket
连接的映射。inheritWsConnMap
: 保存继承的WebSocke
t 连接的映射。pongResponseChan
: 用于接收WebSocket
的Pong
响应消息的通道。closeResponseChan
: 用于接收WebSocket
的关闭响应消息的通道。
方法:
resetSession()
: 重置会话,清空会话变量、事务信息等,用于开始新的测试会话。inheritConnection(src *SessionRunner)
: 继承另一个SessionRunner
的WebSocket
连接。Start(givenVars map[string]interface{}) error
: 开始执行会话的测试步骤,按顺序运行每个步骤。ParseStepVariables(stepVariables map[string]interface{}) (map[string]interface{}, error)
: