diff --git a/config.go b/config.go index 55c20a01..0b288796 100644 --- a/config.go +++ b/config.go @@ -139,23 +139,23 @@ func (c *TConfig) SetIOS(opts ...options.IOSDeviceOption) *TConfig { return c } -func (c *TConfig) SetHarmony(options ...uixt.HarmonyDeviceOption) *TConfig { - harmonyOptions := &uixt.HarmonyDevice{} - for _, option := range options { - option(harmonyOptions) +func (c *TConfig) SetHarmony(opts ...options.HarmonyDeviceOption) *TConfig { + harmonyOptions := options.NewHarmonyDeviceConfig(opts...) + device := &uixt.HarmonyDevice{ + HarmonyDeviceConfig: harmonyOptions, } // each device can have its own settings if harmonyOptions.ConnectKey != "" { - c.Harmony = append(c.Harmony, harmonyOptions) + c.Harmony = append(c.Harmony, device) return c } // device UDID is not specified, settings will be shared if len(c.Harmony) == 0 { - c.Harmony = append(c.Harmony, harmonyOptions) + c.Harmony = append(c.Harmony, device) } else { - c.Harmony[0] = harmonyOptions + c.Harmony[0] = device } return c } diff --git a/examples/uitest/harmony_e2e_delay_test.go b/examples/uitest/harmony_e2e_delay_test.go index 6387cab4..a74dd87b 100644 --- a/examples/uitest/harmony_e2e_delay_test.go +++ b/examples/uitest/harmony_e2e_delay_test.go @@ -5,6 +5,7 @@ import ( hrp "github.com/httprunner/httprunner/v5" "github.com/httprunner/httprunner/v5/pkg/uixt" + "github.com/httprunner/httprunner/v5/pkg/uixt/options" ) func TestHarmonyDouyinE2E(t *testing.T) { @@ -14,7 +15,9 @@ func TestHarmonyDouyinE2E(t *testing.T) { "device": "${ENV(SerialNumber)}", "ups": "${ENV(LIVEUPLIST)}", }). - SetHarmony(uixt.WithConnectKey("$device"), uixt.WithLogOn(true)), + SetHarmony( + options.WithConnectKey("$device"), + options.WithLogOn(true)), TestSteps: []hrp.IStep{ hrp.NewStep("启动抖音"). Harmony(). diff --git a/pkg/uixt/harmony_device.go b/pkg/uixt/harmony_device.go index 8c055086..b59aa6db 100644 --- a/pkg/uixt/harmony_device.go +++ b/pkg/uixt/harmony_device.go @@ -8,6 +8,7 @@ import ( "github.com/rs/zerolog/log" "github.com/httprunner/httprunner/v5/code" + "github.com/httprunner/httprunner/v5/pkg/uixt/options" ) var ( @@ -16,61 +17,35 @@ var ( ) type HarmonyDevice struct { - d *ghdc.Device - ConnectKey string `json:"connect_key,omitempty" yaml:"connect_key,omitempty"` - LogOn bool `json:"log_on,omitempty" yaml:"log_on,omitempty"` + *options.HarmonyDeviceConfig + d *ghdc.Device } -func (dev *HarmonyDevice) Options() (deviceOptions []HarmonyDeviceOption) { - if dev.ConnectKey != "" { - deviceOptions = append(deviceOptions, WithConnectKey(dev.ConnectKey)) - } - if dev.LogOn { - deviceOptions = append(deviceOptions, WithLogOn(true)) - } - return -} +func NewHarmonyDevice(opts ...options.HarmonyDeviceOption) (device *HarmonyDevice, err error) { + deviceConfig := options.NewHarmonyDeviceConfig(opts...) -type HarmonyDeviceOption func(*HarmonyDevice) - -func WithConnectKey(connectKey string) HarmonyDeviceOption { - return func(device *HarmonyDevice) { - device.ConnectKey = connectKey - } -} - -func WithLogOn(logOn bool) HarmonyDeviceOption { - return func(device *HarmonyDevice) { - device.LogOn = logOn - } -} - -func NewHarmonyDevice(options ...HarmonyDeviceOption) (device *HarmonyDevice, err error) { - device = &HarmonyDevice{} - for _, option := range options { - option(device) - } - - deviceList, err := GetHarmonyDevices(device.ConnectKey) + deviceList, err := GetHarmonyDevices(deviceConfig.ConnectKey) if err != nil { return nil, errors.Wrap(code.DeviceConnectionError, err.Error()) } - if device.ConnectKey == "" && len(deviceList) > 1 { + if deviceConfig.ConnectKey == "" && len(deviceList) > 1 { return nil, errors.Wrap(code.DeviceConnectionError, "more than one device connected, please specify the serial") } dev := deviceList[0] - - if device.ConnectKey == "" { + if deviceConfig.ConnectKey == "" { selectSerial := dev.Serial() - device.ConnectKey = selectSerial + deviceConfig.ConnectKey = selectSerial log.Warn(). - Str("connectKey", device.ConnectKey). + Str("connectKey", deviceConfig.ConnectKey). Msg("harmony ConnectKey is not specified, select the first one") } - device.d = dev + device = &HarmonyDevice{ + HarmonyDeviceConfig: deviceConfig, + d: dev, + } log.Info().Str("connectKey", device.ConnectKey).Msg("init harmony device") return device, nil } diff --git a/pkg/uixt/options/harmony.go b/pkg/uixt/options/harmony.go new file mode 100644 index 00000000..83cd04da --- /dev/null +++ b/pkg/uixt/options/harmony.go @@ -0,0 +1,38 @@ +package options + +type HarmonyDeviceConfig struct { + ConnectKey string `json:"connect_key,omitempty" yaml:"connect_key,omitempty"` + LogOn bool `json:"log_on,omitempty" yaml:"log_on,omitempty"` +} + +func (dev *HarmonyDeviceConfig) Options() (deviceOptions []HarmonyDeviceOption) { + if dev.ConnectKey != "" { + deviceOptions = append(deviceOptions, WithConnectKey(dev.ConnectKey)) + } + if dev.LogOn { + deviceOptions = append(deviceOptions, WithLogOn(true)) + } + return +} + +func NewHarmonyDeviceConfig(options ...HarmonyDeviceOption) (device *HarmonyDeviceConfig) { + device = &HarmonyDeviceConfig{} + for _, option := range options { + option(device) + } + return +} + +type HarmonyDeviceOption func(*HarmonyDeviceConfig) + +func WithConnectKey(connectKey string) HarmonyDeviceOption { + return func(device *HarmonyDeviceConfig) { + device.ConnectKey = connectKey + } +} + +func WithLogOn(logOn bool) HarmonyDeviceOption { + return func(device *HarmonyDeviceConfig) { + device.LogOn = logOn + } +} diff --git a/step_request.go b/step_request.go index 8cbf45aa..4f6c8429 100644 --- a/step_request.go +++ b/step_request.go @@ -24,7 +24,6 @@ import ( "github.com/httprunner/httprunner/v5/internal/builtin" "github.com/httprunner/httprunner/v5/internal/json" "github.com/httprunner/httprunner/v5/pkg/httpstat" - "github.com/httprunner/httprunner/v5/pkg/uixt" "github.com/httprunner/httprunner/v5/pkg/uixt/options" ) @@ -782,11 +781,8 @@ func (s *StepRequest) IOS(opts ...options.IOSDeviceOption) *StepMobile { } // Harmony creates a new harmony step session -func (s *StepRequest) Harmony(options ...uixt.HarmonyDeviceOption) *StepMobile { - harmonyOptions := &uixt.HarmonyDevice{} - for _, option := range options { - option(harmonyOptions) - } +func (s *StepRequest) Harmony(opts ...options.HarmonyDeviceOption) *StepMobile { + harmonyOptions := options.NewHarmonyDeviceConfig(opts...) return &StepMobile{ StepConfig: s.StepConfig, Harmony: &MobileUI{