环境: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所示
这里写图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐