diff --git a/parser.go b/parser.go new file mode 100644 index 00000000..48ec28d7 --- /dev/null +++ b/parser.go @@ -0,0 +1,29 @@ +package httpboomer + +import ( + "log" + "net/url" +) + +func parseStep(step IStep, config *TConfig) *TStep { + tStep := step.ToStruct() + tStep.Request.URL = buildURL(config.BaseURL, tStep.Request.URL) + return tStep +} + +func buildURL(baseURL, stepURL string) string { + uConfig, err := url.Parse(baseURL) + if err != nil { + log.Fatalf("[buildURL] baseURL: %v, error: %v", baseURL, err) + return "" + } + + uStep, err := uConfig.Parse(stepURL) + if err != nil { + log.Fatalf("[buildURL] baseURL: %v, error: %v", baseURL, err) + return "" + } + + // base url missed + return uStep.String() +} diff --git a/parser_test.go b/parser_test.go new file mode 100644 index 00000000..5e1b67ac --- /dev/null +++ b/parser_test.go @@ -0,0 +1,29 @@ +package httpboomer + +import ( + "testing" +) + +func TestBuildURL(t *testing.T) { + var url string + url = buildURL("https://postman-echo.com", "/get") + if url != "https://postman-echo.com/get" { + t.Fatalf("buildURL error, %s != 'https://postman-echo.com/get'", url) + } + + url = buildURL("https://postman-echo.com/abc/", "/get?a=1&b=2") + if url != "https://postman-echo.com/get?a=1&b=2" { + t.Fatalf("buildURL error, %s != 'https://postman-echo.com/get'", url) + } + + url = buildURL("", "https://postman-echo.com/get") + if url != "https://postman-echo.com/get" { + t.Fatalf("buildURL error, %s != 'https://postman-echo.com/get'", url) + } + + // notice: step request url > config base url + url = buildURL("https://postman-echo.com", "https://httpbin.org/get") + if url != "https://httpbin.org/get" { + t.Fatalf("buildURL error, %s != 'https://httpbin.org/get'", url) + } +} diff --git a/runner.go b/runner.go index 4196d74f..2362ab3a 100644 --- a/runner.go +++ b/runner.go @@ -44,12 +44,6 @@ func (r *Runner) runCase(testcase *TestCase) error { return nil } -func parseStep(step IStep, config *TConfig) *TStep { - tStep := step.ToStruct() - tStep.Request.URL = config.BaseURL + tStep.Request.URL - return tStep -} - func (r *Runner) runStep(step *TStep) error { log.Printf("run step begin: %v >>>>>>", step.Name) var v []interface{}