feat: 安卓和iOS安装加锁

This commit is contained in:
余泓铮
2025-08-12 19:03:15 +08:00
parent 3340b8dc29
commit 4c9dd3286c
2 changed files with 22 additions and 2 deletions

View File

@@ -13,6 +13,7 @@ import (
"regexp"
"strconv"
"strings"
"sync"
"time"
"github.com/httprunner/funplugin/myexec"
@@ -94,8 +95,9 @@ func NewAndroidDevice(opts ...option.AndroidDeviceOption) (device *AndroidDevice
type AndroidDevice struct {
*gadb.Device
Options *option.AndroidDeviceOptions
Logcat *AdbLogcat
Options *option.AndroidDeviceOptions
Logcat *AdbLogcat
installMutex sync.Mutex // Mutex to lock installation/uninstallation operations
}
func (dev *AndroidDevice) Setup() error {
@@ -154,6 +156,10 @@ func (dev *AndroidDevice) NewDriver() (driver IDriver, err error) {
}
func (dev *AndroidDevice) Install(apkPath string, opts ...option.InstallOption) error {
// Lock the device for installation
dev.installMutex.Lock()
defer dev.installMutex.Unlock()
installOpts := option.NewInstallOptions(opts...)
brand, err := dev.Device.Brand()
if err != nil {
@@ -261,6 +267,10 @@ func (dev *AndroidDevice) installCommon(apkPath string, args ...string) error {
}
func (dev *AndroidDevice) Uninstall(packageName string) error {
// Lock the device for uninstallation
dev.installMutex.Lock()
defer dev.installMutex.Unlock()
_, err := dev.Device.Uninstall(packageName)
return err
}

View File

@@ -7,6 +7,7 @@ import (
"fmt"
"io"
"os"
"sync"
"time"
"github.com/Masterminds/semver"
@@ -128,6 +129,7 @@ type IOSDevice struct {
listener *forward.ConnListener
localPort int
}
installMutex sync.Mutex // Mutex to lock installation/uninstallation operations
}
type DeviceDetail struct {
@@ -265,6 +267,10 @@ func (dev *IOSDevice) NewDriver() (driver IDriver, err error) {
}
func (dev *IOSDevice) Install(appPath string, opts ...option.InstallOption) (err error) {
// Lock the device for installation
dev.installMutex.Lock()
defer dev.installMutex.Unlock()
installOpts := option.NewInstallOptions(opts...)
for i := 0; i <= installOpts.RetryTimes; i++ {
var conn *zipconduit.Connection
@@ -284,6 +290,10 @@ func (dev *IOSDevice) Install(appPath string, opts ...option.InstallOption) (err
}
func (dev *IOSDevice) Uninstall(bundleId string) error {
// Lock the device for uninstallation
dev.installMutex.Lock()
defer dev.installMutex.Unlock()
svc, err := installationproxy.New(dev.DeviceEntry)
if err != nil {
return err