mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-11 18:11:21 +08:00
refactor: ios perfd
This commit is contained in:
@@ -192,12 +192,21 @@ func (dev *AndroidDevice) NewHTTPDriver(capabilities Capabilities) (driver *uiaD
|
||||
return driver, nil
|
||||
}
|
||||
|
||||
func (dev *AndroidDevice) StartPerf() error {
|
||||
// TODO
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dev *AndroidDevice) StopPerf() string {
|
||||
// TODO
|
||||
return ""
|
||||
}
|
||||
|
||||
func (dev *AndroidDevice) StartPcap() error {
|
||||
// TODO
|
||||
return nil
|
||||
}
|
||||
|
||||
// StopPcap stops pcap monitor and returns the saved pcap file path
|
||||
func (dev *AndroidDevice) StopPcap() string {
|
||||
// TODO
|
||||
return ""
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/httprunner/httprunner/v4/hrp/internal/env"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
@@ -205,11 +206,9 @@ type DriverExt struct {
|
||||
frame *bytes.Buffer
|
||||
doneMjpegStream chan bool
|
||||
scale float64
|
||||
ocrService OCRService // used to get text from image
|
||||
StartTime time.Time // used to associate screenshots name
|
||||
ScreenShots []string // save screenshots path
|
||||
perfStop chan struct{} // stop performance monitor
|
||||
perfData []string // save perf data
|
||||
ocrService OCRService // used to get text from image
|
||||
StartTime time.Time // used to associate screenshots name
|
||||
ScreenShots []string // save screenshots path
|
||||
|
||||
CVArgs
|
||||
}
|
||||
@@ -238,14 +237,6 @@ func NewDriverExt(device Device, driver WebDriver) (dExt *DriverExt, err error)
|
||||
return dExt, nil
|
||||
}
|
||||
|
||||
func (dExt *DriverExt) GetPerfData() []string {
|
||||
if dExt.perfStop == nil {
|
||||
return nil
|
||||
}
|
||||
close(dExt.perfStop)
|
||||
return dExt.perfData
|
||||
}
|
||||
|
||||
func (dExt *DriverExt) takeScreenShot() (raw *bytes.Buffer, err error) {
|
||||
// wait for action done
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
@@ -300,8 +291,7 @@ func (dExt *DriverExt) ScreenShot(fileName string) (string, error) {
|
||||
return "", errors.Wrap(err, "screenshot failed")
|
||||
}
|
||||
|
||||
dir, _ := os.Getwd()
|
||||
screenshotsDir := filepath.Join(dir, "screenshots")
|
||||
screenshotsDir := env.ScreenShotsPath
|
||||
if err = os.MkdirAll(screenshotsDir, os.ModePerm); err != nil {
|
||||
return "", errors.Wrap(err, "create screenshots directory failed")
|
||||
}
|
||||
|
||||
@@ -930,6 +930,9 @@ type Device interface {
|
||||
UUID() string // ios udid or android serial
|
||||
NewDriver(capabilities Capabilities) (driverExt *DriverExt, err error)
|
||||
|
||||
StartPerf() error
|
||||
StopPerf() string
|
||||
|
||||
StartPcap() error
|
||||
StopPcap() string
|
||||
}
|
||||
|
||||
@@ -264,6 +264,10 @@ type IOSDevice struct {
|
||||
AcceptAlertButtonSelector string `json:"accept_alert_button_selector,omitempty" yaml:"accept_alert_button_selector,omitempty"`
|
||||
DismissAlertButtonSelector string `json:"dismiss_alert_button_selector,omitempty" yaml:"dismiss_alert_button_selector,omitempty"`
|
||||
|
||||
// performance monitor
|
||||
perfStop chan struct{} // stop performance monitor
|
||||
perfFile string // saved perf file path
|
||||
|
||||
// pcap monitor
|
||||
pcapStop chan struct{} // stop pcap monitor
|
||||
pcapFile string // saved pcap file path
|
||||
@@ -325,25 +329,9 @@ func (dev *IOSDevice) NewDriver(capabilities Capabilities) (driverExt *DriverExt
|
||||
}
|
||||
|
||||
if dev.PerfOptions != nil {
|
||||
data, err := dev.d.PerfStart(dev.perfOpitons()...)
|
||||
if err != nil {
|
||||
if err := dev.StartPerf(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
driverExt.perfStop = make(chan struct{})
|
||||
// start performance monitor
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-driverExt.perfStop:
|
||||
dev.d.PerfStop()
|
||||
return
|
||||
case d := <-data:
|
||||
fmt.Println(string(d))
|
||||
driverExt.perfData = append(driverExt.perfData, string(d))
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if dev.PcapOn {
|
||||
@@ -355,14 +343,59 @@ func (dev *IOSDevice) NewDriver(capabilities Capabilities) (driverExt *DriverExt
|
||||
return driverExt, nil
|
||||
}
|
||||
|
||||
func (dev *IOSDevice) StartPerf() error {
|
||||
data, err := dev.d.PerfStart(dev.perfOpitons()...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dev.perfFile = filepath.Join(env.ResultsPath,
|
||||
fmt.Sprintf("perf_%s.log", time.Now().Format("20060102150405")))
|
||||
|
||||
log.Info().Str("perfFile", dev.perfFile).Msg("create perf file")
|
||||
file, err := os.OpenFile(dev.perfFile,
|
||||
os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0o755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dev.perfStop = make(chan struct{})
|
||||
// start performance monitor
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-dev.perfStop:
|
||||
file.Close()
|
||||
dev.d.PerfStop()
|
||||
return
|
||||
case d := <-data:
|
||||
_, err = file.WriteString(string(d) + "\n")
|
||||
if err != nil {
|
||||
log.Error().Err(err).
|
||||
Str("line", string(d)).
|
||||
Msg("write perf data failed")
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dev *IOSDevice) StopPerf() string {
|
||||
if dev.perfStop == nil {
|
||||
return ""
|
||||
}
|
||||
close(dev.perfStop)
|
||||
return dev.perfFile
|
||||
}
|
||||
|
||||
func (dev *IOSDevice) StartPcap() error {
|
||||
packets, err := dev.d.PcapStart()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
rootDir, _ := os.Getwd()
|
||||
dev.pcapFile = filepath.Join(rootDir,
|
||||
dev.pcapFile = filepath.Join(env.ResultsPath,
|
||||
fmt.Sprintf("dump_%s.pcap", time.Now().Format("20060102150405")))
|
||||
|
||||
log.Info().Str("pcapFile", dev.pcapFile).Msg("create pcap file")
|
||||
|
||||
Reference in New Issue
Block a user