refactor: move harmony options to pkg/uixt/options

This commit is contained in:
lilong.129
2025-02-06 15:45:05 +08:00
parent 8a78ba6477
commit 3c9c1dddd9
5 changed files with 65 additions and 53 deletions

View File

@@ -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
}

View File

@@ -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().

View File

@@ -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
}

View File

@@ -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
}
}

View File

@@ -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{