fix: convert tests

This commit is contained in:
lilong.129
2025-03-05 22:23:31 +08:00
parent f5dff25d26
commit b298441eba
22 changed files with 1141 additions and 266 deletions

View File

@@ -6,71 +6,49 @@ import (
"github.com/stretchr/testify/assert"
)
var curlPath = "../examples/data/curl/curl_examples.txt"
var curlPath = "../tests/data/curl/curl_examples.txt"
func TestLoadCurlCase(t *testing.T) {
tCase, err := LoadCurlCase(curlPath)
if !assert.NoError(t, err) {
t.Fatal(err)
}
if !assert.Equal(t, 6, len(tCase.Steps)) {
t.Fatal()
}
assert.Nil(t, err)
assert.Equal(t, 6, len(tCase.Steps))
// curl httpbin.org
if !assert.Equal(t, "curl httpbin.org", tCase.Steps[0].StepName) {
t.Fatal()
}
if !assert.EqualValues(t, "GET", tCase.Steps[0].Request.Method) {
t.Fatal()
}
if !assert.Equal(t, "http://httpbin.org", tCase.Steps[0].Request.URL) {
t.Fatal()
}
assert.Equal(t, "curl httpbin.org", tCase.Steps[0].StepName)
assert.EqualValues(t, "GET", tCase.Steps[0].Request.Method)
assert.Equal(t, "http://httpbin.org", tCase.Steps[0].Request.URL)
// curl https://httpbin.org/get?key1=value1&key2=value2
if !assert.Equal(t, "https://httpbin.org/get", tCase.Steps[1].Request.URL) {
t.Fatal()
}
if !assert.Equal(t, map[string]interface{}{
assert.Equal(t, "https://httpbin.org/get", tCase.Steps[1].Request.URL)
assert.Equal(t, map[string]interface{}{
"key1": "value1",
"key2": "value2",
}, tCase.Steps[1].Request.Params) {
t.Fatal()
}
}, tCase.Steps[1].Request.Params)
// curl -H "Content-Type: application/json" \
// -H "Authorization: Bearer b7d03a6947b217efb6f3ec3bd3504582" \
// -d '{"type":"A","name":"www","data":"162.10.66.0","priority":null,"port":null,"weight":null}' \
// "https://httpbin.org/post"
if !assert.EqualValues(t, "POST", tCase.Steps[2].Request.Method) {
t.Fatal()
}
if !assert.Equal(t, map[string]string{
assert.EqualValues(t, "POST", tCase.Steps[2].Request.Method)
assert.Equal(t, map[string]string{
"Authorization": "Bearer b7d03a6947b217efb6f3ec3bd3504582",
"Content-Type": "application/json",
}, tCase.Steps[2].Request.Headers) {
t.Fatal()
}
if !assert.Equal(t, map[string]interface{}{
}, tCase.Steps[2].Request.Headers)
assert.Equal(t, map[string]interface{}{
"data": "162.10.66.0",
"name": "www",
"port": nil,
"priority": nil,
"type": "A",
"weight": nil,
}, tCase.Steps[2].Request.Body) {
t.Fatal()
}
}, tCase.Steps[2].Request.Body)
// curl -F "dummyName=dummyFile" -F file1=@file1.txt -F file2=@file2.txt https://httpbin.org/post
if !assert.Equal(t, map[string]interface{}{
assert.Equal(t, map[string]interface{}{
"dummyName": "dummyFile",
"file1": "@file1.txt",
"file2": "@file2.txt",
}, tCase.Steps[3].Request.Upload) {
t.Fatal()
}
}, tCase.Steps[3].Request.Upload)
// curl https://httpbin.org/post \
// -d 'shipment[to_address][id]=adr_HrBKVA85' \
@@ -78,27 +56,21 @@ func TestLoadCurlCase(t *testing.T) {
// -d 'shipment[parcel][id]=prcl_WDv2VzHp' \
// -d 'shipment[is_return]=true' \
// -d 'shipment[customs_info][id]=cstinfo_bl5sE20Y'
if !assert.Equal(t, map[string]interface{}{
assert.Equal(t, map[string]interface{}{
"shipment[customs_info][id]": "cstinfo_bl5sE20Y",
"shipment[from_address][id]": "adr_VtuTOj7o",
"shipment[is_return]": "true",
"shipment[parcel][id]": "prcl_WDv2VzHp",
"shipment[to_address][id]": "adr_HrBKVA85",
}, tCase.Steps[4].Request.Body) {
t.Fatal()
}
}, tCase.Steps[4].Request.Body)
// curl https://httpbing.org/post -H "Content-Type: application/x-www-form-urlencoded" \
// --data "key1=value+1&key2=value%3A2"
if !assert.Equal(t, map[string]string{
assert.Equal(t, map[string]string{
"Content-Type": "application/x-www-form-urlencoded",
}, tCase.Steps[5].Request.Headers) {
t.Fatal()
}
if !assert.Equal(t, map[string]interface{}{
}, tCase.Steps[5].Request.Headers)
assert.Equal(t, map[string]interface{}{
"key1": "value 1",
"key2": "value:2",
}, tCase.Steps[5].Request.Body) {
t.Fatal()
}
}, tCase.Steps[5].Request.Body)
}

View File

@@ -5,79 +5,44 @@ import (
hrp "github.com/httprunner/httprunner/v5"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
var harPath = "../../../examples/data/har/demo.har"
var caseHar *CaseHar
func init() {
caseHar, _ = loadCaseHAR(harPath)
}
var harPath = "../tests/data/har/demo.har"
func TestLoadHAR(t *testing.T) {
caseHAR, err := loadCaseHAR(harPath)
if !assert.NoError(t, err) {
t.Fatal()
}
if !assert.Equal(t, "GET", caseHAR.Log.Entries[0].Request.Method) {
t.Fatal()
}
if !assert.Equal(t, "POST", caseHAR.Log.Entries[1].Request.Method) {
t.Fatal()
}
require.NoError(t, err)
assert.Equal(t, "GET", caseHAR.Log.Entries[0].Request.Method)
assert.Equal(t, "POST", caseHAR.Log.Entries[1].Request.Method)
}
func TestLoadTCaseFromHAR(t *testing.T) {
tCase, err := LoadHARCase(harPath)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
// make request method
if !assert.EqualValues(t, "GET", tCase.Steps[0].Request.Method) {
t.Fatal()
}
if !assert.EqualValues(t, "POST", tCase.Steps[1].Request.Method) {
t.Fatal()
}
assert.EqualValues(t, "GET", tCase.Steps[0].Request.Method)
assert.EqualValues(t, "POST", tCase.Steps[1].Request.Method)
// make request url
if !assert.Equal(t, "https://postman-echo.com/get", tCase.Steps[0].Request.URL) {
t.Fatal()
}
if !assert.Equal(t, "https://postman-echo.com/post", tCase.Steps[1].Request.URL) {
t.Fatal()
}
assert.Equal(t, "https://postman-echo.com/get", tCase.Steps[0].Request.URL)
assert.Equal(t, "https://postman-echo.com/post", tCase.Steps[1].Request.URL)
// make request params
if !assert.Equal(t, "HDnY8", tCase.Steps[0].Request.Params["foo1"]) {
t.Fatal()
}
assert.Equal(t, "HDnY8", tCase.Steps[0].Request.Params["foo1"])
// make request cookies
if !assert.NotEmpty(t, tCase.Steps[1].Request.Cookies["sails.sid"]) {
t.Fatal()
}
assert.NotEmpty(t, tCase.Steps[1].Request.Cookies["sails.sid"])
// make request headers
if !assert.Equal(t, "HttpRunnerPlus", tCase.Steps[0].Request.Headers["User-Agent"]) {
t.Fatal()
}
if !assert.Equal(t, "postman-echo.com", tCase.Steps[0].Request.Headers["Host"]) {
t.Fatal()
}
assert.Equal(t, "HttpRunnerPlus", tCase.Steps[0].Request.Headers["User-Agent"])
assert.Equal(t, "postman-echo.com", tCase.Steps[0].Request.Headers["Host"])
// make request data
if !assert.Equal(t, nil, tCase.Steps[0].Request.Body) {
t.Fatal()
}
if !assert.Equal(t, map[string]interface{}{"foo1": "HDnY8", "foo2": 12.3}, tCase.Steps[1].Request.Body) {
t.Fatal()
}
if !assert.Equal(t, map[string]string{"foo1": "HDnY8", "foo2": "12.3"}, tCase.Steps[2].Request.Body) {
t.Fatal()
}
assert.Equal(t, nil, tCase.Steps[0].Request.Body)
assert.Equal(t, map[string]interface{}{"foo1": "HDnY8", "foo2": 12.3}, tCase.Steps[1].Request.Body)
assert.Equal(t, map[string]string{"foo1": "HDnY8", "foo2": "12.3"}, tCase.Steps[2].Request.Body)
// make validators
validator, ok := tCase.Steps[0].Validators[0].(hrp.Validator)
@@ -100,14 +65,12 @@ func TestMakeRequestURL(t *testing.T) {
URL: "http://127.0.0.1:8080/api/login",
},
}
caseHar, err := loadCaseHAR(harPath)
require.NoError(t, err)
step, err := caseHar.prepareTestStep(entry)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
if !assert.Equal(t, "http://127.0.0.1:8080/api/login", step.Request.URL) {
t.Fatal()
}
assert.Equal(t, "http://127.0.0.1:8080/api/login", step.Request.URL)
}
func TestMakeRequestHeaders(t *testing.T) {
@@ -119,16 +82,14 @@ func TestMakeRequestHeaders(t *testing.T) {
},
},
}
caseHar, err := loadCaseHAR(harPath)
require.NoError(t, err)
step, err := caseHar.prepareTestStep(entry)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
if !assert.Equal(t, map[string]string{
assert.Equal(t, map[string]string{
"Content-Type": "application/json; charset=utf-8",
}, step.Request.Headers) {
t.Fatal()
}
}, step.Request.Headers)
}
func TestMakeRequestCookies(t *testing.T) {
@@ -141,17 +102,15 @@ func TestMakeRequestCookies(t *testing.T) {
},
},
}
caseHar, err := loadCaseHAR(harPath)
require.NoError(t, err)
step, err := caseHar.prepareTestStep(entry)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
if !assert.Equal(t, map[string]string{
assert.Equal(t, map[string]string{
"abc": "123",
"UserName": "leolee",
}, step.Request.Cookies) {
t.Fatal()
}
}, step.Request.Cookies)
}
func TestMakeRequestDataParams(t *testing.T) {
@@ -167,14 +126,12 @@ func TestMakeRequestDataParams(t *testing.T) {
},
},
}
caseHar, err := loadCaseHAR(harPath)
require.NoError(t, err)
step, err := caseHar.prepareTestStep(entry)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
if !assert.Equal(t, map[string]string{"a": "1", "b": "2"}, step.Request.Body) {
t.Fatal()
}
assert.Equal(t, map[string]string{"a": "1", "b": "2"}, step.Request.Body)
}
func TestMakeRequestDataJSON(t *testing.T) {
@@ -187,14 +144,12 @@ func TestMakeRequestDataJSON(t *testing.T) {
},
},
}
caseHar, err := loadCaseHAR(harPath)
require.NoError(t, err)
step, err := caseHar.prepareTestStep(entry)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
if !assert.Equal(t, map[string]interface{}{"a": "1", "b": "2"}, step.Request.Body) {
t.Fatal()
}
assert.Equal(t, map[string]interface{}{"a": "1", "b": "2"}, step.Request.Body)
}
func TestMakeRequestDataTextEmpty(t *testing.T) {
@@ -207,14 +162,11 @@ func TestMakeRequestDataTextEmpty(t *testing.T) {
},
},
}
caseHar, err := loadCaseHAR(harPath)
require.NoError(t, err)
step, err := caseHar.prepareTestStep(entry)
if !assert.NoError(t, err) {
t.Fatal()
}
if !assert.Equal(t, nil, step.Request.Body) { // TODO
t.Fatal()
}
assert.NoError(t, err)
assert.Equal(t, nil, step.Request.Body)
}
func TestMakeValidate(t *testing.T) {
@@ -233,49 +185,37 @@ func TestMakeValidate(t *testing.T) {
},
},
}
caseHar, err := loadCaseHAR(harPath)
require.NoError(t, err)
step, err := caseHar.prepareTestStep(entry)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
validator, ok := step.Validators[0].(hrp.Validator)
if !ok {
t.Fatal()
}
if !assert.Equal(t, validator,
assert.True(t, ok)
assert.Equal(t, validator,
hrp.Validator{
Check: "status_code",
Expect: 200,
Assert: "equals",
Message: "assert response status code",
}) {
t.Fatal()
}
})
validator, ok = step.Validators[1].(hrp.Validator)
if !ok {
t.Fatal()
}
if !assert.Equal(t, validator,
assert.True(t, ok)
assert.Equal(t, validator,
hrp.Validator{
Check: "headers.\"Content-Type\"",
Expect: "application/json; charset=utf-8",
Assert: "equals",
Message: "assert response header Content-Type",
}) {
t.Fatal()
}
})
validator, ok = step.Validators[2].(hrp.Validator)
if !ok {
t.Fatal()
}
if !assert.Equal(t, validator,
assert.True(t, ok)
assert.Equal(t, validator,
hrp.Validator{
Check: "body.Code",
Expect: float64(200), // TODO
Assert: "equals",
Message: "assert response body Code",
}) {
t.Fatal()
}
})
}

View File

@@ -6,73 +6,37 @@ import (
"github.com/stretchr/testify/assert"
)
var collectionPath = "../../../examples/data/postman/postman_collection.json"
var collectionPath = "../tests/data/postman/postman_collection.json"
func TestLoadCollection(t *testing.T) {
casePostman, err := loadCasePostman(collectionPath)
if !assert.NoError(t, err) {
t.Fatal(err)
}
if !assert.Equal(t, "postman collection demo", casePostman.Info.Name) {
t.Fatal()
}
assert.NoError(t, err)
assert.Equal(t, "postman collection demo", casePostman.Info.Name)
}
func TestMakeTestCaseFromCollection(t *testing.T) {
tCase, err := LoadPostmanCase(collectionPath)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
// check name
if !assert.Equal(t, "postman collection demo", tCase.Config.Name) {
t.Fatal()
}
assert.Equal(t, "postman collection demo", tCase.Config.Name)
// check method
if !assert.EqualValues(t, "GET", tCase.Steps[0].Request.Method) {
t.Fatal()
}
if !assert.EqualValues(t, "POST", tCase.Steps[1].Request.Method) {
t.Fatal()
}
assert.EqualValues(t, "GET", tCase.Steps[0].Request.Method)
assert.EqualValues(t, "POST", tCase.Steps[1].Request.Method)
// check url
if !assert.Equal(t, "https://postman-echo.com/get", tCase.Steps[0].Request.URL) {
t.Fatal()
}
if !assert.Equal(t, "https://postman-echo.com/post", tCase.Steps[1].Request.URL) {
t.Fatal()
}
assert.Equal(t, "https://postman-echo.com/get", tCase.Steps[0].Request.URL)
assert.Equal(t, "https://postman-echo.com/post", tCase.Steps[1].Request.URL)
// check params
if !assert.Equal(t, "v1", tCase.Steps[0].Request.Params["k1"]) {
t.Fatal()
}
assert.Equal(t, "v1", tCase.Steps[0].Request.Params["k1"])
// check cookies (pass, postman collection doesn't contain cookies)
// check headers
if !assert.Equal(t, "application/x-www-form-urlencoded", tCase.Steps[2].Request.Headers["Content-Type"]) {
t.Fatal()
}
if !assert.Equal(t, "application/json", tCase.Steps[3].Request.Headers["Content-Type"]) {
t.Fatal()
}
if !assert.Equal(t, "text/plain", tCase.Steps[4].Request.Headers["Content-Type"]) {
t.Fatal()
}
if !assert.Equal(t, "HttpRunner", tCase.Steps[5].Request.Headers["User-Agent"]) {
t.Fatal()
}
assert.Equal(t, "application/x-www-form-urlencoded", tCase.Steps[2].Request.Headers["Content-Type"])
assert.Equal(t, "application/json", tCase.Steps[3].Request.Headers["Content-Type"])
assert.Equal(t, "text/plain", tCase.Steps[4].Request.Headers["Content-Type"])
assert.Equal(t, "HttpRunner", tCase.Steps[5].Request.Headers["User-Agent"])
// check body
if !assert.Equal(t, nil, tCase.Steps[0].Request.Body) {
t.Fatal()
}
if !assert.Equal(t, map[string]string{"k1": "v1", "k2": "v2"}, tCase.Steps[2].Request.Body) {
t.Fatal()
}
if !assert.Equal(t, map[string]interface{}{"k1": "v1", "k2": "v2"}, tCase.Steps[3].Request.Body) {
t.Fatal()
}
if !assert.Equal(t, "have a nice day", tCase.Steps[4].Request.Body) {
t.Fatal()
}
if !assert.Equal(t, nil, tCase.Steps[5].Request.Body) {
t.Fatal()
}
assert.Equal(t, nil, tCase.Steps[0].Request.Body)
assert.Equal(t, map[string]string{"k1": "v1", "k2": "v2"}, tCase.Steps[2].Request.Body)
assert.Equal(t, map[string]interface{}{"k1": "v1", "k2": "v2"}, tCase.Steps[3].Request.Body)
assert.Equal(t, "have a nice day", tCase.Steps[4].Request.Body)
assert.Equal(t, nil, tCase.Steps[5].Request.Body)
}

View File

@@ -5,11 +5,12 @@ import (
hrp "github.com/httprunner/httprunner/v5"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
const (
profilePath = "../../../examples/data/profile.yml"
profileOverridePath = "../../../examples/data/profile_override.yml"
profilePath = "../tests/data/profile.yml"
profileOverridePath = "../tests/data/profile_override.yml"
)
var converter *TCaseConverter
@@ -20,28 +21,18 @@ func init() {
func TestLoadTCase(t *testing.T) {
err := converter.loadCase(harPath, FromTypeHAR)
if !assert.NoError(t, err) {
t.Fatal()
}
if !assert.NotEmpty(t, converter.tCase) {
t.Fatal()
}
require.NoError(t, err)
assert.NotEmpty(t, converter.tCase)
}
func TestLoadHARWithProfileOverride(t *testing.T) {
err := converter.loadCase(harPath, FromTypeHAR)
if !assert.NoError(t, err) {
t.Fatal()
}
if !assert.NotEmpty(t, converter.tCase) {
t.Fatal()
}
assert.NoError(t, err)
assert.NotEmpty(t, converter.tCase)
// override TCase with profile
err = converter.overrideWithProfile(profileOverridePath)
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
for i := 0; i < 3; i++ {
assert.Equal(t,
@@ -75,23 +66,15 @@ func TestMakeRequestWithProfile(t *testing.T) {
}
err := caseConverter.overrideWithProfile(profilePath)
if !assert.NoError(t, err) {
t.Fatal()
}
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
assert.NoError(t, err)
if !assert.Equal(t, map[string]string{
assert.Equal(t, map[string]string{
"Content-Type": "application/x-www-form-urlencoded", "User-Agent": "hrp",
}, caseConverter.tCase.Steps[0].Request.Headers) {
t.Fatal()
}
if !assert.Equal(t, map[string]string{
}, caseConverter.tCase.Steps[0].Request.Headers)
assert.Equal(t, map[string]string{
"UserName": "debugtalk", "abc": "123",
}, caseConverter.tCase.Steps[0].Request.Cookies) {
t.Fatal()
}
}, caseConverter.tCase.Steps[0].Request.Cookies)
}
func TestMakeRequestWithProfileOverride(t *testing.T) {
@@ -117,21 +100,13 @@ func TestMakeRequestWithProfileOverride(t *testing.T) {
// override TCase with profile
err := caseConverter.overrideWithProfile(profileOverridePath)
if !assert.NoError(t, err) {
t.Fatal()
}
if !assert.NoError(t, err) {
t.Fatal()
}
assert.NoError(t, err)
assert.NoError(t, err)
if !assert.Equal(t, map[string]string{
assert.Equal(t, map[string]string{
"Content-Type": "application/x-www-form-urlencoded",
}, caseConverter.tCase.Steps[0].Request.Headers) {
t.Fatal()
}
if !assert.Equal(t, map[string]string{
}, caseConverter.tCase.Steps[0].Request.Headers)
assert.Equal(t, map[string]string{
"UserName": "debugtalk",
}, caseConverter.tCase.Steps[0].Request.Cookies) {
t.Fatal()
}
}, caseConverter.tCase.Steps[0].Request.Cookies)
}