Appium多线程问题探讨

    前一段时间一直在学习appium android手机自动化测试,利用pythonunnitest或是javatestng来编写和管理我们的自动化测试用例。不过一直有一个问题,我没有涉及:多线程问题。这是有原因的,手机App的功能一般都不太复杂,操作也比较简单,所以相应的自动化测试用例也不多,单线程运行起来也非常快。二是appiumCS模式的,一个服务器端不支持多个客户端,没有办法简单地进行多线程。

    不过最近有不少同学挺关心多线程的问题的,我也就在网上搜索了一下,确实还是能多线程的。不管是用python还是用java吧,思路几乎是一样的:

(1)先将多台设备连接到服务器。

(2)利用不同的端口来启动不同的Appium服务端。

(3)对测试用例设置指向不同服务端的设置。

(4)利用线程调度机制去执行测试用例。

一,  Appium+java多线程的实现

   由于TestNG可以简单地通过设置一下testng.xml文件就能实现多线程问题,这样就可以根据需要在每个测试用例中先指定要连接的设备,然后再去做具体的测试操作。

指定设备的代码如下:

public void setUp(String port,String udid) throws Exception {

        File app = new File(res, "com.xiaomi.market_R.1.4.5.apk");

        System.out.println(app.getAbsolutePath());

        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability("deviceName", udid);

        capabilities.setCapability("udid", udid);

        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

        capabilities.setCapability("platformVersion", "4.4.4");

        capabilities.setCapability("platformName", "Android");

        capabilities.setCapability("app", app.getAbsolutePath());

        capabilities.setCapability("app-package", "com.xiaomi.market");

        capabilities.setCapability("app-activity", ".ui.MainTabActivity");

        driver = new AndroidDriver(new URL("http://127.0.0.1:"+port+"/wd/hub"),

                capabilities);

    }

其中的udidandorid设备的deviceNameport为服务器启动的端口号,不同的服务端不能使用相同的端口号。将这个设置写到每个测试用例中,执行的时候就会向不同的服务端来发送命令了。
windows下我们需要手动启动相应的服务端,然后把端口设置正确。同时在TestNG中配置多线程和用例管理,如下所示:


Appium多线程问题探讨

   然后运行测试工程即可,详情可以参考:https://testerhome.com/topics/3582,当然我们可以把代码提取一下,编写不同的Setup()函数,在测试用例中进行不同的调用。
   当然还可以有其他更好的方法来实现,就是一个测试用例执行的时候启动一个服务端,执行结束后就将服务端关闭。
Appium多线程问题探讨

 这方面的实现,请大家参考文档:http://blog.csdn.net/wanglha/article/details/46876723,由于在这篇文档中讲的比较详细,在此就不累述了。
二,  Appium+Python的多线程
Appium+python做移动自动化测试的时候,使用的是unnittest测试框架,但是这个框架是没有办法直接使用多线程的,而python的多线程也不是那么好用。
方法还是和java一样的:
(1)   将对服务端的设置写到每个测试用例中,然后手工启动多个服务端,在unnittest中启动多线程。
(2)   一个测试用例启动一个服务端,执行完成后关闭。启动服务端的代码请参考:https://testerhome.com/topics/3526,同样在unnittest中启动多线程。
(3)   Python多线程的使用参考:http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html,当然我们的方法是:在Testsuite文件中,我们创建多个suite,每个suite中针对一个服务端, 然后将每一个suite启动一个线程去执行。
三,  总结
我们在本篇文档中只是指出了appium移动自动化多线程问题的一个方向,没有给出具体的代码及实现。其实很多时候我们需求的也只是一个方向 ,代码具体的实现细节相对来说也不那么难,而且不同的应用场景也可能不一样。很难把代码拿来就用,所以大家还是根据具体的使用来去研究,有什么好的思路或是实现方法,我们再一起讨论。
原文地址:https://www.cnblogs.com/eagleking0318/p/6520741.html