merge refactor

This commit is contained in:
余泓铮
2024-09-25 21:59:08 +08:00
5 changed files with 229 additions and 5 deletions
+55
View File
@@ -10,6 +10,7 @@ import (
"net/url"
"os"
"os/signal"
"reflect"
"strings"
"syscall"
"testing"
@@ -404,9 +405,63 @@ func (r *CaseRunner) parseConfig() (parsedConfig *TConfig, err error) {
}
r.parametersIterator = parametersIterator
// parse android/ios/harmony config
for _, device := range parsedConfig.Android {
err := r.parseDeviceConfig(device, parsedConfig.Variables)
if err != nil {
return nil, errors.Wrap(code.InvalidCaseError,
fmt.Sprintf("parse android config failed: %v", err))
}
}
for _, device := range parsedConfig.IOS {
err := r.parseDeviceConfig(device, parsedConfig.Variables)
if err != nil {
return nil, errors.Wrap(code.InvalidCaseError,
fmt.Sprintf("parse ios config failed: %v", err))
}
}
for _, device := range parsedConfig.Harmony {
err := r.parseDeviceConfig(device, parsedConfig.Variables)
if err != nil {
return nil, errors.Wrap(code.InvalidCaseError,
fmt.Sprintf("parse harmony config failed: %v", err))
}
}
return parsedConfig, nil
}
func (r *CaseRunner) parseDeviceConfig(
device interface{}, configVariables map[string]interface{},
) error {
deviceValue := reflect.ValueOf(device).Elem()
deviceType := deviceValue.Type()
for i := 0; i < deviceType.NumField(); i++ {
field := deviceType.Field(i)
fieldValue := deviceValue.Field(i)
if fieldValue.Kind() != reflect.String {
continue
}
parsedValue, err := r.parser.ParseString(
fieldValue.String(), configVariables)
if err != nil {
log.Error().Err(err).Msgf(
"parse config device variable %s failed", field.Name)
return err
}
parsedValueReflect := reflect.ValueOf(parsedValue)
if parsedValueReflect.Type().ConvertibleTo(fieldValue.Type()) {
convertedValue := parsedValueReflect.Convert(fieldValue.Type())
fieldValue.Set(convertedValue)
} else {
log.Error().Msgf("update config device variable %s failed", field.Name)
return err
}
}
return nil
}
// each boomer task initiates a new session
// in order to avoid data racing
func (r *CaseRunner) NewSession() *SessionRunner {