mirror of
https://github.com/httprunner/httprunner.git
synced 2026-08-13 17:44:35 +08:00
fix: 修改变量名称
This commit is contained in:
@@ -292,7 +292,7 @@ func (d *Device) ReverseForwardKill(remoteInterface interface{}) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Device) RunShootsCommand(command []byte, processName string) (res string, err error) {
|
||||
func (d *Device) RunStubCommand(command []byte, processName string) (res string, err error) {
|
||||
var tp transport
|
||||
if tp, err = d.createDeviceTransport(); err != nil {
|
||||
return "", err
|
||||
|
||||
@@ -7,9 +7,6 @@ const (
|
||||
|
||||
InvalidParamErrorCode = 100002
|
||||
InvalidParamErrorMsg = "Invalid %s Param"
|
||||
|
||||
CodeNotFound = 1004
|
||||
MsgNotFound = "Resource not found"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -28,10 +28,10 @@ func NewServer(port int) error {
|
||||
router.POST("/api/v1/:platform/:serial/app/launch", parseDeviceInfo(), launchAppHandler)
|
||||
router.POST("/api/v1/:platform/:serial/app/terminal", parseDeviceInfo(), terminalAppHandler)
|
||||
router.GET("/api/v1/:platform/:serial/screenshot", parseDeviceInfo(), screenshotHandler)
|
||||
router.GET("/api/v1/:platform/:serial/shoots/source", parseDeviceInfo(), sourceHandler)
|
||||
router.GET("/api/v1/:platform/:serial/stub/source", parseDeviceInfo(), sourceHandler)
|
||||
router.GET("/api/v1/:platform/:serial/adb/source", parseDeviceInfo(), adbSourceHandler)
|
||||
router.POST("/api/v1/:platform/:serial/shoots/login", parseDeviceInfo(), loginHandler)
|
||||
router.POST("/api/v1/:platform/:serial/shoots/logout", parseDeviceInfo(), logoutHandler)
|
||||
router.POST("/api/v1/:platform/:serial/stub/login", parseDeviceInfo(), loginHandler)
|
||||
router.POST("/api/v1/:platform/:serial/stub/logout", parseDeviceInfo(), logoutHandler)
|
||||
|
||||
err := router.Run(fmt.Sprintf("127.0.0.1:%d", port))
|
||||
if err != nil {
|
||||
@@ -523,7 +523,7 @@ func parseDeviceInfo() gin.HandlerFunc {
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
device, err := uixt.NewAndroidDevice(uixt.WithSerialNumber(serial), uixt.WithShoots(true))
|
||||
device, err := uixt.NewAndroidDevice(uixt.WithSerialNumber(serial), uixt.WithStub(true))
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("platform", platform).Str("serial", serial).Msg(fmt.Sprintf("[%s]: Device Not Found", c.HandlerName()))
|
||||
c.JSON(http.StatusBadRequest, HttpResponse{
|
||||
|
||||
@@ -719,7 +719,7 @@ func (ad *adbDriver) GetDriverResults() []*DriverResult {
|
||||
}
|
||||
|
||||
func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) {
|
||||
packageInfo, err := ad.adbClient.RunShellCommand("CLASSPATH=/data/local/tmp/eval_tool", "app_process", "/", "com.bytedance.iesqa.eval_process.PackageService")
|
||||
packageInfo, err := ad.adbClient.RunShellCommand("CLASSPATH=/data/local/tmp/evalite", "app_process", "/", "com.bytedance.iesqa.eval_process.PackageService")
|
||||
if err != nil {
|
||||
return app, err
|
||||
}
|
||||
|
||||
@@ -38,8 +38,8 @@ var (
|
||||
InstallViaInstallerCommand = "am start -S -n sogou.mobile.explorer/.PackageInstallerActivity -d"
|
||||
)
|
||||
|
||||
//go:embed eval_tool
|
||||
var evalTool embed.FS
|
||||
//go:embed evalite
|
||||
var evalite embed.FS
|
||||
|
||||
const forwardToPrefix = "forward-to-"
|
||||
|
||||
@@ -57,9 +57,9 @@ func WithUIA2(uia2On bool) AndroidDeviceOption {
|
||||
}
|
||||
}
|
||||
|
||||
func WithShoots(shootsOn bool) AndroidDeviceOption {
|
||||
func WithStub(stubOn bool) AndroidDeviceOption {
|
||||
return func(device *AndroidDevice) {
|
||||
device.SHOOTS = shootsOn
|
||||
device.STUB = stubOn
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,11 +131,11 @@ func NewAndroidDevice(options ...AndroidDeviceOption) (device *AndroidDevice, er
|
||||
|
||||
device.d = dev
|
||||
device.logcat = NewAdbLogcat(device.SerialNumber)
|
||||
evalToolRaw, err := evalTool.ReadFile("eval_tool")
|
||||
evalToolRaw, err := evalite.ReadFile("evalite")
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(code.LoadFileError, err.Error())
|
||||
}
|
||||
err = dev.Push(bytes.NewReader(evalToolRaw), "/data/local/tmp/eval_tool", time.Now())
|
||||
err = dev.Push(bytes.NewReader(evalToolRaw), "/data/local/tmp/evalite", time.Now())
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(code.AndroidShellExecError, err.Error())
|
||||
}
|
||||
@@ -181,7 +181,7 @@ type AndroidDevice struct {
|
||||
logcat *AdbLogcat
|
||||
SerialNumber string `json:"serial,omitempty" yaml:"serial,omitempty"`
|
||||
UIA2 bool `json:"uia2,omitempty" yaml:"uia2,omitempty"` // use uiautomator2
|
||||
SHOOTS bool `json:"shoots,omitempty" yaml:"uia2,omitempty"` // use uiautomator2
|
||||
STUB bool `json:"stub,omitempty" yaml:"stub,omitempty"` // use uiautomator2
|
||||
UIA2IP string `json:"uia2_ip,omitempty" yaml:"uia2_ip,omitempty"` // uiautomator2 server ip
|
||||
UIA2Port int `json:"uia2_port,omitempty" yaml:"uia2_port,omitempty"` // uiautomator2 server port
|
||||
LogOn bool `json:"log_on,omitempty" yaml:"log_on,omitempty"`
|
||||
@@ -212,8 +212,8 @@ func (dev *AndroidDevice) NewDriver(options ...DriverOption) (driverExt *DriverE
|
||||
var driver WebDriver
|
||||
if dev.UIA2 || dev.LogOn {
|
||||
driver, err = dev.NewUSBDriver(driverOptions.capabilities)
|
||||
} else if dev.SHOOTS {
|
||||
driver, err = dev.NewShootsDriver(driverOptions.capabilities)
|
||||
} else if dev.STUB {
|
||||
driver, err = dev.NewStubDriver(driverOptions.capabilities)
|
||||
} else {
|
||||
driver, err = dev.NewAdbDriver()
|
||||
}
|
||||
@@ -258,12 +258,12 @@ func (dev *AndroidDevice) NewUSBDriver(capabilities Capabilities) (driver WebDri
|
||||
return uiaDriver, nil
|
||||
}
|
||||
|
||||
func (dev *AndroidDevice) NewShootsDriver(capabilities Capabilities) (driver *ShootsAndroidDriver, err error) {
|
||||
socketLocalPort, err := dev.d.Forward(ShootsSocketName)
|
||||
func (dev *AndroidDevice) NewStubDriver(capabilities Capabilities) (driver *stubAndroidDriver, err error) {
|
||||
socketLocalPort, err := dev.d.Forward(StubSocketName)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(code.AndroidDeviceConnectionError,
|
||||
fmt.Sprintf("forward port %d->%s failed: %v",
|
||||
socketLocalPort, ShootsSocketName, err))
|
||||
socketLocalPort, StubSocketName, err))
|
||||
}
|
||||
|
||||
serverLocalPort, err := dev.d.Forward(DouyinServerPort)
|
||||
@@ -276,16 +276,16 @@ func (dev *AndroidDevice) NewShootsDriver(capabilities Capabilities) (driver *Sh
|
||||
rawURL := fmt.Sprintf("http://%s%d:%d",
|
||||
forwardToPrefix, serverLocalPort, DouyinServerPort)
|
||||
|
||||
shootsDriver, err := newShootsAndroidDriver(fmt.Sprintf("127.0.0.1:%d", socketLocalPort), rawURL)
|
||||
stubDriver, err := newStubAndroidDriver(fmt.Sprintf("127.0.0.1:%d", socketLocalPort), rawURL)
|
||||
if err != nil {
|
||||
_ = dev.d.ForwardKill(socketLocalPort)
|
||||
_ = dev.d.ForwardKill(serverLocalPort)
|
||||
return nil, errors.Wrap(code.AndroidDeviceConnectionError, err.Error())
|
||||
}
|
||||
shootsDriver.adbClient = dev.d
|
||||
shootsDriver.logcat = dev.logcat
|
||||
stubDriver.adbClient = dev.d
|
||||
stubDriver.logcat = dev.logcat
|
||||
|
||||
return shootsDriver, nil
|
||||
return stubDriver, nil
|
||||
}
|
||||
|
||||
// NewHTTPDriver creates new remote HTTP client, this will also start a new session.
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
package uixt
|
||||
|
||||
import "testing"
|
||||
|
||||
var shootsDriver *ShootsAndroidDriver
|
||||
|
||||
func setupShootsDriver(t *testing.T) {
|
||||
device, err := NewAndroidDevice()
|
||||
checkErr(t, err)
|
||||
device.SHOOTS = true
|
||||
shootsDriver, err = device.NewShootsDriver(Capabilities{})
|
||||
checkErr(t, err)
|
||||
}
|
||||
|
||||
func TestHello(t *testing.T) {
|
||||
setupShootsDriver(t)
|
||||
status, err := shootsDriver.Status()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(status)
|
||||
}
|
||||
|
||||
func TestSource(t *testing.T) {
|
||||
setupShootsDriver(t)
|
||||
source, err := shootsDriver.Source()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(source)
|
||||
}
|
||||
|
||||
func TestIsLogin(t *testing.T) {
|
||||
setupShootsDriver(t)
|
||||
res, err := shootsDriver.isLogin("com.ss.android.ugc.aweme")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(res)
|
||||
}
|
||||
|
||||
func TestLogin(t *testing.T) {
|
||||
setupShootsDriver(t)
|
||||
err := shootsDriver.LoginNoneUI("com.ss.android.ugc.aweme", "12342316231", "8517")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLogout(t *testing.T) {
|
||||
setupShootsDriver(t)
|
||||
err := shootsDriver.LogoutNoneUI("com.ss.android.ugc.aweme")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -15,18 +15,18 @@ import (
|
||||
"github.com/httprunner/httprunner/v4/hrp/internal/json"
|
||||
)
|
||||
|
||||
type ShootsAndroidDriver struct {
|
||||
type stubAndroidDriver struct {
|
||||
socket net.Conn
|
||||
seq int
|
||||
timeout time.Duration
|
||||
adbDriver
|
||||
}
|
||||
|
||||
const ShootsSocketName = "com.bytest.device"
|
||||
const StubSocketName = "com.bytest.device"
|
||||
|
||||
// newShootsAndroidDriver
|
||||
// 创建shoots Driver address为forward后的端口格式127.0.0.1:${port}
|
||||
func newShootsAndroidDriver(address string, urlPrefix string, readTimeout ...time.Duration) (*ShootsAndroidDriver, error) {
|
||||
// newStubAndroidDriver
|
||||
// 创建stub Driver address为forward后的端口格式127.0.0.1:${port}
|
||||
func newStubAndroidDriver(address string, urlPrefix string, readTimeout ...time.Duration) (*stubAndroidDriver, error) {
|
||||
timeout := 10 * time.Second
|
||||
if len(readTimeout) > 0 {
|
||||
timeout = readTimeout[0]
|
||||
@@ -38,7 +38,7 @@ func newShootsAndroidDriver(address string, urlPrefix string, readTimeout ...tim
|
||||
return nil, err
|
||||
}
|
||||
|
||||
driver := &ShootsAndroidDriver{
|
||||
driver := &stubAndroidDriver{
|
||||
socket: conn,
|
||||
timeout: timeout,
|
||||
}
|
||||
@@ -50,7 +50,7 @@ func newShootsAndroidDriver(address string, urlPrefix string, readTimeout ...tim
|
||||
return driver, nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) httpGET(pathElem ...string) (rawResp rawResponse, err error) {
|
||||
func (sad *stubAndroidDriver) httpGET(pathElem ...string) (rawResp rawResponse, err error) {
|
||||
var localPort int
|
||||
{
|
||||
tmpURL, _ := url.Parse(sad.urlPrefix.String())
|
||||
@@ -68,7 +68,7 @@ func (sad *ShootsAndroidDriver) httpGET(pathElem ...string) (rawResp rawResponse
|
||||
return sad.httpRequest(http.MethodGet, sad.concatURL(nil, pathElem...), nil)
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) httpPOST(data interface{}, pathElem ...string) (rawResp rawResponse, err error) {
|
||||
func (sad *stubAndroidDriver) httpPOST(data interface{}, pathElem ...string) (rawResp rawResponse, err error) {
|
||||
var localPort int
|
||||
{
|
||||
tmpURL, _ := url.Parse(sad.urlPrefix.String())
|
||||
@@ -93,11 +93,11 @@ func (sad *ShootsAndroidDriver) httpPOST(data interface{}, pathElem ...string) (
|
||||
return sad.httpRequest(http.MethodPost, sad.concatURL(nil, pathElem...), bsJSON)
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) NewSession(capabilities Capabilities) (SessionInfo, error) {
|
||||
func (sad *stubAndroidDriver) NewSession(capabilities Capabilities) (SessionInfo, error) {
|
||||
return SessionInfo{}, errDriverNotImplemented
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) sendCommand(packageName string, cmdType string, params map[string]interface{}, readTimeout ...time.Duration) (interface{}, error) {
|
||||
func (sad *stubAndroidDriver) sendCommand(packageName string, cmdType string, params map[string]interface{}, readTimeout ...time.Duration) (interface{}, error) {
|
||||
sad.seq++
|
||||
packet := map[string]interface{}{
|
||||
"Seq": sad.seq,
|
||||
@@ -115,7 +115,7 @@ func (sad *ShootsAndroidDriver) sendCommand(packageName string, cmdType string,
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res, err := sad.adbClient.RunShootsCommand(append(data, '\n'), packageName)
|
||||
res, err := sad.adbClient.RunStubCommand(append(data, '\n'), packageName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -124,24 +124,24 @@ func (sad *ShootsAndroidDriver) sendCommand(packageName string, cmdType string,
|
||||
return nil, err
|
||||
}
|
||||
if resultMap["Error"] != nil {
|
||||
return nil, fmt.Errorf("failed to call shoots command: %s", resultMap["Error"].(string))
|
||||
return nil, fmt.Errorf("failed to call stub command: %s", resultMap["Error"].(string))
|
||||
}
|
||||
|
||||
return resultMap["Result"], nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) DeleteSession() error {
|
||||
func (sad *stubAndroidDriver) DeleteSession() error {
|
||||
return sad.close()
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) close() error {
|
||||
func (sad *stubAndroidDriver) close() error {
|
||||
if sad.socket != nil {
|
||||
return sad.socket.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) Status() (DeviceStatus, error) {
|
||||
func (sad *stubAndroidDriver) Status() (DeviceStatus, error) {
|
||||
app, err := sad.GetForegroundApp()
|
||||
if err != nil {
|
||||
return DeviceStatus{}, err
|
||||
@@ -150,11 +150,11 @@ func (sad *ShootsAndroidDriver) Status() (DeviceStatus, error) {
|
||||
if err != nil {
|
||||
return DeviceStatus{}, err
|
||||
}
|
||||
log.Info().Msg(fmt.Sprintf("pint shoots result :%v", res))
|
||||
log.Info().Msg(fmt.Sprintf("ping stub result :%v", res))
|
||||
return DeviceStatus{}, nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) Source(srcOpt ...SourceOption) (source string, err error) {
|
||||
func (sad *stubAndroidDriver) Source(srcOpt ...SourceOption) (source string, err error) {
|
||||
app, err := sad.GetForegroundApp()
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -172,7 +172,7 @@ func (sad *ShootsAndroidDriver) Source(srcOpt ...SourceOption) (source string, e
|
||||
return res.(string), nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) LoginNoneUIBak(packageName, phoneNumber, captcha string) error {
|
||||
func (sad *stubAndroidDriver) LoginNoneUIBak(packageName, phoneNumber, captcha string) error {
|
||||
_, err := sad.adbClient.RunShellCommand("am", "broadcast", "-a", fmt.Sprintf("%s.util.crony.action_login", packageName), "-e", "phone", phoneNumber, "-e", "code", captcha)
|
||||
time.Sleep(10 * time.Second)
|
||||
login, err := sad.isLogin(packageName)
|
||||
@@ -183,7 +183,7 @@ func (sad *ShootsAndroidDriver) LoginNoneUIBak(packageName, phoneNumber, captcha
|
||||
return err
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) LoginNoneUI(packageName, phoneNumber, captcha string) error {
|
||||
func (sad *stubAndroidDriver) LoginNoneUI(packageName, phoneNumber, captcha string) error {
|
||||
params := map[string]interface{}{
|
||||
"phone": phoneNumber,
|
||||
"code": captcha,
|
||||
@@ -213,7 +213,7 @@ func (sad *ShootsAndroidDriver) LoginNoneUI(packageName, phoneNumber, captcha st
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) LogoutNoneUI(packageName string) error {
|
||||
func (sad *stubAndroidDriver) LogoutNoneUI(packageName string) error {
|
||||
resp, err := sad.httpGET("/host", "/logout")
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -235,7 +235,7 @@ func (sad *ShootsAndroidDriver) LogoutNoneUI(packageName string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) LoginNoneUIDynamic(packageName, phoneNumber string, captcha string) error {
|
||||
func (sad *stubAndroidDriver) LoginNoneUIDynamic(packageName, phoneNumber string, captcha string) error {
|
||||
params := map[string]interface{}{
|
||||
"ClassName": "qe.python.test.LoginUtil",
|
||||
"Method": "loginSync",
|
||||
@@ -250,7 +250,7 @@ func (sad *ShootsAndroidDriver) LoginNoneUIDynamic(packageName, phoneNumber stri
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sad *ShootsAndroidDriver) isLogin(packageName string) (login bool, err error) {
|
||||
func (sad *stubAndroidDriver) isLogin(packageName string) (login bool, err error) {
|
||||
resp, err := sad.httpGET("/host", "/login", "/check")
|
||||
if err != nil {
|
||||
return false, err
|
||||
56
hrp/pkg/uixt/android_stub_driver_test.go
Normal file
56
hrp/pkg/uixt/android_stub_driver_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package uixt
|
||||
|
||||
import "testing"
|
||||
|
||||
var androidStubDriver *stubAndroidDriver
|
||||
|
||||
func setupStubDriver(t *testing.T) {
|
||||
device, err := NewAndroidDevice()
|
||||
checkErr(t, err)
|
||||
device.STUB = true
|
||||
androidStubDriver, err = device.NewStubDriver(Capabilities{})
|
||||
checkErr(t, err)
|
||||
}
|
||||
|
||||
func TestHello(t *testing.T) {
|
||||
setupStubDriver(t)
|
||||
status, err := androidStubDriver.Status()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(status)
|
||||
}
|
||||
|
||||
func TestSource(t *testing.T) {
|
||||
setupStubDriver(t)
|
||||
source, err := androidStubDriver.Source()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(source)
|
||||
}
|
||||
|
||||
func TestIsLogin(t *testing.T) {
|
||||
setupStubDriver(t)
|
||||
res, err := androidStubDriver.isLogin("com.ss.android.ugc.aweme")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(res)
|
||||
}
|
||||
|
||||
func TestLogin(t *testing.T) {
|
||||
setupStubDriver(t)
|
||||
err := androidStubDriver.LoginNoneUI("com.ss.android.ugc.aweme", "12342316231", "8517")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLogout(t *testing.T) {
|
||||
setupStubDriver(t)
|
||||
err := androidStubDriver.LogoutNoneUI("com.ss.android.ugc.aweme")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user