Appium - 在两个物理设备上运行测试

时间:2015-11-11 16:21:35

标签: java node.js selenium appium

我已经看到很多线索有这个问题,但我似乎找不到一个好的答案。他们都说启动两台appium服务器,将设备同步到两个不同的端口然后运行它。然而,这似乎对我没有用。继承人我做的事情..

  1. 打开两个node.js终端
  2. 使用以下命令启动两个appium服务器:node appium.js -p 4476 -U&节点appium.js -p 4475 -U每个appium服务器一个
  3. 我看到Appium已经开始使用服务器的0.0.0.0:(port#)的REST http接口。
  4. 从我的testng文件运行我的测试。

    <test name="Test 1">
        <parameter name="deviceName" value=""/>
        <parameter name="platformName" value="Android"/>
        <parameter name="browserName" value="Chrome"/>
        <parameter name="local" value="appium"/>
        <parameter name="baseUrl" value="https://mtest.com/"/>
        <parameter name="bsAccount" value="http://0.0.0.0:4476/wd/hub"/>
        <classes>
            <class name="com.testsuites.regression.Smoke"/>
        </classes>
    </test>
    
    <test name="Regression">
        <parameter name="deviceName" value=""/>
        <parameter name="platformName" value="Android"/>
        <parameter name="browserName" value="Chrome"/>
        <parameter name="local" value="appium"/>
        <parameter name="baseUrl" value="https://mtest.com/"/>
        <parameter name="bsAccount" value="http://0.0.0.0:4475/wd/hub"/>
        <classes>
            <class name="com.testsuites.regression.Regression"/>
        </classes>
    </test>
    

  5. 是的我已将相应的UDID放入deviceName参数中。我通过intellij这样做,运行Windows 7.感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

Selenium Grid

构建Selenium Grid以允许自动运行和处理多个selenium会话。它可以配置为多个设备(与appium结合使用时),允许并行或标准测试,并允许您基于功能系统为每个设备创建节点。

<强>集线器

Selenium Grid hub是一个中央服务器,可管理运行多个测试的能力。

  1. Download the Selenium Standalone Server
  2. 运行以下命令以启动集线器:

    $java -jar path/to/selenium-server-standalone-X.X.X.jar -role hub -port 4444 
    
  3. <强>节点

    1. Install node.js
    2. 安装appium(除非你已经有)

      $npm install –g appium
      
    3. 您需要为每个节点提供一个JSON文件,该文件概述了此节点用于的设备(或多个设备)的功能:

    4. {
      "capabilities":
      [
      {
      "browserName": "Chrome",
      "deviceName": "deviceName",
      "device": "device",
      "udid":"XXXXXXXX",
      "version":"X.X.X",
      "maxInstances": 5,
      "platform":"ANDROID",
      "platformName": "Android"
      }
      ],
      "configuration":
      {
      "cleanUpCycle":2000,
      "timeout":10000,
      "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 
      "url":"http://0.0.0.0:4723/wd/hub",
      "maxSession": 5,
      "port": 4723,
      "host": "0.0.0.0",
      "register": true,
      "registerCycle": 5000,
      "hubPort": 4444,
      "hubHost": "localhost"
      }
      }
      

      请记住,每个节点都需要为urlport配置使用不同的端口。例如,4723。

      1. 创建节点

        $appium --nodeconfig /Path/To/Config.json -p 4723 -bp 5723 --chromedriver-port 6723
        
      2. 每个节点需要三个唯一的端口(端口,Bootstrap端口,ChromeDriver端口)和-p指定的端口,我发现需要与配置中给出的端口相同。

        <强>测试

        我建议使用测试框架,例如TestNG或JUnit,它允许您运行测试套件并在@BeforeClass方法等中传递功能。

        但基本上你需要做的就是使用与JSON配置文件中为某个节点指定的功能相同的功能创建一个AndroidDriver,然后AndroidDriver的该实例将与该特定节点相关联(Selenium Grid处理此问题)与节点关联的设备。一旦你知道你在做什么,这真的很简单!

        像这样初始化AndroidDriver:

        driver.set(new AndroidDriver(new URL(SELENIUM_HUB_URL),
                        capabilities)); 
        

        人们常犯的错误是将AndroidDriver传递给节点URL而不是Hub URL(http://0.0.0.0:4723/wd/hub而不是http://0.0.0.0:4444/wd/hub)这是非常常见的,因为它至少会在最初工作,但是尝试使用任何Selenium Grid特定功能(例如多个设备)一切都会破坏。

        祝你好运,我希望这会有所帮助,

        利安

答案 1 :(得分:1)

我正在使用Selenium Grid在多个设备上执行此操作。但你也应该能够在没有SG的情况下做到这一点。也许你在启动Appium节点时错过了一些参数。我使用以下内容:

node appium -p <port> --udid <UDID> -bp <bootstrap_port>