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