当前位置: 首页 > 知识库问答 >
问题:

如何使用appium网格在不同设备上并行执行appium测试

陶智
2023-03-14

目标:因为我是新来Appium的。我正在尝试在Ubuntu上使用Appium网格在多个android设备上并行自动化Appium测试
我成功启动了一个网格中心服务器和两个具有不同端口的节点
问题:无法同时在两台设备上运行测试用例(我确信问题出在我如何设计框架上)。我不知道如何传递两个设备的能力,同时启动设备(主要问题)。我必须为此使用多线程吗?如果是,那么如何使用
实际:当我在同一个设备上运行多个测试类时,它可以工作,但由于我的BaseTest类中只有一个Android驱动程序实例,我无法并行运行
我尝试了什么:我在谷歌上浏览了这么多线程,但无法找到确切的解决方案
这是我的测试。XML代码

<suite name="Functional" parallel="tests" thread-count="2">
<test verbose="2" name="Pixel 4a">
    <classes>
        <class name="tests.PersonalRegistrationTests" />
        <class name="tests.LoginTests"></class>
    </classes>
</test> <!-- Test -->
<test verbose="2" name="Galaxy A20s">
    <classes>
        <class name="tests.PersonalRegistrationTests" />
        <class name="tests.LoginTests"></class>
    </classes>
</test> <!-- Test -->

这是我的TestBase。java代码

public class TestBase {

static AppiumDriver androidDriver;

@BeforeSuite
public void setup() {
    try {
        androidDriver = DeviceUtility.getAndroidDriver();
    } catch (Exception exp) {
        System.out.println("Message is : " + exp.getMessage());
        androidDriver.quit();
    }
}

这是我的设备实用程序.java代码

public static AppiumDriver getAndroidDriver() throws Exception {
    
    DesiredCapabilities capability = new DesiredCapabilities();
    AppiumDriver androidDriver;
    
    try {
        capability.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        capability.setCapability(MobileCapabilityType.PLATFORM_VERSION, "11.0");
        capability.setCapability(MobileCapabilityType.DEVICE_NAME, "Pixel 4a");
        capability.setCapability(MobileCapabilityType.UDID, "09091JEC214196");
        capability.setCapability(MobileCapabilityType.APP, System.getProperty("user.dir") + getApkRelativePATH());
        
        androidDriver = new AndroidDriver<MobileElement>(new URL("http://192.168.88.60:4444/wd/hub"), capability);
        androidDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        return androidDriver;
    
    } catch (Exception ex) {
        throw new Exception("Error : " + ex.getMessage());
    }
}

这是一个测试样品。

public class PersonalRegistrationTests extends TestBase{

@Test(priority = 1)
public void verifyRegistrationWithSupportedCountry() throws Exception { 
    
    RegistrationScreens registrationScreens = new RegistrationScreens(androidDriver);
    
    try {
        registrationScreens.allowLocationPermission();
        registrationScreens.allowContactsPermission();
        registrationScreens.visitOnboardingScreens();
        registrationScreens.selectCountry("United States");
        registrationScreens.enterPhoneNumber("5678911111");
        registrationScreens.sendCode();
        
        Assert.assertTrue(registrationScreens.checkOTPScreenVisibility());
        
    }catch(Exception ex){
        throw new SkipException(ex.getMessage());
    }
    
}

我在我的框架中哪里做错了?提前感谢:)

共有1个答案

贺栋
2023-03-14

>

  • 对于设置函数而不是@BeforeSuite使用@BeforeTest,这将确保在每次测试之前执行该函数

    在“getAndroidDriver”功能中,您只能设置一个移动设备的功能。相反,以下是如何构建解决方案

    形容词(adjective的缩写)在testng xml文件b的测试标签下使用“parameters”标签。在参数中设置功能值,例如设置设备名称c。在Galaxy A20s的其他测试标签下也这样做

    使用设置函数的@Parameters注释来接收传递的值,例如@Parameter({“udid”,“deviceName”})

    更改设置函数定义以接受参数值,例如 setUp(字符串 udid,字符串设备名称)

    将setup函数中收到的参数值发送给getAndroidDriver函数。

    完成以上操作后,您的设置和getAndroidDriver函数将与两组不同的参数值并行执行

    确保还通过参数标记传递 appium 端口号。

  •  类似资料:
    • 我想使用Appium在多个iOS设备上并行运行我的自动化脚本。我可以在Android系统上执行这个并行测试,但不能在iOS上。 我们有没有办法在iOS上执行此操作。 我使用的工具有:SeleniumGrid、Appium和TestNG框架。

    • 我想使用appium在特定的xpath上执行向左滑动。不管怎样,我能做到吗?

    • 嗨,我想在appium上使用ios模拟器并行运行ios测试用例。我知道MAC会有限制,因为只有一个模拟器会启动,但有没有后门入口可以让它们并行运行,我不想使用网格,因为有一些原因,所以有没有办法在ios模拟器上并行运行ios测试用例。 如果我一次运行两个不同端口和地址的appium服务器,只有一个ios模拟器会启动,因为它会关闭另一个。 我使用的是1.6.4 appium服务器和Xcode 8。

    • 使用Browserstack教程(https://www.browserstack.com/app-automate/appium-junit)和样本项目(https://github.com/browserstack/junit-appium-app-browserstack)我正在努力设置并行测试。 具体来说,我需要运行suirte与Cucumber.class()我的测试从场景中读取,而Br

    • 我试图在多个android设备的chrome浏览器上运行我的测试。我使用的量角器与鸦片。我启动2 appium服务器具有不同的端口,即。,和,并指定具有2个设备信息的多功能。我尝试了两个,模拟器和真实的设备。当我运行配置文件时,两个Appium服务器都试图访问一个设备,即使我指定了设备的UDID。我对量角器非常陌生。有人能帮我吗?下面是我的配置文件 config.js

    • 我知道为了使用Appium控制多个设备,我需要启动多个具有不同端口的Appium服务器。但是,当多个设备连接到主机时,我无法获得如何将部分测试目标指向特定设备的信息。 我知道,下面是我需要做的两种配置,以便处理连接到计算机的多个设备。 > 端口设置:如以下webdriver初始化中的4723 desired_caps不同的设备。 所需的_caps_first_设备={'platformName':