mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-17 05:17:36 +08:00
feat: parse variable
This commit is contained in:
55
parser.go
55
parser.go
@@ -1,8 +1,11 @@
|
||||
package httpboomer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func parseStep(step IStep, config *TConfig) *TStep {
|
||||
@@ -27,3 +30,55 @@ func buildURL(baseURL, stepURL string) string {
|
||||
// base url missed
|
||||
return uStep.String()
|
||||
}
|
||||
|
||||
func parseData(raw interface{}, variablesMapping map[string]interface{}) interface{} {
|
||||
switch v := raw.(type) {
|
||||
case string:
|
||||
v = strings.TrimSpace(v)
|
||||
return parseString(v, variablesMapping)
|
||||
default:
|
||||
return raw
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
regexCompileVariable = regexp.MustCompile(`\$\{(\w+)\}|\$(\w+)`) // parse ${var} or $var
|
||||
)
|
||||
|
||||
// parseString parse string with variables
|
||||
func parseString(raw string, variablesMapping map[string]interface{}) interface{} {
|
||||
matchStartPosition := strings.Index(raw, "$")
|
||||
if matchStartPosition == -1 { // no $ found
|
||||
return raw
|
||||
}
|
||||
parsedString := raw[0:matchStartPosition]
|
||||
|
||||
for matchStartPosition < len(raw) {
|
||||
// search variable like ${var} or $var
|
||||
varMatched := regexCompileVariable.FindStringSubmatch(raw[matchStartPosition:])
|
||||
if len(varMatched) == 3 {
|
||||
var varName string
|
||||
if varMatched[1] != "" {
|
||||
varName = varMatched[1] // match ${var}
|
||||
} else {
|
||||
varName = varMatched[2] // match $var
|
||||
}
|
||||
varValue := variablesMapping[varName]
|
||||
|
||||
if fmt.Sprintf("${%s}", varName) == raw || fmt.Sprintf("$%s", varName) == raw {
|
||||
// raw string is a variable, $var or ${var}, return its value directly
|
||||
return varValue
|
||||
}
|
||||
|
||||
parsedString += fmt.Sprintf("%v", varValue)
|
||||
matchStartPosition += len(varMatched[0])
|
||||
log.Printf("[parseString] parsedString: %v, matchStartPosition: %v", parsedString, matchStartPosition)
|
||||
continue
|
||||
}
|
||||
|
||||
// append remained string
|
||||
parsedString += raw[matchStartPosition:]
|
||||
}
|
||||
|
||||
return parsedString
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user