mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-11 18:11:21 +08:00
98 lines
5.1 KiB
Go
98 lines
5.1 KiB
Go
package hrp
|
||
|
||
type StepType string
|
||
|
||
const (
|
||
stepTypeRequest StepType = "request"
|
||
stepTypeAPI StepType = "api"
|
||
stepTypeTestCase StepType = "testcase"
|
||
stepTypeTransaction StepType = "transaction"
|
||
stepTypeRendezvous StepType = "rendezvous"
|
||
stepTypeThinkTime StepType = "thinktime"
|
||
stepTypeWebSocket StepType = "websocket"
|
||
stepTypeAndroid StepType = "android"
|
||
stepTypeIOS StepType = "ios"
|
||
)
|
||
|
||
type MobileMethod string
|
||
|
||
const (
|
||
appInstall MobileMethod = "install"
|
||
appUninstall MobileMethod = "uninstall"
|
||
appStart MobileMethod = "app_start"
|
||
appLaunch MobileMethod = "app_launch" // 等待 app 打开并堵塞到 app 首屏加载完成,可以传入 app 的启动参数、环境变量
|
||
appLaunchUnattached MobileMethod = "app_launch_unattached" // 只负责通知打开 app,不堵塞等待,不可传入启动参数
|
||
appTerminate MobileMethod = "app_terminate"
|
||
appStop MobileMethod = "app_stop"
|
||
ctlScreenShot MobileMethod = "screenshot"
|
||
ctlSleep MobileMethod = "sleep"
|
||
ctlStartCamera MobileMethod = "camera_start" // alias for app_launch camera
|
||
ctlStopCamera MobileMethod = "camera_stop" // alias for app_terminate camera
|
||
recordStart MobileMethod = "record_start"
|
||
recordStop MobileMethod = "record_stop"
|
||
|
||
// UI handling
|
||
uiHome MobileMethod = "home"
|
||
uiClick MobileMethod = "click"
|
||
uiDoubleClick MobileMethod = "double_click"
|
||
uiLongClick MobileMethod = "long_click"
|
||
uiSwipe MobileMethod = "swipe"
|
||
uiInput MobileMethod = "input"
|
||
|
||
// UI validation
|
||
uiSelectorName string = "ui_name"
|
||
uiSelectorXpath string = "ui_xpath"
|
||
uiSelectorOCR string = "ui_ocr"
|
||
assertionExists string = "exists"
|
||
assertionNotExists string = "not_exists"
|
||
)
|
||
|
||
type MobileAction struct {
|
||
Method MobileMethod `json:"method" yaml:"method"`
|
||
Params interface{} `json:"params,omitempty" yaml:"params,omitempty"`
|
||
}
|
||
|
||
type StepResult struct {
|
||
Name string `json:"name" yaml:"name"` // step name
|
||
StepType StepType `json:"step_type" yaml:"step_type"` // step type, testcase/request/transaction/rendezvous
|
||
Success bool `json:"success" yaml:"success"` // step execution result
|
||
Elapsed int64 `json:"elapsed_ms" yaml:"elapsed_ms"` // step execution time in millisecond(ms)
|
||
HttpStat map[string]int64 `json:"httpstat,omitempty" yaml:"httpstat,omitempty"` // httpstat in millisecond(ms)
|
||
Data interface{} `json:"data,omitempty" yaml:"data,omitempty"` // session data or slice of step data
|
||
ContentSize int64 `json:"content_size" yaml:"content_size"` // response body length
|
||
ExportVars map[string]interface{} `json:"export_vars,omitempty" yaml:"export_vars,omitempty"` // extract variables
|
||
Attachment string `json:"attachment,omitempty" yaml:"attachment,omitempty"` // step error information
|
||
}
|
||
|
||
// TStep represents teststep data structure.
|
||
// Each step maybe three different types: make one request or reference another api/testcase.
|
||
type TStep struct {
|
||
Name string `json:"name" yaml:"name"` // required
|
||
Request *Request `json:"request,omitempty" yaml:"request,omitempty"`
|
||
API interface{} `json:"api,omitempty" yaml:"api,omitempty"` // *APIPath or *API
|
||
TestCase interface{} `json:"testcase,omitempty" yaml:"testcase,omitempty"` // *TestCasePath or *TestCase
|
||
Transaction *Transaction `json:"transaction,omitempty" yaml:"transaction,omitempty"`
|
||
Rendezvous *Rendezvous `json:"rendezvous,omitempty" yaml:"rendezvous,omitempty"`
|
||
ThinkTime *ThinkTime `json:"think_time,omitempty" yaml:"think_time,omitempty"`
|
||
WebSocket *WebSocketAction `json:"websocket,omitempty" yaml:"websocket,omitempty"`
|
||
Android *AndroidAction `json:"android,omitempty" yaml:"android,omitempty"`
|
||
IOS *IOSAction `json:"ios,omitempty" yaml:"ios,omitempty"`
|
||
Variables map[string]interface{} `json:"variables,omitempty" yaml:"variables,omitempty"`
|
||
SetupHooks []string `json:"setup_hooks,omitempty" yaml:"setup_hooks,omitempty"`
|
||
TeardownHooks []string `json:"teardown_hooks,omitempty" yaml:"teardown_hooks,omitempty"`
|
||
Extract map[string]string `json:"extract,omitempty" yaml:"extract,omitempty"`
|
||
Validators []interface{} `json:"validate,omitempty" yaml:"validate,omitempty"`
|
||
Export []string `json:"export,omitempty" yaml:"export,omitempty"`
|
||
}
|
||
|
||
// IStep represents interface for all types for teststeps, includes:
|
||
// StepRequest, StepRequestWithOptionalArgs, StepRequestValidation, StepRequestExtraction,
|
||
// StepTestCaseWithOptionalArgs,
|
||
// StepTransaction, StepRendezvous, StepWebSocket.
|
||
type IStep interface {
|
||
Name() string
|
||
Type() StepType
|
||
Struct() *TStep
|
||
Run(*SessionRunner) (*StepResult, error)
|
||
}
|