mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-15 12:27:59 +08:00
refactor: cache window size & scale in driver
This commit is contained in:
@@ -40,6 +40,9 @@ func NewADBDriver(device *AndroidDevice) (*ADBDriver, error) {
|
||||
type ADBDriver struct {
|
||||
Device *AndroidDevice
|
||||
Session *Session
|
||||
|
||||
// cache to avoid repeated query
|
||||
windowSize types.Size
|
||||
}
|
||||
|
||||
func (ad *ADBDriver) runShellCommand(cmd string, args ...string) (output string, err error) {
|
||||
@@ -138,9 +141,9 @@ func (ad *ADBDriver) getWindowSize() (size types.Size, err error) {
|
||||
}
|
||||
|
||||
func (ad *ADBDriver) WindowSize() (size types.Size, err error) {
|
||||
if !ad.Session.windowSize.IsNil() {
|
||||
if !ad.windowSize.IsNil() {
|
||||
// use cached window size
|
||||
return ad.Session.windowSize, nil
|
||||
return ad.windowSize, nil
|
||||
}
|
||||
|
||||
size, err = ad.getWindowSize()
|
||||
@@ -159,7 +162,7 @@ func (ad *ADBDriver) WindowSize() (size types.Size, err error) {
|
||||
size.Width, size.Height = size.Height, size.Width
|
||||
}
|
||||
|
||||
ad.Session.windowSize = size // cache window size
|
||||
ad.windowSize = size // cache window size
|
||||
return size, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,9 @@ func NewUIA2Driver(device *AndroidDevice) (*UIA2Driver, error) {
|
||||
|
||||
type UIA2Driver struct {
|
||||
*ADBDriver
|
||||
|
||||
// cache to avoid repeated query
|
||||
windowSize types.Size
|
||||
}
|
||||
|
||||
func (ud *UIA2Driver) resetDriver() error {
|
||||
@@ -171,9 +174,9 @@ func (ud *UIA2Driver) BatteryInfo() (batteryInfo types.BatteryInfo, err error) {
|
||||
|
||||
func (ud *UIA2Driver) WindowSize() (size types.Size, err error) {
|
||||
// register(getHandler, new GetDeviceSize("/wd/hub/session/:sessionId/window/:windowHandle/size"))
|
||||
if !ud.Session.windowSize.IsNil() {
|
||||
if !ud.windowSize.IsNil() {
|
||||
// use cached window size
|
||||
return ud.Session.windowSize, nil
|
||||
return ud.windowSize, nil
|
||||
}
|
||||
|
||||
var rawResp DriverRawResponse
|
||||
@@ -196,7 +199,7 @@ func (ud *UIA2Driver) WindowSize() (size types.Size, err error) {
|
||||
size.Width, size.Height = size.Height, size.Width
|
||||
}
|
||||
|
||||
ud.Session.windowSize = size // cache window size
|
||||
ud.windowSize = size // cache window size
|
||||
return size, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@ func NewShootsIOSDriver(device *uixt.IOSDevice) (driver *ShootsIOSDriver, err er
|
||||
driver = &ShootsIOSDriver{
|
||||
WDADriver: wdaDriver.(*uixt.WDADriver),
|
||||
}
|
||||
driver.device = device
|
||||
driver.bightInsightPrefix = fmt.Sprintf("http://%s:%d", host, localShootsPort)
|
||||
driver.serverPrefix = fmt.Sprintf("http://%s:%d", host, localServerPort)
|
||||
driver.timeout = timeout
|
||||
@@ -68,7 +67,6 @@ type ShootsIOSDriver struct {
|
||||
bightInsightPrefix string
|
||||
serverPrefix string
|
||||
timeout time.Duration
|
||||
device *uixt.IOSDevice
|
||||
}
|
||||
|
||||
func (s *ShootsIOSDriver) Source(srcOpt ...option.SourceOption) (string, error) {
|
||||
|
||||
@@ -20,7 +20,6 @@ import (
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"github.com/httprunner/httprunner/v5/internal/json"
|
||||
"github.com/httprunner/httprunner/v5/pkg/uixt/types"
|
||||
)
|
||||
|
||||
type Session struct {
|
||||
@@ -28,10 +27,6 @@ type Session struct {
|
||||
baseURL *url.URL
|
||||
client *http.Client
|
||||
|
||||
// cache to avoid repeated query
|
||||
scale float64
|
||||
windowSize types.Size
|
||||
|
||||
// cache uia2/wda request and response
|
||||
requests []*DriverRequests
|
||||
// cache screenshot ocr results
|
||||
@@ -151,8 +146,8 @@ func (wd *Session) Request(method string, rawURL string, rawBody []byte) (rawRes
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
var req *http.Request
|
||||
if req, err = http.NewRequestWithContext(ctx, method, rawURL, bytes.NewBuffer(rawBody)); err != nil {
|
||||
req, err := http.NewRequestWithContext(ctx, method, rawURL, bytes.NewBuffer(rawBody))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
|
||||
|
||||
@@ -524,10 +524,6 @@ func (dev *IOSDevice) NewHTTPDriver(capabilities option.Capabilities) (driver ID
|
||||
}
|
||||
wd.mjpegClient = NewHTTPClientWithConnection(wd.mjpegHTTPConn, 30*time.Second)
|
||||
wd.mjpegUrl = fmt.Sprintf("%s:%d", host, localMjpegPort)
|
||||
// init WDA scale
|
||||
if wd.Session.scale, err = wd.Scale(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return wd, nil
|
||||
}
|
||||
|
||||
@@ -36,6 +36,13 @@ func NewWDADriver(device *IOSDevice) (*WDADriver, error) {
|
||||
Session: &Session{},
|
||||
}
|
||||
driver.InitSession(nil)
|
||||
|
||||
// init WDA scale
|
||||
var err error
|
||||
if driver.scale, err = driver.Scale(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return driver, nil
|
||||
}
|
||||
|
||||
@@ -43,6 +50,10 @@ type WDADriver struct {
|
||||
Device *IOSDevice
|
||||
Session *Session
|
||||
|
||||
// cache to avoid repeated query
|
||||
windowSize types.Size
|
||||
scale float64
|
||||
|
||||
mjpegHTTPConn net.Conn // via HTTP
|
||||
mjpegClient *http.Client
|
||||
mjpegUrl string
|
||||
@@ -229,9 +240,9 @@ func (wd *WDADriver) BatteryInfo() (batteryInfo types.BatteryInfo, err error) {
|
||||
|
||||
func (wd *WDADriver) WindowSize() (size types.Size, err error) {
|
||||
// [[FBRoute GET:@"/window/size"] respondWithTarget:self action:@selector(handleGetWindowSize:)]
|
||||
if !wd.Session.windowSize.IsNil() {
|
||||
if !wd.windowSize.IsNil() {
|
||||
// use cached window size
|
||||
return wd.Session.windowSize, nil
|
||||
return wd.windowSize, nil
|
||||
}
|
||||
|
||||
var rawResp DriverRawResponse
|
||||
@@ -250,13 +261,13 @@ func (wd *WDADriver) WindowSize() (size types.Size, err error) {
|
||||
size.Height = size.Height * int(scale)
|
||||
size.Width = size.Width * int(scale)
|
||||
|
||||
wd.Session.windowSize = size // cache window size
|
||||
return wd.Session.windowSize, nil
|
||||
wd.windowSize = size // cache window size
|
||||
return wd.windowSize, nil
|
||||
}
|
||||
|
||||
func (wd *WDADriver) Scale() (float64, error) {
|
||||
if !builtin.IsZeroFloat64(wd.Session.scale) {
|
||||
return wd.Session.scale, nil
|
||||
if !builtin.IsZeroFloat64(wd.scale) {
|
||||
return wd.scale, nil
|
||||
}
|
||||
screen, err := wd.Screen()
|
||||
if err != nil {
|
||||
@@ -309,7 +320,7 @@ func (wd *WDADriver) ScreenShot(opts ...option.ActionOption) (raw *bytes.Buffer,
|
||||
}
|
||||
|
||||
func (wd *WDADriver) toScale(x float64) float64 {
|
||||
return x / wd.Session.scale
|
||||
return x / wd.scale
|
||||
}
|
||||
|
||||
func (wd *WDADriver) ActiveAppInfo() (info types.AppInfo, err error) {
|
||||
|
||||
Reference in New Issue
Block a user