Appium-控制多台安卓设备执行的入门级实现
环境:win7 appium-desktop 夜神模拟器(多开器)前言:在浏览了testerhome社区大量的关于Appium-grid的实现方式,鉴于博主刚刚入门appium,水平有限,还没有到去修改appium源码的能力,另外理想的情况实现应该是全命令行实现驱动appium server,然后模拟器执行测试,后面会继续研究更理想的情况夜神配置多安卓模拟器安装新版的夜神模拟器之后,桌面上会有一
环境:win7 appium-desktop 夜神模拟器(多开器)
前言:在浏览了testerhome社区大量的关于Appium-grid的实现方式,鉴于博主刚刚入门appium,水平有限,还没有到去修改appium源码的能力,另外理想的情况实现应该是全命令行实现驱动appium server,然后模拟器执行测试,后面会继续研究更理想的情况
夜神配置多安卓模拟器
安装新版的夜神模拟器之后,桌面上会有一个多开器的工具,添加一个新的安卓设备,可以直接复制之前已经安装的模拟器,这里博主已经启动了两个模拟器。如下图所示
查看设备信息
使用adb devices查看设备信息如下
这里端口号62001的对应安卓版本4.4.2的设备,端口号62025的对应安卓5.1.1的设备
定向安装apk
因为此时我们连接了两台设备,那么我们就不能直接使用adb install path.apk的命令安装apk了,会报错如下
我们需要指定设备信息进行安装apk,指令如下
adb -s deviceName install path.apk
这里博主以在安卓5.1设备安装chrome浏览器为例,安装过程及成果结果展示:
Appium server配置
这里博主是使用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 Server
如果已经把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所示
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)