mirror of
https://github.com/httprunner/httprunner.git
synced 2026-08-28 11:36:56 +08:00
feat: add PushImage/ClearImages in IDriver
This commit is contained in:
@@ -1 +1 @@
|
|||||||
v5.0.0+2502181804
|
v5.0.0+2502181933
|
||||||
|
|||||||
@@ -147,6 +147,19 @@ func (d *Device) Usb() (string, error) {
|
|||||||
return "", errors.New("does not have attribute: usb")
|
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) {
|
func (d *Device) transportId() (string, error) {
|
||||||
if d.HasAttribute("transport_id") {
|
if d.HasAttribute("transport_id") {
|
||||||
return d.attrs["transport_id"], nil
|
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 {
|
func (dev *AndroidDevice) Uninstall(packageName string) error {
|
||||||
_, err := dev.Device.RunShellCommand("uninstall", packageName)
|
_, err := dev.Device.Uninstall(packageName)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,6 +339,23 @@ func (dev *AndroidDevice) GetPackageInfo(packageName string) (types.AppInfo, err
|
|||||||
return appInfo, nil
|
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) {
|
func (dev *AndroidDevice) getPackageVersion(packageName string) (string, error) {
|
||||||
output, err := dev.Device.RunShellCommand("dumpsys", "package", packageName, "|", "grep", "versionName")
|
output, err := dev.Device.RunShellCommand("dumpsys", "package", packageName, "|", "grep", "versionName")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"io/fs"
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -423,7 +424,11 @@ func (ad *ADBDriver) Input(text string, opts ...option.ActionOption) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// adb shell input text <text>
|
// 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 {
|
if err != nil {
|
||||||
return errors.Wrap(err, "send keys failed")
|
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")
|
log.Warn().Err(err).Msgf("encode text with modified utf7 failed")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = ad.Input("\""+strings.ReplaceAll(encodedStr, "\"", "\\\"")+"\"", opts...)
|
err = ad.input("\""+strings.ReplaceAll(encodedStr, "\"", "\\\"")+"\"", opts...)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -850,6 +855,29 @@ func (ad *ADBDriver) TearDown() error {
|
|||||||
return nil
|
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 {
|
type ExportPoint struct {
|
||||||
Start int `json:"start" yaml:"start"`
|
Start int `json:"start" yaml:"start"`
|
||||||
End int `json:"end" yaml:"end"`
|
End int `json:"end" yaml:"end"`
|
||||||
|
|||||||
@@ -66,6 +66,10 @@ type IDriver interface {
|
|||||||
AppTerminate(packageName string) (bool, error)
|
AppTerminate(packageName string) (bool, error)
|
||||||
AppClear(packageName string) error
|
AppClear(packageName string) error
|
||||||
|
|
||||||
|
// image related
|
||||||
|
PushImage(localPath string) error
|
||||||
|
ClearImages() error
|
||||||
|
|
||||||
// triggers the log capture and returns the log entries
|
// triggers the log capture and returns the log entries
|
||||||
StartCaptureLog(identifier ...string) error
|
StartCaptureLog(identifier ...string) error
|
||||||
StopCaptureLog() (result interface{}, err error)
|
StopCaptureLog() (result interface{}, err error)
|
||||||
|
|||||||
@@ -287,3 +287,13 @@ func (hd *HDCDriver) SetRotation(rotation types.Rotation) (err error) {
|
|||||||
err = types.ErrDriverNotImplemented
|
err = types.ErrDriverNotImplemented
|
||||||
return
|
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"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -926,6 +927,33 @@ func (wd *WDADriver) StartCaptureLog(identifier ...string) error {
|
|||||||
return nil
|
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 {
|
type wdaResponse struct {
|
||||||
Status int `json:"status"`
|
Status int `json:"status"`
|
||||||
SessionID string `json:"sessionId"`
|
SessionID string `json:"sessionId"`
|
||||||
|
|||||||
Reference in New Issue
Block a user