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