【问题标题】:Robot Framework : Is there any way using which we can execute test cases (same test cases/test suit) on multiple andriod devices at once?机器人框架:有什么方法可以让我们一次在多个安卓设备上执行测试用例(相同的测试用例/测试套件)?
【发布时间】:2018-06-24 19:52:12
【问题描述】:

enter image description here一旦应用在多个安卓设备上启动。我们如何在多个移动设备上同时执行相同的测试用例?因为我有一堆测试用例要在多个 android 设备上执行。我正在尝试通过在测试用例中传递 udid 或 Appium 服务器名称来使用 For Loop,但它不起作用。它仅在单个设备上执行测试用例。有什么方法可以用来执行测试用例(相同的测试用例/测试西装)同时在多个 Android 设备上?

【问题讨论】:

    标签: robotframework


    【解决方案1】:

    您可以将 https://github.com/mkorpela/pabot 与 --argumentfile[NUMBER] 选项一起使用。

    【讨论】:

      【解决方案2】:

      您基本上想要做的是并行执行您的测试。有许多工具可以轻松实现这一目标,并且覆盖范围广(大量的设备和风格)​​,例如 SeeTest Cloud、Xamarin Test Cloud、AWS Device Farm、Perfecto 等

      但是,如果您想使用 Appium 和 TestNG 来实现,它仍然是可能的。以下是高级步骤:

      1. 启动多个 Appium 服务器实例,使用不同的 地址、端口、callbackPort 和 BootstrapPort 作为节点的一部分 命令。
      2. 获取设备的 UUID 并在 TestNG xml 中传递
      3. 将 xml 作为套件运行。

      以下是包含确切命令和步骤的链接: http://toolsqa.com/mobile-automation/appium/appium-parallel-execution-using-testng/

      【讨论】:

      • 谢谢.. 我不想将 Appium 与 TestNG 一起使用。我正在使用带有 Appium 的机器人框架..
      • 对于机器人框架,步骤也几乎相同。您必须创建多个 Appium 实例。只有执行部分发生了变化。以下是更多信息的链接:testnblog.com/…
      • 您的链接不起作用.. 是的,我有多个 Appium 实例已经在使用差异端口和主机运行.. 但它仍然不适合我..
      • 哦,好的。那么你已经完成了一半。但奇怪的是,同样的链接对我有用。再次发布:testnblog.com/…
      • 非常感谢。是的,我可以访问给定的链接。我已经手动启动了我的 Appium 实例,然后使用关键字在两个设备上启动了应用程序。但是当我对下面的测试用例使用 IF 语句或 For 循环时,它只能在最后访问的一个设备上工作。
      【解决方案3】:

      您可以使用以下方法来解决您的问题。正如我之前在回答中所说,您可以将驱动程序保存在字典&{drivers} 中,并在循环中使用它来在所有设备上执行重复操作。

      *** Settings ***
      Library           AppiumLibrary
      Library          Collections
      Library          Process
      
      *** Variables ***
      ${APPIUM_SERVER1}    http://127.0.0.1:4723/wd/hub
      ${APPIUM_SERVER2}    http://127.0.0.1:4750/wd/hub
      ${udid_device1}    udid of device 1
      ${udid_device2}    udid of device 2
      
      *** Keywords ***
      setup and open android phone A
          &{drivers}=    Create Dictionary
          ${androiddriver1}=    Open Application    ${APPIUM_SERVER1}    platformName=android    platformVersion=7.0    deviceName=android   udid=${udid_device1}    automationName=uiautomator2
          ...    appPackage=com.android.contacts    newCommandTimeout=2500    appActivity=com.android.contacts.activities.PeopleActivity
          Set To Dictionary    ${drivers}    ${udid_device1}=${androiddriver1}
          Set suite variable    ${drivers}
      
      
      setup and open android phone B
          ${androiddriver2}=    Open Application    ${APPIUM_SERVER2}    platformName=android    platformVersion=7.0    deviceName=android    udid=${udid_device2}    automationName=uiautomator2
          ...    appPackage=com.htc.contacts   newCommandTimeout=2500    noReset=True    appActivity=com.htc.contacts.BrowseLayerCarouselActivity
          Set To Dictionary    ${drivers}    ${udid_device2}=${androiddriver2}
          Set suite variable    ${drivers}
          Log Dictionary    ${drivers}
      
      Open URL
          :FOR    ${key}    IN    @{drivers.keys()}
          \    ${value}=    Get From Dictionary    ${drivers}    ${key}
          \    Log    ${key}, ${value}
          \    repetitive actions here
      

      【讨论】:

      • 非常感谢。我尝试了上面的代码,但它仍然没有在两个设备上执行我的测试用例。应用程序在两台设备上启动,但下一个测试用例(打开 URL)仅在最后一个设备(为打开应用程序访问的第二个设备)上执行。我也尝试使用不同的变量,但仍然给我同样的问题。
      • 那是另一个问题,您需要使用像字典这样的数据结构来存储与手机相关的值,并使用 ${${key}.variablename} 格式在进一步的操作中调用它们。跨度>
      • 谢谢..我是机器人新手,所以不太了解...需要检查一下..无论如何问题是..它只是没有切换到其他设备的连接:
      • 开始测试:TEST16thJan.StartApp.Enter 登录 URL 20180123 16:20:03.500:INFO:${value} = 1 20180123 16:20:03.502:INFO:${value} = 2 20180123 16:20:03.503:信息:[u'emulator-5554'],[u'emulator-5556']
      • @Pooja 你找到解决办法了吗?
      【解决方案4】:

      您可以将来自open application 的会话保存在字典中,并循环使用它们在每部手机上执行一些操作。 请使用代码编辑您的问题以获得进一步的帮助。

      【讨论】:

      • *******关键字***** 输入 URL : FOR ${APPIUM_SERVER1} ${deviceName} ${udid} IN localhost:4723/wd/hub adb devices ... emulator-5556 \ 等待页面包含元素 xpath=//android.widget.EditText timeout=60 \ 点击元素 xpath=//android.widget.EditText[@text='请输入 URL'] \ 输入文本 xpath=// android.widget.EditText[@text='请输入网址'] xxx.xx.xx.xx:9000 \ 点击元素 xpath=//android.widget.Button[@text = 'OK'] –
      • 上述关键字在两台设备上都没有运行。它只在最后一次访问的设备上运行。我如何使用 For Loop 以便我的“ENTER URL”测试用例一个接一个地在两个设备上执行?
      • 以正确的格式粘贴您的代码,然后只有我们可以提供帮助!
      猜你喜欢
      • 1970-01-01
      • 2021-05-19
      • 2017-04-25
      • 2016-03-01
      • 2021-04-16
      • 2017-11-14
      • 1970-01-01
      • 2017-09-06
      • 2018-06-18
      相关资源
      最近更新 更多