monkeyrunner 进行多设备UI测试
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测试的更多相关文章
- WWDC15 Session笔记 - Xcode 7 UI 测试初窥
https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...
- 使用uiautomator做UI测试
转载~~~~~~~~~~~~~~~~~~~~~~~~ 若有侵权,请及时联系本博主,博主将第一时间撤销 在Android 4.1发布的时候包含了一种新的测试工具–uiautomator,uiautoma ...
- 使用uiautomatorviewer和uiautomator来做android的UI测试
来自:http://university.utest.com 作者:Angelos Nakulas (All Authored Courses) 译者:Elaine00 目录 简介 什 ...
- [转载]使用uiautomator做UI测试
这个只是单纯的mark一下.还没有认真去研究.鉴于最近也不会做手机的自动化测试,所以留作以后参考吧. 转自: http://blog.chengyunfeng.com/?p=504 在Android ...
- Google推出iOS功能性UI测试框架EarlGrey
经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架.诸如YouTube.Google Calendar.Google Photos.Google ...
- 在Android Studio中进行单元测试和UI测试
本篇教程翻译自Google I/O 2015中关于测试的codelab,掌握科学上网的同学请点击这里阅读:Unit and UI Testing in Android Studio.能力有限,如有翻译 ...
- 4、Android UI测试
为你的APP进行UI测试是为了确保不出现意料之外的结果,提升用户的体验.如果你需要验证你的APP UI的正确性,你需要养成创建UI测试的习惯. Espresso测试框架是由Android Testin ...
- H5测试点总结-UI测试、功能测试、兼容性测试、体验相关(弱网、资源、手机操作等)、安全性测试、性能测试
一.概述 1.1 什么是H5 H5 即 HTML5,是最新的 Web 端开发语言版本,现如今,大多数手机 APP 页面会用 H5 实现,包括 PC Web 站点也会用它开发实现.所以 Web 的通用测 ...
- 一种新的自动化 UI 测试解决方案 Airtest Project
今天分享一个自动化UI测试工具airtest——一款网易出品的基于图像识别面向游UI测试的工具,也支持原生Android App基于元素识别的UI自动化测试.主要包含了三部分:Airtest IDE. ...
随机推荐
- 【进阶技术】一篇文章搞掂:Docker
注意!!注意系统内存,一开始我使用阿里云1核1G系统,各种问题,搞了几天,原来是内存不足 一.使用VM虚拟机,安装CentOS7.X系统,并安装和使用Docker 1.1.虚拟机安装CentOS7.X ...
- JavaWeb解决中文乱码
1.Get请求,方案有两种 A:修改Tomcat配置文件 server.xml URIEncoding="UTF-8" 如:<Connector port="8 ...
- linux安装相关软件
XShell上传jdk文件到Linux并安装配置1.yum -y install lrzsz2.sudo rz选文件3.sudo tar -zxvf jdk-8u131-linux-x64.tar.g ...
- Mamen所需要的jar包怎么生成
Mamen所需要的jar包怎么生成 使用 mamen 难免碰到,不知道的 jar 包,不知道怎么在 pom 文件中写,分享一个网址,可以把你想要的 jar 包生成 pom 配置文件,个人感觉非常好用. ...
- .NET Core开源组件:后台任务利器之Hangfire 转载 https://www.cnblogs.com/chenug/p/6655636.html
.NET Core开源组件:后台任务利器之Hangfire 一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的D ...
- Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
原文英文地址为:Creating an OpenGL Window (Win32),翻译的chm中文格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,每 ...
- 这 17 个 JVM 参数,高级 Java 必须掌握!
作者:SimpleSmile https://www.cnblogs.com/Simple-Object/p/10272326.html前言 大家都知道,jvm在启动的时候,会执行默认的一些参数.一般 ...
- Javascript连续赋值
Javascript对象属于引用类型,将对象赋值给变量相当于将对象地址赋值给变量 let a = {n: 1}; let b = a; a.x = a = {n: 2}; //运算符的优先级 cons ...
- CF322F
CF322F 拉格朗日插值 #include<iostream> #include<cstdio> #include<algorithm> #include< ...
- 项目案例之GitLab的数据迁移
项目案例之GitLab的数据迁移 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方 ...