Appium-控制多台安卓设备执行的入门级实现

环境: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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

因为我们有两台安卓设备,自然配置信息要区分一下,我们把两个任务加到线程组中,然后启动整个项目。这里代码以打开淘宝应用为例。

最终效果

最终的实现效果如下图Gif所示 
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41044523/article/details/80707945