1.ready.py文件

def getport():
aport = random.randint(4700, 4900)
# 判断端口是否被占用
while getDeviceInfo.is_open('127.0.0.1', aport):
aport = random.randint(4700, 4900)
bpport = random.randint(4700, 4900)
while getDeviceInfo.is_open('127.0.0.1', bpport):
bpport = random.randint(4700, 4900)
return aport, bpport
def getsys():
sys = str(random.randint(4, 6)) + "." + str(random.randint(4, 6)) + "." + ""
return sys class readyH(object):
def __init__(self,device):
self.device = device
aa= getport()
self.ap = aa[0]
self.bp = aa[1] def installapp(self):
os.popen("adb install -r "+str(getApkPath.get_apk_path())) def start_appium(self): # device_uid,
# appium -p 4723 -bp 4724 -U 22238e79 --command-timeout 600
errormsg = ""
appium_server_url = ""
try:
ap = getport()[0]
bp = getport()[1]
print ap,bp,self.device
cmd = 'appium' + ' -p ' + str(self.ap )+ ' --bootstrap-port ' + str(self.bp) + ' -U ' + str(self.device) # ' -U '+ device_uid+
print cmd
# p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #stdout=PIPE, stderr=PIPE)
p = subprocess.Popen(cmd, shell=True)
print p
except Exception, msg:
errormsg = str(msg)
def get_driver(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = getsys()
desired_caps['app'] = getApkPath.get_apk_path()
desired_caps['appPackage'] = 'vStudio.Android.Camera360'
desired_caps['deviceName'] = self.device
url = 'http://localhost:%s/wd/hub' % str(self.ap)
print url
self.driver = webdriver.Remote(url, desired_caps)
return self.driver
def disdrop(self):
self.driver.close_app()
self.driver.quit()
def main_case(self):
self.installapp()
time.sleep(10)
self.start_appium()
time.sleep(5)
self.get_driver()
time.sleep(5)
testcase.myCase(self.driver,self.device).case_one()
time.sleep(5)
self.disdrop()

2.run.py

class myThread(threading.Thread):
def __init__(self,device):
threading.Thread.__init__(self)
self.device = device
def run(self):
if __name__ == '__main__':
a = ready.readyH(self.device)
a.main_case() if __name__ == '__main__': try:
devices = mod_config.getDeviceListConfig("alldevices") tt =[]
for device in devices :
t = myThread(device[0])
tt.append(t)
for t in tt:
t.start()
time.sleep(5)
for t in tt:
t.join()
except:
print "线程运行失败"

3.testcase.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
from appium import webdriver
from public import mod_config
from lib import appiumLib
import time _initSize = [1080,1776] class myCase(object):
def __init__(self,driver,device):
self.device = device
self.driver = driver
def case_one(self):
print self.driver
tipsclick = mod_config.get_config("firstPage", "开机画面跳过")
setting = mod_config.get_config("mine", "设置")
about = mod_config.get_config("mine", "关于")
c360icon = mod_config.get_config("mine", "图标")
entersdk = mod_config.get_config("mine", "特效测试")
makePic = mod_config.get_config("mine", "制图测试")
mine = mod_config.get_config("firstPage", "我的") appiumLib.click_by_id(self, tipsclick)
appiumLib.click_by_name(self, "立即体验")
appiumLib.back_times(self, 1)
time.sleep(2)
appiumLib.click_by_xpath(self, mine)
# 取消发布按钮处的提示信息
appiumLib.tap_forxy(self, [595, 150], _initSize, 500) appiumLib.click_by_id(self, setting)
appiumLib.click_by_id(self, about)
appiumLib.click_by_id(self, c360icon)
appiumLib.click_by_id(self, entersdk)
appiumLib.click_by_id(self, makePic)
for i in range(0, 3):
time.sleep(5)
appiumLib.click_by_id(self, makePic)
print "制图完成"

appium+python 多设备并行执行脚本【转】的更多相关文章

  1. Appium+Python app自动化测试之脚本启动和停止Appium服务

    研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb de ...

  2. Appium+Python之测试数据与脚本分离

    如果脚本中有很多的魔法数据,那代码的复用性就不会很高,所以我们需要将测试数据和脚本分离. 思路:将测试数据放在一个json文件中,然后写一个读取json文件的基类,测试用例中通过调基类中方法来获取js ...

  3. appium+python 【Mac】UI自动化测试封装框架介绍 <二>---脚本编写(单设备)

    1.单设备的执行很简单,平时可多见的是直接在config中进行配置并进行运行即可.如下: # coding=UTF- ''' Created on // @author: SYW ''' from T ...

  4. Appium + Python App自动化第一个脚本

    今天跟大家讲解一个Appium和Python App自动化的脚本.[1]打开你的夜神模拟器(或者连接你的手机) [2]打开桌面的Appium [3]下载你要测的App的apk文件,放到桌面[4]拖动你 ...

  5. Appium+python自动化(三十六)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 上(超详解)

    简介 前面课程只是启动了单个appium服务,只能控制单台设备.如果需要针对多台设备测试那么该如何处理?而且发现群里的小伙伴们也在时不时地在讨论这个问题,想知道怎么实现的,于是宏哥就决定写一片这样的文 ...

  6. Appium自动化如何控制多设备并行执行

    前言: 如何做到,控制多设备并行执行测试用例呢. 思路篇 我们去想下,我们可以获取参数的信息,和设备的信息,那么​我们也可以针对每台设备开启不一样的端口服务.那么每个服务都对应的端口,我们在获取设备列 ...

  7. appium+Python真机运行测试demo的方法

    appium+Python真机运行测试demo的方法 一,    打开手机的USB调试模式 二,    连接手机到电脑 将手机用数据线连接到电脑,并授权USB调试模式.查看连接的效果,在cmd下运行命 ...

  8. appium+python做移动端自动化测试

      1 导言 1.1 编制目的 该文档为选用Appium作为移动设备原生(Native).混合(Hybrid).移动Web(Mobile Web)应用UI自动化测试的相关自动化测试人员.开发人员等提供 ...

  9. appium+Python 启动app(一)

    当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...

随机推荐

  1. vue如何导入外部js文件(es6)

    也许大家都是使用习惯了es5的写法喜欢直接用<Script>标签倒入js文件,但是很是可惜,这写法.在es6,或则说vue环境下不支持 真的写法是怎样? 首先.我们要改造我们要映入的外部j ...

  2. QQ和微信点击链接或扫描自动跳转外部浏览器

    微信上进行的网页宣传.游戏传播.APP下载各类活动很多,但是各位朋友肯定经常会遇到一些特殊需求,网页需要在手机默认浏览器打开而不是微信内置浏览器.这个问题怎么解决呢? 另一种情况是你的网址被恶意举报被 ...

  3. python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

  4. 白话SCRUM之一:SCRUM 的三个角色

    在SCRUM方法中将项目的利益相关者分成两大类:Pigs角色与chickens角色,pigs即为项目组的实际参与人员,chickens为项目组的外部人员,包括经理.最终用户等等.Pigs在scrum中 ...

  5. windows elasticsearch使用ik分词器插件后启动报错java.security.AccessControlException: access denied ("java.io.FilePermission" "D:...........\plugins\ik-analyzer\config\IKAnalyzer.cfg.xml" "read")

    删除es安装文件夹中空格,遂解决......(哭

  6. 【IDE_IntelliJ IDEA】idea主题设置

    参考博文: IDEA 炫酷的主题字体颜色设置 idea主题下载

  7. Rust的Drop Trait,相当于析构代码

    退出前自动执行的代码. struct CustomSmartPointer { data: String, } impl Drop for CustomSmartPointer { fn drop(& ...

  8. docker 中,修改了 mysql 配置,如何重启 mysql?

    直接重新启动容器: docker restart containerID/containerName

  9. SGD的动量(Momentum)算法

    引入动量(Momentum)方法一方面是为了解决“峡谷”和“鞍点”问题:一方面也可以用于SGD 加速,特别是针对高曲率.小幅但是方向一致的梯度. 如果把原始的 SGD 想象成一个纸团在重力作用向下滚动 ...

  10. LG4782 「模板」2-SAT问题 2-SAT

    问题描述 LG4782 题解 对于一个限制条件,建边如下: 如果\(x,-x\)在同一个强联通分量里,则不行,否则可以 构造方案:输出\(bel_i<bel_{i+n}\) \(\mathrm{ ...