mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-05 23:51:25 +08:00
feat: log adb driver request and response
This commit is contained in:
@@ -1 +1 @@
|
|||||||
v5.0.0+2412081026
|
v5.0.0+2412081117
|
||||||
|
|||||||
@@ -46,6 +46,36 @@ func NewAdbDriver() *adbDriver {
|
|||||||
return driver
|
return driver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ad *adbDriver) runShellCommand(cmd string, args ...string) (output string, err error) {
|
||||||
|
driverResult := &DriverResult{
|
||||||
|
RequestMethod: "adb",
|
||||||
|
RequestUrl: cmd,
|
||||||
|
RequestBody: strings.Join(args, " "),
|
||||||
|
RequestTime: time.Now(),
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
driverResult.ResponseDuration = time.Since(driverResult.RequestTime).Milliseconds()
|
||||||
|
if err != nil {
|
||||||
|
driverResult.Success = false
|
||||||
|
driverResult.Error = err.Error()
|
||||||
|
} else {
|
||||||
|
driverResult.Success = true
|
||||||
|
}
|
||||||
|
ad.session.addRequestResult(driverResult)
|
||||||
|
}()
|
||||||
|
|
||||||
|
// adb shell screencap -p
|
||||||
|
if cmd == "screencap" {
|
||||||
|
resp, err := ad.adbClient.ScreenCap()
|
||||||
|
if err == nil {
|
||||||
|
return string(resp), nil
|
||||||
|
}
|
||||||
|
return "", errors.Wrap(err, "adb screencap failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
return ad.adbClient.RunShellCommand(cmd, args...)
|
||||||
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) NewSession(capabilities Capabilities) (sessionInfo SessionInfo, err error) {
|
func (ad *adbDriver) NewSession(capabilities Capabilities) (sessionInfo SessionInfo, err error) {
|
||||||
ad.Driver.session.Reset()
|
ad.Driver.session.Reset()
|
||||||
err = errDriverNotImplemented
|
err = errDriverNotImplemented
|
||||||
@@ -78,7 +108,7 @@ func (ad *adbDriver) BatteryInfo() (batteryInfo BatteryInfo, err error) {
|
|||||||
|
|
||||||
func (ad *adbDriver) getWindowSize() (size Size, err error) {
|
func (ad *adbDriver) getWindowSize() (size Size, err error) {
|
||||||
// adb shell wm size
|
// adb shell wm size
|
||||||
output, err := ad.adbClient.RunShellCommand("wm", "size")
|
output, err := ad.runShellCommand("wm", "size")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return size, errors.Wrap(err, "get window size failed by adb shell")
|
return size, errors.Wrap(err, "get window size failed by adb shell")
|
||||||
}
|
}
|
||||||
@@ -144,7 +174,7 @@ func (ad *adbDriver) Scale() (scale float64, err error) {
|
|||||||
|
|
||||||
func (ad *adbDriver) GetTimestamp() (timestamp int64, err error) {
|
func (ad *adbDriver) GetTimestamp() (timestamp int64, err error) {
|
||||||
// adb shell date +%s
|
// adb shell date +%s
|
||||||
output, err := ad.adbClient.RunShellCommand("date", "+%s")
|
output, err := ad.runShellCommand("date", "+%s")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, errors.Wrap(err, "failed to get timestamp by adb")
|
return 0, errors.Wrap(err, "failed to get timestamp by adb")
|
||||||
}
|
}
|
||||||
@@ -160,7 +190,7 @@ func (ad *adbDriver) GetTimestamp() (timestamp int64, err error) {
|
|||||||
// PressBack simulates a short press on the BACK button.
|
// PressBack simulates a short press on the BACK button.
|
||||||
func (ad *adbDriver) PressBack(options ...ActionOption) (err error) {
|
func (ad *adbDriver) PressBack(options ...ActionOption) (err error) {
|
||||||
// adb shell input keyevent 4
|
// adb shell input keyevent 4
|
||||||
_, err = ad.adbClient.RunShellCommand("input", "keyevent", fmt.Sprintf("%d", KCBack))
|
_, err = ad.runShellCommand("input", "keyevent", fmt.Sprintf("%d", KCBack))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "press back failed")
|
return errors.Wrap(err, "press back failed")
|
||||||
}
|
}
|
||||||
@@ -168,33 +198,33 @@ func (ad *adbDriver) PressBack(options ...ActionOption) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) StartCamera() (err error) {
|
func (ad *adbDriver) StartCamera() (err error) {
|
||||||
if _, err = ad.adbClient.RunShellCommand("rm", "-r", "/sdcard/DCIM/Camera"); err != nil {
|
if _, err = ad.runShellCommand("rm", "-r", "/sdcard/DCIM/Camera"); err != nil {
|
||||||
return errors.Wrap(err, "remove /sdcard/DCIM/Camera failed")
|
return errors.Wrap(err, "remove /sdcard/DCIM/Camera failed")
|
||||||
}
|
}
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
var version string
|
var version string
|
||||||
if version, err = ad.adbClient.RunShellCommand("getprop", "ro.build.version.release"); err != nil {
|
if version, err = ad.runShellCommand("getprop", "ro.build.version.release"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if version == "11" || version == "12" {
|
if version == "11" || version == "12" {
|
||||||
if _, err = ad.adbClient.RunShellCommand("am", "start", "-a", "android.media.action.STILL_IMAGE_CAMERA"); err != nil {
|
if _, err = ad.runShellCommand("am", "start", "-a", "android.media.action.STILL_IMAGE_CAMERA"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
if _, err = ad.adbClient.RunShellCommand("input", "swipe", "750", "1000", "250", "1000"); err != nil {
|
if _, err = ad.runShellCommand("input", "swipe", "750", "1000", "250", "1000"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
if _, err = ad.adbClient.RunShellCommand("input", "keyevent", fmt.Sprintf("%d", KCCamera)); err != nil {
|
if _, err = ad.runShellCommand("input", "keyevent", fmt.Sprintf("%d", KCCamera)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
if _, err = ad.adbClient.RunShellCommand("am", "start", "-a", "android.media.action.VIDEO_CAPTURE"); err != nil {
|
if _, err = ad.runShellCommand("am", "start", "-a", "android.media.action.VIDEO_CAPTURE"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
if _, err = ad.adbClient.RunShellCommand("input", "keyevent", fmt.Sprintf("%d", KCCamera)); err != nil {
|
if _, err = ad.runShellCommand("input", "keyevent", fmt.Sprintf("%d", KCCamera)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@@ -223,7 +253,7 @@ func (ad *adbDriver) StopCamera() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) Orientation() (orientation Orientation, err error) {
|
func (ad *adbDriver) Orientation() (orientation Orientation, err error) {
|
||||||
output, err := ad.adbClient.RunShellCommand("dumpsys", "input", "|", "grep", "'SurfaceOrientation'")
|
output, err := ad.runShellCommand("dumpsys", "input", "|", "grep", "'SurfaceOrientation'")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -271,7 +301,7 @@ func (ad *adbDriver) combinationKey(keyCodes []KeyCode) (err error) {
|
|||||||
for i, keycode := range keyCodes {
|
for i, keycode := range keyCodes {
|
||||||
strKeyCodes[i] = fmt.Sprintf("%d", keycode)
|
strKeyCodes[i] = fmt.Sprintf("%d", keycode)
|
||||||
}
|
}
|
||||||
_, err = ad.adbClient.RunShellCommand(
|
_, err = ad.runShellCommand(
|
||||||
"input", append([]string{"keycombination"}, strKeyCodes...)...)
|
"input", append([]string{"keycombination"}, strKeyCodes...)...)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -282,7 +312,7 @@ func (ad *adbDriver) PressKeyCode(keyCode KeyCode) (err error) {
|
|||||||
|
|
||||||
func (ad *adbDriver) PressKeyCodes(keyCode KeyCode, metaState KeyMeta) (err error) {
|
func (ad *adbDriver) PressKeyCodes(keyCode KeyCode, metaState KeyMeta) (err error) {
|
||||||
// adb shell input keyevent <keyCode>
|
// adb shell input keyevent <keyCode>
|
||||||
_, err = ad.adbClient.RunShellCommand(
|
_, err = ad.runShellCommand(
|
||||||
"input", "keyevent", fmt.Sprintf("%d", keyCode))
|
"input", "keyevent", fmt.Sprintf("%d", keyCode))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -290,7 +320,7 @@ func (ad *adbDriver) PressKeyCodes(keyCode KeyCode, metaState KeyMeta) (err erro
|
|||||||
func (ad *adbDriver) AppLaunch(packageName string) (err error) {
|
func (ad *adbDriver) AppLaunch(packageName string) (err error) {
|
||||||
// 不指定 Activity 名称启动(启动主 Activity)
|
// 不指定 Activity 名称启动(启动主 Activity)
|
||||||
// adb shell monkey -p <packagename> -c android.intent.category.LAUNCHER 1
|
// adb shell monkey -p <packagename> -c android.intent.category.LAUNCHER 1
|
||||||
sOutput, err := ad.adbClient.RunShellCommand(
|
sOutput, err := ad.runShellCommand(
|
||||||
"monkey", "-p", packageName, "-c", "android.intent.category.LAUNCHER", "1",
|
"monkey", "-p", packageName, "-c", "android.intent.category.LAUNCHER", "1",
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -307,7 +337,7 @@ func (ad *adbDriver) AppLaunch(packageName string) (err error) {
|
|||||||
func (ad *adbDriver) AppTerminate(packageName string) (successful bool, err error) {
|
func (ad *adbDriver) AppTerminate(packageName string) (successful bool, err error) {
|
||||||
// 强制停止应用,停止 <packagename> 相关的进程
|
// 强制停止应用,停止 <packagename> 相关的进程
|
||||||
// adb shell am force-stop <packagename>
|
// adb shell am force-stop <packagename>
|
||||||
_, err = ad.adbClient.RunShellCommand("am", "force-stop", packageName)
|
_, err = ad.runShellCommand("am", "force-stop", packageName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, errors.Wrap(err, "force-stop app failed")
|
return false, errors.Wrap(err, "force-stop app failed")
|
||||||
}
|
}
|
||||||
@@ -315,7 +345,7 @@ func (ad *adbDriver) AppTerminate(packageName string) (successful bool, err erro
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) Tap(x, y float64, options ...ActionOption) (err error) {
|
func (ad *adbDriver) Tap(x, y float64, options ...ActionOption) error {
|
||||||
actionOptions := NewActionOptions(options...)
|
actionOptions := NewActionOptions(options...)
|
||||||
|
|
||||||
if len(actionOptions.Offset) == 2 {
|
if len(actionOptions.Offset) == 2 {
|
||||||
@@ -328,7 +358,7 @@ func (ad *adbDriver) Tap(x, y float64, options ...ActionOption) (err error) {
|
|||||||
// adb shell input tap x y
|
// adb shell input tap x y
|
||||||
xStr := fmt.Sprintf("%.1f", x)
|
xStr := fmt.Sprintf("%.1f", x)
|
||||||
yStr := fmt.Sprintf("%.1f", y)
|
yStr := fmt.Sprintf("%.1f", y)
|
||||||
_, err = ad.adbClient.RunShellCommand(
|
_, err := ad.runShellCommand(
|
||||||
"input", "tap", xStr, yStr)
|
"input", "tap", xStr, yStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr))
|
return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr))
|
||||||
@@ -340,13 +370,13 @@ func (ad *adbDriver) DoubleTap(x, y float64, options ...ActionOption) error {
|
|||||||
// adb shell input tap x y
|
// adb shell input tap x y
|
||||||
xStr := fmt.Sprintf("%.1f", x)
|
xStr := fmt.Sprintf("%.1f", x)
|
||||||
yStr := fmt.Sprintf("%.1f", y)
|
yStr := fmt.Sprintf("%.1f", y)
|
||||||
_, err := ad.adbClient.RunShellCommand(
|
_, err := ad.runShellCommand(
|
||||||
"input", "tap", xStr, yStr)
|
"input", "tap", xStr, yStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr))
|
return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr))
|
||||||
}
|
}
|
||||||
time.Sleep(time.Duration(100) * time.Millisecond)
|
time.Sleep(time.Duration(100) * time.Millisecond)
|
||||||
_, err = ad.adbClient.RunShellCommand(
|
_, err = ad.runShellCommand(
|
||||||
"input", "tap", xStr, yStr)
|
"input", "tap", xStr, yStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr))
|
return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr))
|
||||||
@@ -368,7 +398,7 @@ func (ad *adbDriver) TouchAndHold(x, y float64, options ...ActionOption) (err er
|
|||||||
duration = actionOptions.Duration * 1000
|
duration = actionOptions.Duration * 1000
|
||||||
}
|
}
|
||||||
// adb shell input swipe fromX fromY toX toY
|
// adb shell input swipe fromX fromY toX toY
|
||||||
_, err = ad.adbClient.RunShellCommand(
|
_, err = ad.runShellCommand(
|
||||||
"input", "swipe",
|
"input", "swipe",
|
||||||
fmt.Sprintf("%.1f", x), fmt.Sprintf("%.1f", y),
|
fmt.Sprintf("%.1f", x), fmt.Sprintf("%.1f", y),
|
||||||
fmt.Sprintf("%.1f", x), fmt.Sprintf("%.1f", y),
|
fmt.Sprintf("%.1f", x), fmt.Sprintf("%.1f", y),
|
||||||
@@ -402,7 +432,7 @@ func (ad *adbDriver) Drag(fromX, fromY, toX, toY float64, options ...ActionOptio
|
|||||||
command = "draganddrop"
|
command = "draganddrop"
|
||||||
}
|
}
|
||||||
// adb shell input swipe fromX fromY toX toY
|
// adb shell input swipe fromX fromY toX toY
|
||||||
_, err = ad.adbClient.RunShellCommand(
|
_, err = ad.runShellCommand(
|
||||||
"input", command,
|
"input", command,
|
||||||
fmt.Sprintf("%.1f", fromX), fmt.Sprintf("%.1f", fromY),
|
fmt.Sprintf("%.1f", fromX), fmt.Sprintf("%.1f", fromY),
|
||||||
fmt.Sprintf("%.1f", toX), fmt.Sprintf("%.1f", toY),
|
fmt.Sprintf("%.1f", toX), fmt.Sprintf("%.1f", toY),
|
||||||
@@ -429,7 +459,7 @@ func (ad *adbDriver) Swipe(fromX, fromY, toX, toY float64, options ...ActionOpti
|
|||||||
toY += actionOptions.getRandomOffset()
|
toY += actionOptions.getRandomOffset()
|
||||||
|
|
||||||
// adb shell input swipe fromX fromY toX toY
|
// adb shell input swipe fromX fromY toX toY
|
||||||
_, err := ad.adbClient.RunShellCommand(
|
_, err := ad.runShellCommand(
|
||||||
"input", "swipe",
|
"input", "swipe",
|
||||||
fmt.Sprintf("%.1f", fromX), fmt.Sprintf("%.1f", fromY),
|
fmt.Sprintf("%.1f", fromX), fmt.Sprintf("%.1f", fromY),
|
||||||
fmt.Sprintf("%.1f", toX), fmt.Sprintf("%.1f", toY),
|
fmt.Sprintf("%.1f", toX), fmt.Sprintf("%.1f", toY),
|
||||||
@@ -468,9 +498,9 @@ func (ad *adbDriver) SendKeys(text string, options ...ActionOption) (err error)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) InputText(text string, options ...ActionOption) (err error) {
|
func (ad *adbDriver) InputText(text string, options ...ActionOption) error {
|
||||||
// adb shell input text <text>
|
// adb shell input text <text>
|
||||||
_, err = ad.adbClient.RunShellCommand("input", "text", text)
|
_, err := ad.runShellCommand("input", "text", text)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "send keys failed")
|
return errors.Wrap(err, "send keys failed")
|
||||||
}
|
}
|
||||||
@@ -508,7 +538,7 @@ func (ad *adbDriver) SendUnicodeKeys(text string, options ...ActionOption) (err
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) IsAdbKeyBoardInstalled() bool {
|
func (ad *adbDriver) IsAdbKeyBoardInstalled() bool {
|
||||||
output, err := ad.adbClient.RunShellCommand("ime", "list", "-a")
|
output, err := ad.runShellCommand("ime", "list", "-a")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -516,7 +546,7 @@ func (ad *adbDriver) IsAdbKeyBoardInstalled() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) IsUnicodeIMEInstalled() bool {
|
func (ad *adbDriver) IsUnicodeIMEInstalled() bool {
|
||||||
output, err := ad.adbClient.RunShellCommand("ime", "list", "-s")
|
output, err := ad.runShellCommand("ime", "list", "-s")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -524,7 +554,7 @@ func (ad *adbDriver) IsUnicodeIMEInstalled() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) ListIme() []string {
|
func (ad *adbDriver) ListIme() []string {
|
||||||
output, err := ad.adbClient.RunShellCommand("ime", "list", "-s")
|
output, err := ad.runShellCommand("ime", "list", "-s")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []string{}
|
return []string{}
|
||||||
}
|
}
|
||||||
@@ -534,29 +564,29 @@ func (ad *adbDriver) ListIme() []string {
|
|||||||
func (ad *adbDriver) SendKeysByAdbKeyBoard(text string) (err error) {
|
func (ad *adbDriver) SendKeysByAdbKeyBoard(text string) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
// Reset to default, don't care which keyboard was chosen before switch:
|
// Reset to default, don't care which keyboard was chosen before switch:
|
||||||
if _, resetErr := ad.adbClient.RunShellCommand("ime", "reset"); resetErr != nil {
|
if _, resetErr := ad.runShellCommand("ime", "reset"); resetErr != nil {
|
||||||
log.Error().Err(err).Msg("failed to reset ime")
|
log.Error().Err(err).Msg("failed to reset ime")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Enable ADBKeyBoard from adb
|
// Enable ADBKeyBoard from adb
|
||||||
if _, err = ad.adbClient.RunShellCommand("ime", "enable", AdbKeyBoardPackageName); err != nil {
|
if _, err = ad.runShellCommand("ime", "enable", AdbKeyBoardPackageName); err != nil {
|
||||||
log.Error().Err(err).Msg("failed to enable adbKeyBoard")
|
log.Error().Err(err).Msg("failed to enable adbKeyBoard")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Switch to ADBKeyBoard from adb
|
// Switch to ADBKeyBoard from adb
|
||||||
if _, err = ad.adbClient.RunShellCommand("ime", "set", AdbKeyBoardPackageName); err != nil {
|
if _, err = ad.runShellCommand("ime", "set", AdbKeyBoardPackageName); err != nil {
|
||||||
log.Error().Err(err).Msg("failed to set adbKeyBoard")
|
log.Error().Err(err).Msg("failed to set adbKeyBoard")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
// input Quoted text
|
// input Quoted text
|
||||||
text = strings.ReplaceAll(text, " ", "\\ ")
|
text = strings.ReplaceAll(text, " ", "\\ ")
|
||||||
if _, err = ad.adbClient.RunShellCommand("am", "broadcast", "-a", "ADB_INPUT_TEXT", "--es", "msg", text); err != nil {
|
if _, err = ad.runShellCommand("am", "broadcast", "-a", "ADB_INPUT_TEXT", "--es", "msg", text); err != nil {
|
||||||
log.Error().Err(err).Msg("failed to input by adbKeyBoard")
|
log.Error().Err(err).Msg("failed to input by adbKeyBoard")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, err = ad.adbClient.RunShellCommand("input", "keyevent", fmt.Sprintf("%d", KCEnter)); err != nil {
|
if _, err = ad.runShellCommand("input", "keyevent", fmt.Sprintf("%d", KCEnter)); err != nil {
|
||||||
log.Error().Err(err).Msg("failed to input keyevent enter")
|
log.Error().Err(err).Msg("failed to input keyevent enter")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -569,7 +599,7 @@ func (ad *adbDriver) Input(text string, options ...ActionOption) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) Clear(packageName string) error {
|
func (ad *adbDriver) Clear(packageName string) error {
|
||||||
if _, err := ad.adbClient.RunShellCommand("pm", "clear", packageName); err != nil {
|
if _, err := ad.runShellCommand("pm", "clear", packageName); err != nil {
|
||||||
log.Error().Str("packageName", packageName).Err(err).Msg("failed to clear package cache")
|
log.Error().Str("packageName", packageName).Err(err).Msg("failed to clear package cache")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -593,25 +623,25 @@ func (ad *adbDriver) SetRotation(rotation Rotation) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) Screenshot() (raw *bytes.Buffer, err error) {
|
func (ad *adbDriver) Screenshot() (raw *bytes.Buffer, err error) {
|
||||||
// adb shell screencap -p
|
resp, err := ad.runShellCommand("screencap", "-p")
|
||||||
resp, err := ad.adbClient.ScreenCap()
|
if err != nil {
|
||||||
if err == nil {
|
return nil, errors.Wrap(err, "adb screencap failed")
|
||||||
return bytes.NewBuffer(resp), nil
|
|
||||||
}
|
}
|
||||||
return nil, errors.Wrap(err, "adb screencap failed")
|
|
||||||
|
return bytes.NewBuffer([]byte(resp)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) Source(srcOpt ...SourceOption) (source string, err error) {
|
func (ad *adbDriver) Source(srcOpt ...SourceOption) (source string, err error) {
|
||||||
_, err = ad.adbClient.RunShellCommand("rm", "-rf", "/sdcard/window_dump.xml")
|
_, err = ad.runShellCommand("rm", "-rf", "/sdcard/window_dump.xml")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 高版本报错 ERROR: null root node returned by UiTestAutomationBridge.
|
// 高版本报错 ERROR: null root node returned by UiTestAutomationBridge.
|
||||||
_, err = ad.adbClient.RunShellCommand("uiautomator", "dump")
|
_, err = ad.runShellCommand("uiautomator", "dump")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
source, err = ad.adbClient.RunShellCommand("cat", "/sdcard/window_dump.xml")
|
source, err = ad.runShellCommand("cat", "/sdcard/window_dump.xml")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -816,7 +846,7 @@ func (ad *adbDriver) GetDriverResults() []*DriverResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) {
|
func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) {
|
||||||
packageInfo, err := ad.adbClient.RunShellCommand(
|
packageInfo, err := ad.runShellCommand(
|
||||||
"CLASSPATH=/data/local/tmp/evalite", "app_process", "/",
|
"CLASSPATH=/data/local/tmp/evalite", "app_process", "/",
|
||||||
"com.bytedance.iesqa.eval_process.PackageService", "2>/dev/null")
|
"com.bytedance.iesqa.eval_process.PackageService", "2>/dev/null")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -844,7 +874,7 @@ func (ad *adbDriver) SetIme(imeRegx string) error {
|
|||||||
}
|
}
|
||||||
brand, _ := ad.adbClient.Brand()
|
brand, _ := ad.adbClient.Brand()
|
||||||
packageName := strings.Split(ime, "/")[0]
|
packageName := strings.Split(ime, "/")[0]
|
||||||
res, err := ad.adbClient.RunShellCommand("ime", "set", ime)
|
res, err := ad.runShellCommand("ime", "set", ime)
|
||||||
log.Info().Str("funcName", "SetIme").Interface("ime", ime).
|
log.Info().Str("funcName", "SetIme").Interface("ime", ime).
|
||||||
Interface("output", res).Msg("set ime")
|
Interface("output", res).Msg("set ime")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -853,7 +883,7 @@ func (ad *adbDriver) SetIme(imeRegx string) error {
|
|||||||
|
|
||||||
if strings.ToLower(brand) == "oppo" {
|
if strings.ToLower(brand) == "oppo" {
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
pid, _ := ad.adbClient.RunShellCommand("pidof", packageName)
|
pid, _ := ad.runShellCommand("pidof", packageName)
|
||||||
if strings.TrimSpace(pid) == "" {
|
if strings.TrimSpace(pid) == "" {
|
||||||
appInfo, err := ad.GetForegroundApp()
|
appInfo, err := ad.GetForegroundApp()
|
||||||
_ = ad.AppLaunch(packageName)
|
_ = ad.AppLaunch(packageName)
|
||||||
@@ -877,7 +907,7 @@ func (ad *adbDriver) SetIme(imeRegx string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *adbDriver) GetIme() (ime string, err error) {
|
func (ad *adbDriver) GetIme() (ime string, err error) {
|
||||||
currentIme, err := ad.adbClient.RunShellCommand("settings", "get", "secure", "default_input_method")
|
currentIme, err := ad.runShellCommand("settings", "get", "secure", "default_input_method")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn().Err(err).Msgf("get default ime failed")
|
log.Warn().Err(err).Msgf("get default ime failed")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ func (d *DriverSession) Get(withReset bool) Attachments {
|
|||||||
data := Attachments{
|
data := Attachments{
|
||||||
"screen_results": d.screenResults,
|
"screen_results": d.screenResults,
|
||||||
}
|
}
|
||||||
if len(d.e2eDelay) != 0 {
|
if len(d.requests) != 0 {
|
||||||
data["requests"] = d.requests
|
data["requests"] = d.requests
|
||||||
}
|
}
|
||||||
if d.e2eDelay != nil {
|
if d.e2eDelay != nil {
|
||||||
@@ -77,9 +77,11 @@ type DriverResult struct {
|
|||||||
RequestBody string `json:"request_body,omitempty"`
|
RequestBody string `json:"request_body,omitempty"`
|
||||||
RequestTime time.Time `json:"request_time"`
|
RequestTime time.Time `json:"request_time"`
|
||||||
|
|
||||||
|
Success bool `json:"success"`
|
||||||
ResponseStatus int `json:"response_status"`
|
ResponseStatus int `json:"response_status"`
|
||||||
ResponseDuration int64 `json:"response_duration(ms)"` // ms
|
ResponseDuration int64 `json:"response_duration(ms)"` // ms
|
||||||
ResponseBody string `json:"response_body"`
|
ResponseBody string `json:"response_body"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wd *Driver) concatURL(u *url.URL, elem ...string) string {
|
func (wd *Driver) concatURL(u *url.URL, elem ...string) string {
|
||||||
@@ -122,8 +124,11 @@ func (wd *Driver) httpRequest(method string, rawURL string, rawBody []byte) (raw
|
|||||||
|
|
||||||
var logger *zerolog.Event
|
var logger *zerolog.Event
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
driverResult.Success = false
|
||||||
|
driverResult.Error = err.Error()
|
||||||
logger = log.Error().Bool("success", false).Err(err)
|
logger = log.Error().Bool("success", false).Err(err)
|
||||||
} else {
|
} else {
|
||||||
|
driverResult.Success = true
|
||||||
logger = log.Debug().Bool("success", true)
|
logger = log.Debug().Bool("success", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
@@ -65,10 +66,11 @@ func (dExt *DriverExt) GetScreenResult(options ...ActionOption) (screenResult *S
|
|||||||
var lastErr error
|
var lastErr error
|
||||||
|
|
||||||
// get screenshot info with retry
|
// get screenshot info with retry
|
||||||
for i := 0; i < actionOptions.MaxRetryTimes; i++ {
|
for i := 0; i <= actionOptions.MaxRetryTimes; i++ {
|
||||||
bufSource, imagePath, err = dExt.GetScreenShot(fileName)
|
bufSource, imagePath, err = dExt.GetScreenShot(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lastErr = err
|
lastErr = err
|
||||||
|
time.Sleep(time.Second * 1)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user