monkeyrunner进行多设备UI测试  
首先你要连接好多个手机
设置好已经连接好的手机的ip列表ipp = ['192xxx','192xxx']
杀掉之前所有appium进程subprocess.Popen('killall node',shell = True)
声明一个方法def start(ip):调用时需要把ipp传入
在方法中写for循环,循环内循环内用传入的ip来启动appium服务,注意要用不同的端口号启动,相差2以上
在循环中调用webdriver.Remote方法创建driver对象
在循环中创建脚本类的实例时,请在循环中创建,并且传入driver
8.声明多线程列表
在循环中用多线程创建该实例的方法的对象,并加入多线程列表
在main函数中,先调用start方法,填充好多线程的列表。然后再用for循环启动多线程列表。

下面上start方法代码:

def start(ip):
    for i in range(len(ip)):
    subprocess.Popen(‘/Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/build/lib/main.js –address “127.0.0.1” -p “’+str(4723+2*i)+’” –command-timeout “100” –automation-name “Appium” -U “’+ip[i]+’:’+str(5555+i)+’” >/tmp/1.txt’,shell=True)
    time.sleep(3.5)
    wzj = webdriver.Remote(‘http://localhost:’+str(4723+2*i)+’/wd/hub’, desired_caps)
    dingwei = DingWei(wzj, name)
    t = threading.Thread(target=dingwei.begin)
    tt.append(t)

上面的DingWei 是我的脚本类,其中的begin是类中的启动脚本的方法。下面上主函数的代码

if name == “main“:
    start(ipp)
    time.sleep(2)
    for i in tt:
    i.start()

下面是全套脚本:拿去用吧,自己改改。

# -*- coding:utf-8 -*-
from __future__ import division
import time
import datetime,subprocess
import unittest
import threading
from appium import webdriver
import os
import xlrd,xlwt,xlutils
from xlutils.copy import copy
import wx
from HTMLTestRunner import HTMLTestRunner
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.touch_action import TouchAction

desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = 'hahaha'
desired_caps['appPackage'] = 'com.........blehunter.debug'
desired_caps['appActivity'] = 'com.........blehunter.ui.WelcomeActivity'
# desired_caps["unicodeKeyboard"] = "True"
# desired_caps["resetKeyboard"] = "True"
subprocess.Popen('killall node',shell=True)
ipp = ['192.168.0.171','192.168.0.175']
tt = []   #多线程对象
def server(ip):
    for i in range(len(ip)):
        name = "./new/"+str(ipp[i])+"*****"+time.ctime()+".xls"
        SZ = xlrd.open_workbook('./new/0.xls')
        ww = copy(SZ)
        ww.save(name)
        subprocess.Popen('/Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/build/lib/main.js --address "127.0.0.1" -p "'+str(4723+2*i)+'" --command-timeout "100"  --automation-name "Appium" -U "'+ip[i]+':'+str(5555+i)+'" >/tmp/1.txt',shell=True)
        time.sleep(3.5)
        wzj = webdriver.Remote('http://localhost:'+str(4723+2*i)+'/wd/hub', desired_caps)
        dingwei = DingWei(wzj, name)
        t = threading.Thread(target=dingwei.begin)
        tt.append(t)

class DingWei():
    def __init__(self,www,fname):
        self.wzj = www
        self.num = 0
        self.fname = fname
        self.SZ = xlrd.open_workbook(self.fname)
        self.sz = self.SZ.sheet_by_name("sheet1")
        self.ww = copy(self.SZ)
        self.nrows = self.sz.nrows
    def id(self,s):
        return self.wzj.find_element_by_id(s)
    ################
    def first_start(self):
        time.sleep(4)
        for i in range(7):
            try:
                self.wzj.swipe(1000, 1500, 180, 1500)
            except:
                self.wzj.swipe(400,706,90,706)
            time.sleep(0.2)
        time.sleep(3)
        try:
            self.wzj.find_element_by_id("com.........blehunter.debug:id/bt_guide_login").click()
        except:
            pass
        time.sleep(4)
        self.id('com.........blehunter.debug:id/et_phone').send_keys('18810437161')
        self.id('com.........blehunter.debug:id/et_phone_password').send_keys('qwerty')
        self.id('com.........blehunter.debug:id/btn_login').click()
        time.sleep(5)
    def chushihua(self):
        while 1:
            if self.m.is_enabled():
                try:
                    self.id('com.........blehunter.debug:id/tv_location_failed')
                except:
                    pass
                break
            else:
                pass
    def panduan(self,no):
        while 1:
            if self.m.is_enabled():
                try :
                    self.id('com.........blehunter.debug:id/tv_location_failed')
                    self.ww.get_sheet(0).write(no+1, 1, "failed")
                    os.remove(self.fname)
                    self.ww.save(self.fname)
                except :
                    self.ww.get_sheet(0).write(no+1, 1, "success")
                    os.remove(self.fname)
                    self.ww.save(self.fname)
                    self.num += 1
                break
            else:
                pass
    def begin(self):
        #self.first_start()
        self.wzj.implicitly_wait(10)
        b = self.wzj.find_element_by_xpath('//android.support.v7.widget.RecyclerView/android.widget.FrameLayout[2]/android.widget.ImageView')
        b.click()
        print self.wzj,u"初始次... "
        self.m = self.id('com.........blehunter.debug:id/iv_refresh_friend_location')
        self.chushihua()
        j = 0
        time0 = datetime.datetime.now()
        #总次数
        n = input(u'请输入测试次数,必须为整数!')
        for i in range(n):
            j += 1
            time.sleep(1)
            time1 = datetime.datetime.now()
            self.id('com.........blehunter.debug:id/iv_refresh_friend_location').click()
            self.panduan(i)
            time2 = datetime.datetime.now()
            self.ww.get_sheet(0).write(i+1, 2, "j")
            self.ww.get_sheet(0).write(i+1, 3, str(self.num))
            self.ww.get_sheet(0).write(i+1, 4, str(j-self.num))
            self.ww.get_sheet(0).write(i+1, 5, str((time2-time1).seconds))
            self.ww.get_sheet(0).write(i+1, 6, str(int((time2-time0).seconds)-j))
            os.remove(self.fname)
            self.ww.save(self.fname)
        self.ww.get_sheet(0).write(n+2, 0,str(((self.num)/n)*100)[:6]+'%' )
        os.remove(self.fname)
        self.ww.save(self.fname)

if __name__ == "__main__":
    server(ipp)
    time.sleep(2)
    for i in tt:
        i.start()

原文:https://blog.csdn.net/qq_22795513/article/details/53169416

monkeyrunner 进行多设备UI测试的更多相关文章

  1. WWDC15 Session笔记 - Xcode 7 UI 测试初窥

    https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...

  2. 使用uiautomator做UI测试

    转载~~~~~~~~~~~~~~~~~~~~~~~~ 若有侵权,请及时联系本博主,博主将第一时间撤销 在Android 4.1发布的时候包含了一种新的测试工具–uiautomator,uiautoma ...

  3. 使用uiautomatorviewer和uiautomator来做android的UI测试

    来自:http://university.utest.com    作者:Angelos Nakulas (All Authored Courses)      译者:Elaine00 目录 简介 什 ...

  4. [转载]使用uiautomator做UI测试

    这个只是单纯的mark一下.还没有认真去研究.鉴于最近也不会做手机的自动化测试,所以留作以后参考吧. 转自: http://blog.chengyunfeng.com/?p=504 在Android ...

  5. Google推出iOS功能性UI测试框架EarlGrey

    经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架.诸如YouTube.Google Calendar.Google Photos.Google ...

  6. 在Android Studio中进行单元测试和UI测试

    本篇教程翻译自Google I/O 2015中关于测试的codelab,掌握科学上网的同学请点击这里阅读:Unit and UI Testing in Android Studio.能力有限,如有翻译 ...

  7. 4、Android UI测试

    为你的APP进行UI测试是为了确保不出现意料之外的结果,提升用户的体验.如果你需要验证你的APP UI的正确性,你需要养成创建UI测试的习惯. Espresso测试框架是由Android Testin ...

  8. H5测试点总结-UI测试、功能测试、兼容性测试、体验相关(弱网、资源、手机操作等)、安全性测试、性能测试

    一.概述 1.1 什么是H5 H5 即 HTML5,是最新的 Web 端开发语言版本,现如今,大多数手机 APP 页面会用 H5 实现,包括 PC Web 站点也会用它开发实现.所以 Web 的通用测 ...

  9. 一种新的自动化 UI 测试解决方案 Airtest Project

    今天分享一个自动化UI测试工具airtest——一款网易出品的基于图像识别面向游UI测试的工具,也支持原生Android App基于元素识别的UI自动化测试.主要包含了三部分:Airtest IDE. ...

随机推荐

  1. (转)Maven创建webapp项目无法修改web版本的问题

    maven创建的web app,默认使用的servlet版本是2.3,默认不支持JSTL,为了默认支持JSTL表达式,需要升级servlet到3.0 转:http://blog.sina.com.cn ...

  2. EFK搜集MySQL慢日志

    前提已经安装好EFK 1.在MySQL节点安装td-agent http://packages.treasuredata.com.s3.amazonaws.com/3/redhat/7/x86_64/ ...

  3. php下载

    生成迅雷下载链接 $url = "http://www.xxx.com/xxx/test.jpg"; echo "thunder://".base64_enco ...

  4. 原生Android项目里嵌入Cordova

    Android H5混合开发():原生Android项目里嵌入Cordova 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cord ...

  5. js的内部特性--属性

    使用方法:通过调用Object.defineProperty(对象,"对象属性",{}进行的操作}) 当对一个对象的属性的属性类型中vlue设置为一个值时,则这个对象的这个属性的值 ...

  6. UVA1595_Symmetry

    给出平面上n个点,问你能不能找到一个竖线让他们对称 这道题后面发现真的不难,又不止一种方法 我当时写的很挫,死脑筋的就找一个点的对称点存不存在,用结构体存点信息,在排序用find找,,然后不知道一堆w ...

  7. python 自带http服务

    python2: python -m SimpleHTTPServer python3: python3 -m http.server

  8. 微信小程序 使用wxParse解析html

    微信小程序 加载 HTML 标签:https://blog.csdn.net/zclengendary/article/details/54312030 微信小程序 使用wxParse解析html:h ...

  9. python while循坏和for循坏

    while循坏 while 条件: 条件成立,执行循坏体(注意,while循坏必须有结束条件,不然会进入死循坏) 简单做个演示: # -*- coding:utf-8 -*- # Author:覃振鸿 ...

  10. python获取Linux发行版名称

    我必须从Python脚本中获取Linux发行版名称.dist平台模块中有一个方法: import platform platform.dist() 但在我的Arch Linux下它返回: >&g ...