feat: support setup/teardown hooks

Change-Id: I148e11c190859b57dd5268cfe5643762e43bd64a
This commit is contained in:
buyuxiang
2022-02-22 21:00:52 +08:00
parent 4992e2e87b
commit 82d9dce168
7 changed files with 56 additions and 1 deletions

View File

@@ -1,5 +1,9 @@
# Release History
## v0.6.3 (2022-02-22)
- feat: support customized setup/teardown hooks (variable assignment not supported)
## v0.6.2 (2022-02-22)
- feat: support text/html extraction with regex

View File

@@ -34,8 +34,15 @@
"variables": {
"b": 34.5,
"n": 3,
"name": "get with params",
"varFoo2": "${max($a, $b)}"
},
"setup_hooks": [
"${setup_hook_example($name)}"
],
"teardown_hooks": [
"${teardown_hook_example($name)}"
],
"extract": {
"varFoo1": "body.args.foo1"
},

View File

@@ -24,7 +24,12 @@ teststeps:
variables:
b: 34.5
"n": 3
name: get with params
varFoo2: ${max($a, $b)}
setup_hooks:
- ${setup_hook_example($name)}
teardown_hooks:
- ${teardown_hook_example($name)}
extract:
varFoo1: body.args.foo1
validate:

View File

@@ -55,3 +55,11 @@ func Concatenate(args ...interface{}) (interface{}, error) {
}
return result, nil
}
func SetupHookExample(args string) string {
return fmt.Sprintf("step name: %v, setup...", args)
}
func TeardownHookExample(args string) string {
return fmt.Sprintf("step name: %v, teardown...", args)
}

View File

@@ -10,5 +10,7 @@ func main() {
plugin.Register("sum_two_string", SumTwoString)
plugin.Register("sum_strings", SumStrings)
plugin.Register("concatenate", Concatenate)
plugin.Register("setup_hook_example", SetupHookExample)
plugin.Register("teardown_hook_example", TeardownHookExample)
plugin.Serve()
}

View File

@@ -19,8 +19,11 @@ var demoTestCase = &hrp.TestCase{
"n": 3, // inherit config level variables if not set in step level, a/varFoo1
"b": 34.5, // override config level variable if existed, n/b/varFoo2
"varFoo2": "${max($a, $b)}", // 34.5; override variable b and eval again
"name": "get with params",
}).
SetupHook("${setup_hook_example($name)}").
GET("/get").
TeardownHook("${teardown_hook_example($name)}").
WithParams(map[string]interface{}{"foo1": "$varFoo1", "foo2": "$varFoo2"}). // request with params
WithHeaders(map[string]string{"User-Agent": "HttpRunnerPlus"}). // request with headers
Extract().
@@ -99,10 +102,20 @@ func Sum(args ...interface{}) (interface{}, error) {
return sum, nil
}
func SetupHookExample(args string) string {
return fmt.Sprintf("step name: %v, setup...", args)
}
func TeardownHookExample(args string) string {
return fmt.Sprintf("step name: %v, teardown...", args)
}
func main() {
plugin.Register("sum_ints", SumInts)
plugin.Register("sum_two_int", SumTwoInt)
plugin.Register("sum", Sum)
plugin.Register("setup_hook_example", SetupHookExample)
plugin.Register("teardown_hook_example", TeardownHookExample)
plugin.Serve()
}
`

View File

@@ -616,6 +616,14 @@ func (r *caseRunner) runStepRequest(step *TStep) (stepResult *stepData, err erro
}
sessionData := newSessionData()
// deal with setup hooks
for _, setupHook := range step.SetupHooks {
_, err = r.parser.parseData(setupHook, step.Variables)
if err != nil {
return stepResult, errors.Wrap(err, "run setup hooks failed")
}
}
// convert request struct to map
jsonRequest, _ := json.Marshal(&step.Request)
var requestMap map[string]interface{}
@@ -659,7 +667,7 @@ func (r *caseRunner) runStepRequest(step *TStep) (stepResult *stepData, err erro
if len(step.Request.Params) > 0 {
params, err := r.parser.parseData(step.Request.Params, step.Variables)
if err != nil {
return stepResult, errors.Wrap(err, "parse data failed")
return stepResult, errors.Wrap(err, "parse request params failed")
}
parsedParams := params.(map[string]interface{})
requestMap["params"] = parsedParams
@@ -797,6 +805,14 @@ func (r *caseRunner) runStepRequest(step *TStep) (stepResult *stepData, err erro
}
stepResult.ContentSize = resp.ContentLength
stepResult.Data = sessionData
// deal with teardown hooks
for _, teardownHook := range step.TeardownHooks {
_, err = r.parser.parseData(teardownHook, step.Variables)
if err != nil {
return stepResult, errors.Wrap(err, "run teardown hooks failed")
}
}
return stepResult, err
}