mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-20 23:59:49 +08:00
feat: add PushImage/ClearImages in IDriver
This commit is contained in:
@@ -147,6 +147,19 @@ func (d *Device) Usb() (string, error) {
|
||||
return "", errors.New("does not have attribute: usb")
|
||||
}
|
||||
|
||||
func (d *Device) SdkVersion() (string, error) {
|
||||
if d.HasAttribute("sdkVersion") {
|
||||
return d.attrs["sdkVersion"], nil
|
||||
}
|
||||
sdkVersion, err := d.RunShellCommand("getprop", "ro.build.version.sdk")
|
||||
sdkVersion = strings.TrimSpace(sdkVersion)
|
||||
if err != nil {
|
||||
return "", errors.New("does not have attribute: sdkVersion")
|
||||
}
|
||||
d.attrs["sdkVersion"] = sdkVersion
|
||||
return sdkVersion, nil
|
||||
}
|
||||
|
||||
func (d *Device) transportId() (string, error) {
|
||||
if d.HasAttribute("transport_id") {
|
||||
return d.attrs["transport_id"], nil
|
||||
|
||||
@@ -254,7 +254,7 @@ func (dev *AndroidDevice) installCommon(apkPath string, args ...string) error {
|
||||
}
|
||||
|
||||
func (dev *AndroidDevice) Uninstall(packageName string) error {
|
||||
_, err := dev.Device.RunShellCommand("uninstall", packageName)
|
||||
_, err := dev.Device.Uninstall(packageName)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -339,6 +339,23 @@ func (dev *AndroidDevice) GetPackageInfo(packageName string) (types.AppInfo, err
|
||||
return appInfo, nil
|
||||
}
|
||||
|
||||
func (dev *AndroidDevice) GetAppInfo(packageName string) (app types.AppInfo, err error) {
|
||||
packageInfo, err := dev.RunShellCommand(
|
||||
"CLASSPATH=/data/local/tmp/evalite", "app_process", "/",
|
||||
"com.bytedance.iesqa.eval_process.PackageService", packageName, "2>/dev/null")
|
||||
if packageInfo == "" {
|
||||
return app, nil
|
||||
}
|
||||
if err != nil {
|
||||
return app, err
|
||||
}
|
||||
err = json.Unmarshal([]byte(strings.TrimSpace(packageInfo)), &app)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("packageInfo", packageInfo)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (dev *AndroidDevice) getPackageVersion(packageName string) (string, error) {
|
||||
output, err := dev.Device.RunShellCommand("dumpsys", "package", packageName, "|", "grep", "versionName")
|
||||
if err != nil {
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"io/fs"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
@@ -423,7 +424,11 @@ func (ad *ADBDriver) Input(text string, opts ...option.ActionOption) error {
|
||||
return nil
|
||||
}
|
||||
// adb shell input text <text>
|
||||
_, err = ad.runShellCommand("input", "text", text)
|
||||
return ad.input(text, opts...)
|
||||
}
|
||||
|
||||
func (ad *ADBDriver) input(text string, _ ...option.ActionOption) error {
|
||||
_, err := ad.runShellCommand("input", "text", text)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "send keys failed")
|
||||
}
|
||||
@@ -456,7 +461,7 @@ func (ad *ADBDriver) SendUnicodeKeys(text string, opts ...option.ActionOption) (
|
||||
log.Warn().Err(err).Msgf("encode text with modified utf7 failed")
|
||||
return
|
||||
}
|
||||
err = ad.Input("\""+strings.ReplaceAll(encodedStr, "\"", "\\\"")+"\"", opts...)
|
||||
err = ad.input("\""+strings.ReplaceAll(encodedStr, "\"", "\\\"")+"\"", opts...)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -850,6 +855,29 @@ func (ad *ADBDriver) TearDown() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ad *ADBDriver) OpenUrl(url string) (err error) {
|
||||
_, err = ad.runShellCommand(
|
||||
"am", "start", "-W", "-a", "android.intent.action.VIEW",
|
||||
"-d", fmt.Sprintf("'%s'", url))
|
||||
return
|
||||
}
|
||||
|
||||
func (ad *ADBDriver) PushImage(localPath string) error {
|
||||
remotePath := path.Join("/sdcard/DCIM/Camera/", path.Base(localPath))
|
||||
if err := ad.Device.PushFile(localPath, remotePath); err != nil {
|
||||
return err
|
||||
}
|
||||
_, _ = ad.Device.RunShellCommand("am", "broadcast",
|
||||
"-a", "android.intent.action.MEDIA_SCANNER_SCAN_FILE",
|
||||
"-d", fmt.Sprintf("file://%s", remotePath))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ad *ADBDriver) ClearImages() error {
|
||||
_, _ = ad.Device.RunShellCommand("rm", "-rf", "/sdcard/DCIM/Camera/*")
|
||||
return nil
|
||||
}
|
||||
|
||||
type ExportPoint struct {
|
||||
Start int `json:"start" yaml:"start"`
|
||||
End int `json:"end" yaml:"end"`
|
||||
|
||||
@@ -66,6 +66,10 @@ type IDriver interface {
|
||||
AppTerminate(packageName string) (bool, error)
|
||||
AppClear(packageName string) error
|
||||
|
||||
// image related
|
||||
PushImage(localPath string) error
|
||||
ClearImages() error
|
||||
|
||||
// triggers the log capture and returns the log entries
|
||||
StartCaptureLog(identifier ...string) error
|
||||
StopCaptureLog() (result interface{}, err error)
|
||||
|
||||
@@ -287,3 +287,13 @@ func (hd *HDCDriver) SetRotation(rotation types.Rotation) (err error) {
|
||||
err = types.ErrDriverNotImplemented
|
||||
return
|
||||
}
|
||||
|
||||
func (hd *HDCDriver) PushImage(localPath string) error {
|
||||
log.Warn().Msg("PushImage not implemented in HDCDriver")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (hd *HDCDriver) ClearImages() error {
|
||||
log.Warn().Msg("ClearImages not implemented in HDCDriver")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -926,6 +927,33 @@ func (wd *WDADriver) StartCaptureLog(identifier ...string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (wd *WDADriver) PushImage(localPath string) error {
|
||||
localFile, err := os.Open(localPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer localFile.Close()
|
||||
|
||||
imageBytes, err := io.ReadAll(localFile)
|
||||
data := map[string]interface{}{
|
||||
"file_name": path.Base(localPath),
|
||||
"file_data": base64.StdEncoding.EncodeToString(imageBytes),
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = wd.Session.POST(data, "/gtf/albums/add")
|
||||
return err
|
||||
}
|
||||
|
||||
func (wd *WDADriver) ClearImages() error {
|
||||
data := map[string]interface{}{}
|
||||
|
||||
_, err := wd.Session.POST(data, "/gtf/albums/clear")
|
||||
return err
|
||||
}
|
||||
|
||||
type wdaResponse struct {
|
||||
Status int `json:"status"`
|
||||
SessionID string `json:"sessionId"`
|
||||
|
||||
Reference in New Issue
Block a user