mirror of
https://github.com/httprunner/httprunner.git
synced 2026-06-07 08:49:37 +08:00
fix #1220: parse step url with base url
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
builtinJSON "encoding/json"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"path"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strings"
|
||||
@@ -26,18 +27,29 @@ type Parser struct {
|
||||
}
|
||||
|
||||
func buildURL(baseURL, stepURL string) string {
|
||||
uConfig, err := url.Parse(baseURL)
|
||||
uStep, err := url.Parse(stepURL)
|
||||
if err != nil {
|
||||
log.Error().Str("baseURL", baseURL).Err(err).Msg("[buildURL] parse baseURL failed")
|
||||
log.Error().Str("stepURL", stepURL).Err(err).Msg("[buildURL] parse url failed")
|
||||
return ""
|
||||
}
|
||||
|
||||
uStep, err := uConfig.Parse(stepURL)
|
||||
// step url is absolute url
|
||||
if uStep.Host != "" {
|
||||
return stepURL
|
||||
}
|
||||
|
||||
// step url is relative, based on base url
|
||||
uConfig, err := url.Parse(baseURL)
|
||||
if err != nil {
|
||||
log.Error().Str("stepURL", stepURL).Err(err).Msg("[buildURL] parse stepURL failed")
|
||||
log.Error().Str("baseURL", baseURL).Err(err).Msg("[buildURL] parse url failed")
|
||||
return ""
|
||||
}
|
||||
|
||||
// merge url
|
||||
uStep.Scheme = uConfig.Scheme
|
||||
uStep.Host = uConfig.Host
|
||||
uStep.Path = path.Join(uConfig.Path, uStep.Path)
|
||||
|
||||
// base url missed
|
||||
return uStep.String()
|
||||
}
|
||||
|
||||
@@ -11,25 +11,44 @@ import (
|
||||
|
||||
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)
|
||||
if !assert.Equal(t, url, "https://postman-echo.com/get") {
|
||||
t.Fail()
|
||||
}
|
||||
url = buildURL("https://postman-echo.com", "get")
|
||||
if !assert.Equal(t, url, "https://postman-echo.com/get") {
|
||||
t.Fail()
|
||||
}
|
||||
url = buildURL("https://postman-echo.com/", "/get")
|
||||
if !assert.Equal(t, url, "https://postman-echo.com/get") {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
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)
|
||||
if !assert.Equal(t, url, "https://postman-echo.com/abc/get?a=1&b=2") {
|
||||
t.Fail()
|
||||
}
|
||||
url = buildURL("https://postman-echo.com/abc", "get?a=1&b=2")
|
||||
if !assert.Equal(t, url, "https://postman-echo.com/abc/get?a=1&b=2") {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
// omit query string in base url
|
||||
url = buildURL("https://postman-echo.com/abc?x=6&y=9", "/get?a=1&b=2")
|
||||
if !assert.Equal(t, url, "https://postman-echo.com/abc/get?a=1&b=2") {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
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)
|
||||
if !assert.Equal(t, url, "https://postman-echo.com/get") {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
// 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)
|
||||
if !assert.Equal(t, url, "https://httpbin.org/get") {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user