Appium v2单设备串行执行多测试类问题求助
解决方案
1. 修改TestNG配置文件,强制串行执行
在TestNG的<suite>标签中添加parallel="none"属性,明确指定测试串行执行,避免TestNG默认并行逻辑触发多设备调度:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Test Suite Name" parallel="none"> <listeners> <listener class-name="Helpers.AnnotationTransformer"/> <listener class-name="Helpers.Listener"/> </listeners> <test name="some name"> <classes> <class name="testClass1"/> <class name="testClass2"/> </classes> </test> </suite>
2. 调整Appium Device Farm插件并行配置
Device Farm插件默认可能启用多会话并行,需确保插件限制单设备会话:
- 启动Appium服务时,移除
--plugin-device-farm-parallel类的并行参数,或设置为--plugin-device-farm-max-parallel-sessions=1 - 若使用插件配置文件(如
device-farm.yml),将maxParallelSessions值设为1
3. 优化Base类的驱动实例管理
当前Base类构造函数会在每个测试类实例化时创建新驱动会话,导致多会话触发设备寻找。将驱动初始化移至@BeforeSuite注解方法,确保整个测试套件仅创建一次驱动:
public class Base { protected AndroidDriver driver; private static boolean driverInitialized = false; @BeforeSuite public void setupDriver() throws MalformedURLException { if (!driverInitialized) { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("appium:automationName", "UiAutomator2"); capabilities.setCapability("appium:deviceName", conf.read("deviceName")); capabilities.setCapability("appium:udid", conf.read("udid")); capabilities.setCapability("appium:appPackage", conf.read("appPackage")); capabilities.setCapability("appium:appActivity", conf.read("appActivity")); capabilities.setCapability("appium:autoGrantPermissions", true); driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), capabilities); driverInitialized = true; } } @AfterSuite public void teardownDriver() { if (driver != null) { driver.quit(); driverInitialized = false; } } }
内容的提问来源于stack exchange,提问作者Left Handed
相关产品推荐
相关产品推荐

