mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-10 23:12:41 +08:00
feat: add WithPreMarkOperation and WithPostMarkOperation to mark UI operation before/after action
This commit is contained in:
@@ -1 +1 @@
|
|||||||
v5.0.0-beta-2505120848
|
v5.0.0-beta-2505120858
|
||||||
|
|||||||
@@ -136,28 +136,18 @@ func TestDriver_ADB_TapXY(t *testing.T) {
|
|||||||
|
|
||||||
func TestDriver_ADB_TapXY_WithHook(t *testing.T) {
|
func TestDriver_ADB_TapXY_WithHook(t *testing.T) {
|
||||||
driver := setupADBDriverExt(t)
|
driver := setupADBDriverExt(t)
|
||||||
x, y := 0.4, 0.5
|
|
||||||
err := driver.TapXY(x, y,
|
err := driver.Call("pre hook", func() {
|
||||||
option.WithHooks(
|
log.Info().Msg("pre hook")
|
||||||
func() {
|
}, option.WithTimeout(1))
|
||||||
log.Info().Msg("pre hook")
|
|
||||||
x += 1
|
|
||||||
},
|
|
||||||
func() {
|
|
||||||
log.Info().Msg("post hook")
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
err = driver.TapXY(0.4, 0.5,
|
err = driver.TapXY(0.4, 0.5)
|
||||||
option.WithPreHook(func() {
|
assert.Nil(t, err)
|
||||||
log.Info().Msg("pre hook")
|
|
||||||
}),
|
err = driver.Call("post hook", func() {
|
||||||
option.WithPostHook(func() {
|
log.Info().Msg("post hook")
|
||||||
log.Info().Msg("post hook")
|
}, option.WithTimeout(1))
|
||||||
}),
|
|
||||||
)
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ func TestSaveImageWithArrow(t *testing.T) {
|
|||||||
func TestMarkOperation(t *testing.T) {
|
func TestMarkOperation(t *testing.T) {
|
||||||
driver := setupDriverExt(t)
|
driver := setupDriverExt(t)
|
||||||
|
|
||||||
opts := []option.ActionOption{option.WithMarkOperationEnabled(true)}
|
opts := []option.ActionOption{option.WithPreMarkOperation(true)}
|
||||||
|
|
||||||
// tap point
|
// tap point
|
||||||
err := driver.TapXY(0.5, 0.5, opts...)
|
err := driver.TapXY(0.5, 0.5, opts...)
|
||||||
|
|||||||
@@ -44,14 +44,10 @@ func (dExt *XTDriver) Call(desc string, fn func(), opts ...option.ActionOption)
|
|||||||
func preHandler_TapAbsXY(driver IDriver, options *option.ActionOptions, rawX, rawY float64) (
|
func preHandler_TapAbsXY(driver IDriver, options *option.ActionOptions, rawX, rawY float64) (
|
||||||
x, y float64, err error) {
|
x, y float64, err error) {
|
||||||
|
|
||||||
if options.PreHook != nil {
|
|
||||||
options.PreHook()
|
|
||||||
}
|
|
||||||
|
|
||||||
x, y = options.ApplyTapOffset(rawX, rawY)
|
x, y = options.ApplyTapOffset(rawX, rawY)
|
||||||
|
|
||||||
// mark UI operation
|
// mark UI operation
|
||||||
if options.MarkOperationEnabled {
|
if options.PreMarkOperation {
|
||||||
if markErr := MarkUIOperation(driver, ACTION_TapAbsXY, []float64{x, y}); markErr != nil {
|
if markErr := MarkUIOperation(driver, ACTION_TapAbsXY, []float64{x, y}); markErr != nil {
|
||||||
log.Warn().Err(markErr).Msg("Failed to mark tap operation")
|
log.Warn().Err(markErr).Msg("Failed to mark tap operation")
|
||||||
}
|
}
|
||||||
@@ -63,10 +59,6 @@ func preHandler_TapAbsXY(driver IDriver, options *option.ActionOptions, rawX, ra
|
|||||||
func preHandler_DoubleTap(driver IDriver, options *option.ActionOptions, rawX, rawY float64) (
|
func preHandler_DoubleTap(driver IDriver, options *option.ActionOptions, rawX, rawY float64) (
|
||||||
x, y float64, err error) {
|
x, y float64, err error) {
|
||||||
|
|
||||||
if options.PreHook != nil {
|
|
||||||
options.PreHook()
|
|
||||||
}
|
|
||||||
|
|
||||||
x, y, err = convertToAbsolutePoint(driver, rawX, rawY)
|
x, y, err = convertToAbsolutePoint(driver, rawX, rawY)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, err
|
return 0, 0, err
|
||||||
@@ -75,7 +67,7 @@ func preHandler_DoubleTap(driver IDriver, options *option.ActionOptions, rawX, r
|
|||||||
x, y = options.ApplyTapOffset(x, y)
|
x, y = options.ApplyTapOffset(x, y)
|
||||||
|
|
||||||
// mark UI operation
|
// mark UI operation
|
||||||
if options.MarkOperationEnabled {
|
if options.PreMarkOperation {
|
||||||
if markErr := MarkUIOperation(driver, ACTION_DoubleTapXY, []float64{x, y}); markErr != nil {
|
if markErr := MarkUIOperation(driver, ACTION_DoubleTapXY, []float64{x, y}); markErr != nil {
|
||||||
log.Warn().Err(markErr).Msg("Failed to mark double tap operation")
|
log.Warn().Err(markErr).Msg("Failed to mark double tap operation")
|
||||||
}
|
}
|
||||||
@@ -87,10 +79,6 @@ func preHandler_DoubleTap(driver IDriver, options *option.ActionOptions, rawX, r
|
|||||||
func preHandler_Drag(driver IDriver, options *option.ActionOptions, rawFomX, rawFromY, rawToX, rawToY float64) (
|
func preHandler_Drag(driver IDriver, options *option.ActionOptions, rawFomX, rawFromY, rawToX, rawToY float64) (
|
||||||
fromX, fromY, toX, toY float64, err error) {
|
fromX, fromY, toX, toY float64, err error) {
|
||||||
|
|
||||||
if options.PreHook != nil {
|
|
||||||
options.PreHook()
|
|
||||||
}
|
|
||||||
|
|
||||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(driver, rawFomX, rawFromY, rawToX, rawToY)
|
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(driver, rawFomX, rawFromY, rawToX, rawToY)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, 0, 0, err
|
return 0, 0, 0, 0, err
|
||||||
@@ -98,7 +86,7 @@ func preHandler_Drag(driver IDriver, options *option.ActionOptions, rawFomX, raw
|
|||||||
fromX, fromY, toX, toY = options.ApplySwipeOffset(fromX, fromY, toX, toY)
|
fromX, fromY, toX, toY = options.ApplySwipeOffset(fromX, fromY, toX, toY)
|
||||||
|
|
||||||
// mark UI operation
|
// mark UI operation
|
||||||
if options.MarkOperationEnabled {
|
if options.PreMarkOperation {
|
||||||
if markErr := MarkUIOperation(driver, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil {
|
if markErr := MarkUIOperation(driver, ACTION_Drag, []float64{fromX, fromY, toX, toY}); markErr != nil {
|
||||||
log.Warn().Err(markErr).Msg("Failed to mark drag operation")
|
log.Warn().Err(markErr).Msg("Failed to mark drag operation")
|
||||||
}
|
}
|
||||||
@@ -110,10 +98,6 @@ func preHandler_Drag(driver IDriver, options *option.ActionOptions, rawFomX, raw
|
|||||||
func preHandler_Swipe(driver IDriver, options *option.ActionOptions, rawFomX, rawFromY, rawToX, rawToY float64) (
|
func preHandler_Swipe(driver IDriver, options *option.ActionOptions, rawFomX, rawFromY, rawToX, rawToY float64) (
|
||||||
fromX, fromY, toX, toY float64, err error) {
|
fromX, fromY, toX, toY float64, err error) {
|
||||||
|
|
||||||
if options.PreHook != nil {
|
|
||||||
options.PreHook()
|
|
||||||
}
|
|
||||||
|
|
||||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(driver, rawFomX, rawFromY, rawToX, rawToY)
|
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(driver, rawFomX, rawFromY, rawToX, rawToY)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, 0, 0, err
|
return 0, 0, 0, 0, err
|
||||||
@@ -121,7 +105,7 @@ func preHandler_Swipe(driver IDriver, options *option.ActionOptions, rawFomX, ra
|
|||||||
fromX, fromY, toX, toY = options.ApplySwipeOffset(fromX, fromY, toX, toY)
|
fromX, fromY, toX, toY = options.ApplySwipeOffset(fromX, fromY, toX, toY)
|
||||||
|
|
||||||
// mark UI operation
|
// mark UI operation
|
||||||
if options.MarkOperationEnabled {
|
if options.PreMarkOperation {
|
||||||
if markErr := MarkUIOperation(driver, ACTION_Swipe, []float64{fromX, fromY, toX, toY}); markErr != nil {
|
if markErr := MarkUIOperation(driver, ACTION_Swipe, []float64{fromX, fromY, toX, toY}); markErr != nil {
|
||||||
log.Warn().Err(markErr).Msg("Failed to mark swipe operation")
|
log.Warn().Err(markErr).Msg("Failed to mark swipe operation")
|
||||||
}
|
}
|
||||||
@@ -131,23 +115,12 @@ func preHandler_Swipe(driver IDriver, options *option.ActionOptions, rawFomX, ra
|
|||||||
}
|
}
|
||||||
|
|
||||||
func preHandler_AppLaunch(_ IDriver, options *option.ActionOptions) (err error) {
|
func preHandler_AppLaunch(_ IDriver, options *option.ActionOptions) (err error) {
|
||||||
if options.PreHook != nil {
|
|
||||||
options.PreHook()
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func preHandler_AppTerminate(_ IDriver, options *option.ActionOptions) (err error) {
|
func preHandler_AppTerminate(_ IDriver, options *option.ActionOptions) (err error) {
|
||||||
if options.PreHook != nil {
|
|
||||||
options.PreHook()
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func postHandler(_ IDriver, options *option.ActionOptions) {
|
func postHandler(_ IDriver, options *option.ActionOptions) {
|
||||||
if options.PostHook != nil {
|
|
||||||
options.PostHook()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ type ActionOptions struct {
|
|||||||
Frequency int `json:"frequency,omitempty" yaml:"frequency,omitempty"`
|
Frequency int `json:"frequency,omitempty" yaml:"frequency,omitempty"`
|
||||||
|
|
||||||
ScreenOptions
|
ScreenOptions
|
||||||
HookOptions
|
|
||||||
|
|
||||||
// set custiom options such as textview, id, description
|
// set custiom options such as textview, id, description
|
||||||
Custom map[string]interface{} `json:"custom,omitempty" yaml:"custom,omitempty"`
|
Custom map[string]interface{} `json:"custom,omitempty" yaml:"custom,omitempty"`
|
||||||
@@ -134,7 +133,6 @@ func (o *ActionOptions) Options() []ActionOption {
|
|||||||
options = append(options, o.GetScreenShotOptions()...)
|
options = append(options, o.GetScreenShotOptions()...)
|
||||||
options = append(options, o.GetScreenRecordOptions()...)
|
options = append(options, o.GetScreenRecordOptions()...)
|
||||||
options = append(options, o.GetMarkOperationOptions()...)
|
options = append(options, o.GetMarkOperationOptions()...)
|
||||||
options = append(options, o.GetHookOptions()...)
|
|
||||||
|
|
||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
package option
|
|
||||||
|
|
||||||
// HookOptions contains options for action hooks
|
|
||||||
type HookOptions struct {
|
|
||||||
// pre hook before action
|
|
||||||
PreHook func()
|
|
||||||
// post hook after action
|
|
||||||
PostHook func()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *HookOptions) GetHookOptions() []ActionOption {
|
|
||||||
options := make([]ActionOption, 0)
|
|
||||||
if o == nil {
|
|
||||||
return options
|
|
||||||
}
|
|
||||||
|
|
||||||
if o.PreHook != nil {
|
|
||||||
options = append(options, WithPreHook(o.PreHook))
|
|
||||||
}
|
|
||||||
if o.PostHook != nil {
|
|
||||||
options = append(options, WithPostHook(o.PostHook))
|
|
||||||
}
|
|
||||||
|
|
||||||
return options
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithPreHook sets the pre hook before action
|
|
||||||
func WithPreHook(preHook func()) ActionOption {
|
|
||||||
return func(o *ActionOptions) {
|
|
||||||
o.PreHook = preHook
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithPostHook sets the post hook after action
|
|
||||||
func WithPostHook(postHook func()) ActionOption {
|
|
||||||
return func(o *ActionOptions) {
|
|
||||||
o.PostHook = postHook
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithHooks sets the pre hook and post hook
|
|
||||||
func WithHooks(preHook func(), postHook func()) ActionOption {
|
|
||||||
return func(o *ActionOptions) {
|
|
||||||
o.PreHook = preHook
|
|
||||||
o.PostHook = postHook
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -277,8 +277,8 @@ func WithIndex(index int) ActionOption {
|
|||||||
|
|
||||||
// MarkOperationOptions contains options for marking UI operations
|
// MarkOperationOptions contains options for marking UI operations
|
||||||
type MarkOperationOptions struct {
|
type MarkOperationOptions struct {
|
||||||
// mark UI operation, enable/disable UI operation marking
|
PreMarkOperation bool `json:"pre_mark_operation,omitempty" yaml:"pre_mark_operation,omitempty"`
|
||||||
MarkOperationEnabled bool `json:"mark_operation_enabled,omitempty" yaml:"mark_operation_enabled,omitempty"`
|
PostMarkOperation bool `json:"post_mark_operation,omitempty" yaml:"post_mark_operation,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *MarkOperationOptions) GetMarkOperationOptions() []ActionOption {
|
func (o *MarkOperationOptions) GetMarkOperationOptions() []ActionOption {
|
||||||
@@ -287,16 +287,26 @@ func (o *MarkOperationOptions) GetMarkOperationOptions() []ActionOption {
|
|||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
|
||||||
if o.MarkOperationEnabled {
|
if o.PreMarkOperation {
|
||||||
options = append(options, WithMarkOperationEnabled(true))
|
options = append(options, WithPreMarkOperation(true))
|
||||||
|
}
|
||||||
|
if o.PostMarkOperation {
|
||||||
|
options = append(options, WithPostMarkOperation(true))
|
||||||
}
|
}
|
||||||
|
|
||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithMarkOperationEnabled enables or disables UI operation marking
|
// WithPreMarkOperation enables UI operation marking before action
|
||||||
func WithMarkOperationEnabled(enabled bool) ActionOption {
|
func WithPreMarkOperation(enabled bool) ActionOption {
|
||||||
return func(o *ActionOptions) {
|
return func(o *ActionOptions) {
|
||||||
o.MarkOperationEnabled = enabled
|
o.PreMarkOperation = enabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithPostMarkOperation enables UI operation marking after action
|
||||||
|
func WithPostMarkOperation(enabled bool) ActionOption {
|
||||||
|
return func(o *ActionOptions) {
|
||||||
|
o.PostMarkOperation = enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user