mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-12 16:01:27 +08:00
feat: save foreground app when step failed
This commit is contained in:
@@ -70,12 +70,12 @@ var (
|
|||||||
|
|
||||||
// UI automation related: [70, 80)
|
// UI automation related: [70, 80)
|
||||||
var (
|
var (
|
||||||
MobileUIDriverError = errors.New("mobile UI driver error") // 70
|
MobileUIDriverError = errors.New("mobile UI driver error") // 70
|
||||||
MobileUILaunchAppError = errors.New("mobile UI launch app error") // 71
|
MobileUILaunchAppError = errors.New("mobile UI launch app error") // 71
|
||||||
MobileUIValidationError = errors.New("mobile UI validation error") // 75
|
MobileUIValidationError = errors.New("mobile UI validation error") // 75
|
||||||
MobileUIAppNotInForegroundError = errors.New("mobile UI app not in foreground error") // 76
|
MobileUIAssertForegroundAppError = errors.New("mobile UI assert foreground app error") // 76
|
||||||
MobileUIActivityNotMatchError = errors.New("mobile UI activity not match error") // 77
|
MobileUIAssertForegroundActivityError = errors.New("mobile UI assert foreground activity error") // 77
|
||||||
MobileUIPopupError = errors.New("mobile UI popup error") // 78
|
MobileUIPopupError = errors.New("mobile UI popup error") // 78
|
||||||
)
|
)
|
||||||
|
|
||||||
// OCR related: [80, 90)
|
// OCR related: [80, 90)
|
||||||
@@ -134,12 +134,12 @@ var errorsMap = map[error]int{
|
|||||||
AndroidCaptureLogError: 66,
|
AndroidCaptureLogError: 66,
|
||||||
|
|
||||||
// UI automation related
|
// UI automation related
|
||||||
MobileUIDriverError: 70,
|
MobileUIDriverError: 70,
|
||||||
MobileUILaunchAppError: 71,
|
MobileUILaunchAppError: 71,
|
||||||
MobileUIValidationError: 75,
|
MobileUIValidationError: 75,
|
||||||
MobileUIAppNotInForegroundError: 76,
|
MobileUIAssertForegroundAppError: 76,
|
||||||
MobileUIActivityNotMatchError: 77,
|
MobileUIAssertForegroundActivityError: 77,
|
||||||
MobileUIPopupError: 78,
|
MobileUIPopupError: 78,
|
||||||
|
|
||||||
// OCR related
|
// OCR related
|
||||||
OCREnvMissedError: 80,
|
OCREnvMissedError: 80,
|
||||||
|
|||||||
@@ -427,7 +427,7 @@ func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return AppInfo{}, errors.New("get foreground app failed")
|
return AppInfo{}, errors.Wrap(code.MobileUIAssertForegroundAppError, "get foreground app failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...string) error {
|
func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...string) error {
|
||||||
@@ -447,20 +447,21 @@ func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...str
|
|||||||
Interface("foreground_app", app.AppBaseInfo).
|
Interface("foreground_app", app.AppBaseInfo).
|
||||||
Str("expected_package", packageName).
|
Str("expected_package", packageName).
|
||||||
Msg("assert package failed")
|
Msg("assert package failed")
|
||||||
return errors.Wrap(code.MobileUIAppNotInForegroundError, "assert package failed")
|
return errors.Wrap(code.MobileUIAssertForegroundAppError,
|
||||||
|
"assert foreground package failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
// assert activity
|
|
||||||
if len(activityType) == 0 {
|
if len(activityType) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
expectActivityType := activityType[0]
|
|
||||||
|
|
||||||
|
// assert activity
|
||||||
|
expectActivityType := activityType[0]
|
||||||
activities, ok := androidActivities[packageName]
|
activities, ok := androidActivities[packageName]
|
||||||
if !ok {
|
if !ok {
|
||||||
msg := fmt.Sprintf("activities not configured for package %s", packageName)
|
msg := fmt.Sprintf("activities not configured for package %s", packageName)
|
||||||
log.Error().Msg(msg)
|
log.Error().Msg(msg)
|
||||||
return errors.Wrap(code.MobileUIActivityNotMatchError, msg)
|
return errors.Wrap(code.MobileUIAssertForegroundActivityError, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
expectActivities, ok := activities[expectActivityType]
|
expectActivities, ok := activities[expectActivityType]
|
||||||
@@ -468,24 +469,25 @@ func (ad *adbDriver) AssertForegroundApp(packageName string, activityType ...str
|
|||||||
msg := fmt.Sprintf("activity type %s not configured for package %s",
|
msg := fmt.Sprintf("activity type %s not configured for package %s",
|
||||||
expectActivityType, packageName)
|
expectActivityType, packageName)
|
||||||
log.Error().Msg(msg)
|
log.Error().Msg(msg)
|
||||||
return errors.Wrap(code.MobileUIActivityNotMatchError, msg)
|
return errors.Wrap(code.MobileUIAssertForegroundActivityError, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// assertion
|
// assertion
|
||||||
for _, expectActivity := range expectActivities {
|
for _, expectActivity := range expectActivities {
|
||||||
if strings.HasSuffix(app.Activity, expectActivity) {
|
if strings.HasSuffix(app.Activity, expectActivity) {
|
||||||
// assert success
|
// assert activity success
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// assert failed
|
// assert activity failed
|
||||||
log.Error().
|
log.Error().
|
||||||
Interface("foreground_app", app.AppBaseInfo).
|
Interface("foreground_app", app.AppBaseInfo).
|
||||||
Str("expected_activity_type", expectActivityType).
|
Str("expected_activity_type", expectActivityType).
|
||||||
Strs("expected_activities", expectActivities).
|
Strs("expected_activities", expectActivities).
|
||||||
Msg("assert activity failed")
|
Msg("assert activity failed")
|
||||||
return errors.Wrap(code.MobileUIActivityNotMatchError, "assert activity failed")
|
return errors.Wrap(code.MobileUIAssertForegroundActivityError,
|
||||||
|
"assert foreground activity failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
var androidActivities = map[string]map[string][]string{
|
var androidActivities = map[string]map[string][]string{
|
||||||
|
|||||||
@@ -589,13 +589,19 @@ func runStepMobileUI(s *SessionRunner, step *TStep) (stepResult *StepResult, err
|
|||||||
attachments := make(map[string]interface{})
|
attachments := make(map[string]interface{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
attachments["error"] = err.Error()
|
attachments["error"] = err.Error()
|
||||||
|
|
||||||
|
// save foreground app
|
||||||
|
if app, err1 := uiDriver.Driver.GetForegroundApp(); err1 == nil {
|
||||||
|
attachments["foreground_app"] = app.AppBaseInfo
|
||||||
|
} else {
|
||||||
|
log.Warn().Err(err1).Msg("save foreground app failed, ignore")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// take screenshot after each step
|
// take screenshot after each step
|
||||||
_, _, err := uiDriver.TakeScreenShot(
|
if _, _, err2 := uiDriver.TakeScreenShot(
|
||||||
builtin.GenNameWithTimestamp("%d_step_") + step.Name)
|
builtin.GenNameWithTimestamp("%d_step_") + step.Name); err2 != nil {
|
||||||
if err != nil {
|
log.Error().Err(err2).Str("step", step.Name).Msg("take screenshot failed on step finished")
|
||||||
log.Error().Err(err).Str("step", step.Name).Msg("take screenshot failed on step finished")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// save attachments
|
// save attachments
|
||||||
|
|||||||
Reference in New Issue
Block a user