mirror of
https://github.com/httprunner/httprunner.git
synced 2026-06-01 22:09:35 +08:00
update: httprunner make v4
This commit is contained in:
@@ -241,7 +241,6 @@ func (c *TCaseConverter) ToGoTest() (string, error) {
|
||||
type ICaseConverter interface {
|
||||
Struct() *TCaseConverter
|
||||
ToJSON() (string, error)
|
||||
ToJSONTemp() (string, error)
|
||||
ToYAML() (string, error)
|
||||
ToGoTest() (string, error)
|
||||
ToPyTest() (string, error)
|
||||
@@ -345,8 +344,8 @@ func makeTestCaseFromJSONYAML(iCaseConverter ICaseConverter) (*hrp.TCase, error)
|
||||
}
|
||||
|
||||
func convertToPyTest(iCaseConverter ICaseConverter) (string, error) {
|
||||
// convert to temporary json testcase compatible with python engine style
|
||||
jsonPath, err := iCaseConverter.ToJSONTemp()
|
||||
// convert to temporary json testcase
|
||||
jsonPath, err := iCaseConverter.ToJSON()
|
||||
inputType := iCaseConverter.Struct().InputType
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "(%s -> pytest step 1) failed to convert to temporary json testcase", inputType.String())
|
||||
|
||||
@@ -384,19 +384,6 @@ func (c *ConverterHAR) ToJSON() (string, error) {
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterHAR) ToJSONTemp() (string, error) {
|
||||
tCase, err := c.makeTestCaseTemp()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
jsonPath := c.converter.genOutputPath(suffixJSON)
|
||||
err = builtin.Dump2JSON(tCase, jsonPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterHAR) ToYAML() (string, error) {
|
||||
tCase, err := c.makeTestCase()
|
||||
if err != nil {
|
||||
@@ -429,24 +416,7 @@ func (c *ConverterHAR) makeTestCase() (*hrp.TCase, error) {
|
||||
Config: c.prepareConfig(),
|
||||
TestSteps: teststeps,
|
||||
}
|
||||
err = tCase.MakeCompat2GoEngine()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return tCase, nil
|
||||
}
|
||||
|
||||
func (c *ConverterHAR) makeTestCaseTemp() (*hrp.TCase, error) {
|
||||
teststeps, err := c.prepareTestSteps()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tCase := &hrp.TCase{
|
||||
Config: c.prepareConfig(),
|
||||
TestSteps: teststeps,
|
||||
}
|
||||
err = tCase.MakeCompat2PyEngine()
|
||||
err = tCase.MakeCompat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -37,19 +37,6 @@ func (c *ConverterJSON) ToJSON() (string, error) {
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterJSON) ToJSONTemp() (string, error) {
|
||||
testCase, err := c.makeTestCaseTemp()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
jsonPath := c.converter.genOutputPath(suffixJSON)
|
||||
err = builtin.Dump2JSON(testCase, jsonPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterJSON) ToYAML() (string, error) {
|
||||
testCase, err := c.makeTestCase()
|
||||
if err != nil {
|
||||
@@ -91,19 +78,7 @@ func (c *ConverterJSON) makeTestCase() (*hrp.TCase, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = tCase.MakeCompat2GoEngine()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return tCase, nil
|
||||
}
|
||||
|
||||
func (c *ConverterJSON) makeTestCaseTemp() (*hrp.TCase, error) {
|
||||
tCase, err := makeTestCaseFromJSONYAML(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = tCase.MakeCompat2PyEngine()
|
||||
err = tCase.MakeCompat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -144,19 +144,6 @@ func (c *ConverterPostman) ToJSON() (string, error) {
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterPostman) ToJSONTemp() (string, error) {
|
||||
testCase, err := c.makeTestCaseTemp()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
jsonPath := c.converter.genOutputPath(suffixJSON)
|
||||
err = builtin.Dump2JSON(testCase, jsonPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterPostman) ToYAML() (string, error) {
|
||||
testCase, err := c.makeTestCase()
|
||||
if err != nil {
|
||||
@@ -192,27 +179,7 @@ func (c *ConverterPostman) makeTestCase() (*hrp.TCase, error) {
|
||||
Config: c.prepareConfig(casePostman),
|
||||
TestSteps: teststeps,
|
||||
}
|
||||
err = tCase.MakeCompat2GoEngine()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return tCase, nil
|
||||
}
|
||||
|
||||
func (c *ConverterPostman) makeTestCaseTemp() (*hrp.TCase, error) {
|
||||
casePostman, err := c.load()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
teststeps, err := c.prepareTestSteps(casePostman)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tCase := &hrp.TCase{
|
||||
Config: c.prepareConfig(casePostman),
|
||||
TestSteps: teststeps,
|
||||
}
|
||||
err = tCase.MakeCompat2PyEngine()
|
||||
err = tCase.MakeCompat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,19 +34,6 @@ func (c *ConverterYAML) ToJSON() (string, error) {
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterYAML) ToJSONTemp() (string, error) {
|
||||
testCase, err := c.makeTestCaseTemp()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
jsonPath := c.converter.genOutputPath(suffixJSON)
|
||||
err = builtin.Dump2JSON(testCase, jsonPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return jsonPath, nil
|
||||
}
|
||||
|
||||
func (c *ConverterYAML) ToYAML() (string, error) {
|
||||
testCase, err := c.makeTestCase()
|
||||
if err != nil {
|
||||
@@ -74,19 +61,7 @@ func (c *ConverterYAML) makeTestCase() (*hrp.TCase, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = tCase.MakeCompat2GoEngine()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return tCase, nil
|
||||
}
|
||||
|
||||
func (c *ConverterYAML) makeTestCaseTemp() (*hrp.TCase, error) {
|
||||
tCase, err := makeTestCaseFromJSONYAML(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = tCase.MakeCompat2PyEngine()
|
||||
err = tCase.MakeCompat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ func (path *APIPath) ToAPI() (*API, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = convertValidatorCompat2GoEngine(api.Validators)
|
||||
err = convertCompatValidator(api.Validators)
|
||||
convertExtract(api.Extract)
|
||||
return api, err
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ func (path *TestCasePath) ToTestCase() (*TestCase, error) {
|
||||
return nil, errors.New("incorrect testcase file format, expected config in file")
|
||||
}
|
||||
|
||||
err = tc.MakeCompat2GoEngine()
|
||||
err = tc.MakeCompat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -173,11 +173,11 @@ type TCase struct {
|
||||
TestSteps []*TStep `json:"teststeps" yaml:"teststeps"`
|
||||
}
|
||||
|
||||
// MakeCompat2GoEngine converts TCase compatible with Golang engine style
|
||||
func (tc *TCase) MakeCompat2GoEngine() (err error) {
|
||||
// MakeCompat converts TCase compatible with Golang engine style
|
||||
func (tc *TCase) MakeCompat() (err error) {
|
||||
defer func() {
|
||||
if p := recover(); p != nil {
|
||||
err = fmt.Errorf("[MakeCompat2GoEngine] convert compat testcase error: %v", p)
|
||||
err = fmt.Errorf("[MakeCompat] convert compat testcase error: %v", p)
|
||||
}
|
||||
}()
|
||||
for _, step := range tc.TestSteps {
|
||||
@@ -194,7 +194,7 @@ func (tc *TCase) MakeCompat2GoEngine() (err error) {
|
||||
}
|
||||
|
||||
// 2. deal with validators compatibility
|
||||
err = convertValidatorCompat2GoEngine(step.Validators)
|
||||
err = convertCompatValidator(step.Validators)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -205,7 +205,7 @@ func (tc *TCase) MakeCompat2GoEngine() (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func convertValidatorCompat2GoEngine(Validators []interface{}) (err error) {
|
||||
func convertCompatValidator(Validators []interface{}) (err error) {
|
||||
for i, iValidator := range Validators {
|
||||
if _, ok := iValidator.(Validator); ok {
|
||||
continue
|
||||
@@ -272,77 +272,6 @@ func convertCheckExpr(checkExpr string) string {
|
||||
return strings.Join(checkItems, ".")
|
||||
}
|
||||
|
||||
// MakeCompat2PyEngine converts TCase compatible with Python engine style
|
||||
func (tc *TCase) MakeCompat2PyEngine() (err error) {
|
||||
defer func() {
|
||||
if p := recover(); p != nil {
|
||||
err = fmt.Errorf("[MakeCompat2PyEngine] convert compat testcase error: %v", p)
|
||||
}
|
||||
}()
|
||||
for _, step := range tc.TestSteps {
|
||||
// 1. deal with request body compatibility
|
||||
if step.Request != nil && step.Request.Body != nil {
|
||||
if strings.HasPrefix(step.Request.Headers["Content-Type"], "application/json") {
|
||||
step.Request.Json = step.Request.Body
|
||||
step.Request.Body = nil
|
||||
continue
|
||||
}
|
||||
step.Request.Data = step.Request.Body
|
||||
step.Request.Body = nil
|
||||
}
|
||||
|
||||
// 2. deal with validators compatibility
|
||||
err = convertValidatorCompat2PyEngine(step.Validators)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func convertValidatorCompat2PyEngine(Validators []interface{}) (err error) {
|
||||
for i, iValidator := range Validators {
|
||||
if v, ok := iValidator.(Validator); ok {
|
||||
var iValidatorContent []interface{}
|
||||
iValidatorContent = append(iValidatorContent, v.Check)
|
||||
iValidatorContent = append(iValidatorContent, v.Expect)
|
||||
newValidatorMap := make(map[string]interface{})
|
||||
newValidatorMap[v.Assert] = iValidatorContent
|
||||
Validators[i] = newValidatorMap
|
||||
continue
|
||||
}
|
||||
validatorMap := iValidator.(map[string]interface{})
|
||||
// validator check priority: Python > Golang engine style
|
||||
if len(validatorMap) == 1 {
|
||||
// Python engine style
|
||||
for _, iValidatorContent := range validatorMap {
|
||||
validatorContent := iValidatorContent.([]interface{})
|
||||
if len(validatorContent) > 3 {
|
||||
return fmt.Errorf("unexpected validator format: %v", validatorMap)
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
iCheck, checkExisted := validatorMap["check"]
|
||||
iAssert, assertExisted := validatorMap["assert"]
|
||||
iExpect, expectExisted := validatorMap["expect"]
|
||||
if checkExisted && assertExisted && expectExisted {
|
||||
// Golang engine style
|
||||
var validatorContent []interface{}
|
||||
validatorContent = append(validatorContent, iCheck)
|
||||
validatorContent = append(validatorContent, iExpect)
|
||||
if iMsg, msgExisted := validatorMap["msg"]; msgExisted {
|
||||
validatorContent = append(validatorContent, iMsg)
|
||||
}
|
||||
newValidatorMap := make(map[string]interface{})
|
||||
newValidatorMap[iAssert.(string)] = validatorContent
|
||||
Validators[i] = newValidatorMap
|
||||
continue
|
||||
}
|
||||
return fmt.Errorf("unexpected validator format: %v", validatorMap)
|
||||
}
|
||||
return
|
||||
}
|
||||
func LoadTestCases(iTestCases ...ITestCase) ([]*TestCase, error) {
|
||||
testCases := make([]*TestCase, 0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user