refactor: ios perfd

This commit is contained in:
debugtalk
2022-12-15 23:15:58 +08:00
parent f4af2d131a
commit 961cc3489c
7 changed files with 77 additions and 42 deletions

View File

@@ -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 ""

View File

@@ -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")
}

View File

@@ -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
}

View File

@@ -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")