环境:win7 appium-desktop 夜神模拟器(多开器)
前言:在浏览了testerhome社区大量的关于Appium-grid的实现方式,鉴于博主刚刚入门appium,水平有限,还没有到去修改appium源码的能力,另外理想的情况实现应该是全命令行实现驱动appium server,然后模拟器执行测试,后面会继续研究更理想的情况
安装新版的夜神模拟器之后,桌面上会有一个多开器的工具,添加一个新的安卓设备,可以直接复制之前已经安装的模拟器,这里博主已经启动了两个模拟器。如下图所示
使用adb devices查看设备信息如下
这里端口号62001的对应安卓版本4.4.2的设备,端口号62025的对应安卓5.1.1的设备
因为此时我们连接了两台设备,那么我们就不能直接使用adb install path.apk的命令安装apk了,会报错如下
我们需要指定设备信息进行安装apk,指令如下
adb -s deviceName install path.apk
这里博主以在安卓5.1设备安装chrome浏览器为例,安装过程及成果结果展示:
这里博主是使用appium-desktop,然后提前配置两个appium server的设备信息,启动appium客户端后,我们点击Advanced进行配置,这里有三个大模块包括General ios 和Android,请大家自行选择,这里博主使用安卓设备。
设备1:
General Server Port 4723
Android Bootstrap Port 4724
设备2:
General Server Port 4725
Android Bootstrap Port 4726
每一次配置之后都要点击页面上的“Save as preset..”按钮
点击Presets查看配置信息如下图所示:
可以看到我们的配置信息以及修改点。
如果已经把Appium的启动目录添加到环境变量中,可以直接输入appium启动,或者直接桌面上启动两个appium,或许是博主设备比较差,启动appium-desktop的时间比较久,启动两个appium-desktop之后,分别进入Presets,选中服务器然后启动服务,如下图箭头所示:
启动成功后,会看到如下的信息:
博主的实现思路是使用python多线程的方式,多线程的介绍可以去看虫师写的博客:python 多线程就这么简单我认为还是写的非常通俗易懂的。客户端代码如下
#coding=utf-8 ''' Created on 2017/12/24 0024 @author:Changge ''' from appium import webdriver import time import threading desired_caps = { 'platformName':'Android', 'deviceName':'127.0.0.1:62025', 'platformVersion':'5.1.1', 'appPackage':'com.taobao.taobao', 'appActivity':'com.taobao.tao.welcome.Welcome', } desired_caps2 = { 'platformName':'Android', 'deviceName':'127.0.0.1:62001', 'platformVersion':'4.4.2', 'appPackage':'com.taobao.taobao', 'appActivity':'com.taobao.tao.welcome.Welcome', } def task1(): driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) ##休眠20s等待页面加载完成 time.sleep(20) print(driver.contexts) driver.quit() def task2(): driver = webdriver.Remote('http://127.0.0.1:4725/wd/hub', desired_caps2) ##休眠20s等待页面加载完成 time.sleep(20) print(driver.contexts) driver.quit() threads = [] t1 = threading.Thread(target=task1) threads.append(t1) t2 = threading.Thread(target=task2) threads.append(t2) if __name__ == '__main__': for t in threads: t.start()
因为我们有两台安卓设备,自然配置信息要区分一下,我们把两个任务加到线程组中,然后启动整个项目。这里代码以打开淘宝应用为例。
最终的实现效果如下图Gif所示