开源框架 appium+python (二) 支持多设备并行 + 性能监控 +webserver 监控 crash日志
本帖已被设为精华帖!,
本帖子基于上篇帖子python+appium 开源框架分享
最新更新
- 去掉了对全局变量的依赖,现在用的是txt,后面优化成其他持久化数据的方式
- 新增对多机android运行
- 对多机日志监控
代码部分
- 用yaml设置多设备
appium:
- devices: JTJ4C16331013562
port: 4723
config: node D:\app\Appium\node_modules\appium\bin\appium.js -p 4723 -bp 4733
platformName: android
- devices: MSM8926
port: 4724
config: node D:\app\Appium\node_modules\appium\bin\appium.js -p 4724 -bp 4734
platformName: android
- 启动
class AppiumServer:
def __init__(self, l_devices):
self.l_devices = l_devices
def start_server(self):
"""start the appium server
:return:
"""
for i in range(0, len(self.l_devices["appium"])):
t1 = RunServer(self.l_devices["appium"][i]["config"])
p = Process(target=t1.start())
p.start()
def stop_server(self):
"""stop the appium server
selenium_appium: appium selenium
:return:
"""
os.system('taskkill /f /im node.exe')
def re_start_server(self):
"""reStart the appium server
"""
self.stop_server()
self.start_server()
def is_runnnig(self):
"""Determine whether server is running
:return:True or False
"""
response = None
for i in range(0, len(self.l_devices["appium"])):
url = " http://127.0.0.1:"+str(self.l_devices["appium"][i]["port"])+"/wd/hub"+"/status"
try:
response = urllib.request.urlopen(url, timeout=5)
if str(response.getcode()).startswith("2"):
return True
else:
return False
except URLError:
return False
finally:
if response:
response.close()
class RunServer(threading.Thread):
def __init__(self, cmd):
threading.Thread.__init__(self)
self.cmd = cmd
def run(self):
os.system(self.cmd)
- 看看入口
def runnerPool():
devices_Pool = []
for i in range(0, len(ga["appium"])):
l_pool = []
t = {}
t["deviceName"] = ga["appium"][i]["devices"]
t["platformVersion"] = phoneBase.get_phone_info(devices=ga["appium"][i]["devices"])["release"]
t["platformName"] = ga["appium"][i]["platformName"]
t["port"] = ga["appium"][i]["port"]
l_pool.append(t)
devices_Pool.append(l_pool)
pool = Pool(len(devices_Pool)) #根据多个设备名新建多个不同的进程
# for i in range(2):
# pool.apply_async(sample_request, args=(t[i],)) # 异步
pool.map(runnerCaseApp, devices_Pool) # runnerCaseApp是case
pool.close()
pool.join()
看看运行效果
测试报告
主要问题点
- 关于监控crash,我自己写了个jar包,闪退后会记录关键日志到本地,然后推送(用的socket client)到我的框架(socket server,一个设备一个socket server),框架中的socket server监控到闪退信息后,就会读取手机中的错误日志存到测试报告中
- 现在是打的jar包引用到其他app中,一打开就闪退,很费解,一直无法找到原因,希望帮忙指导下
- 打包的jar文件:
- app在appliticon注册
<application android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name="com.XX.crashhandler.CrashApplication">
其他
- Python与Java之间Socket通信
- Android 重写系统Crash处理类,保存Crash信息到SD卡
更新
- 已经解决把自定义获取app的crash日志,并以http get发送给我的框架中的web server,要注意
- 引用jar包时,要放到libs目录(我放在其他目录直接不行)
- 电脑和手机要在同一个网络
- 如果感兴趣,可以看看上面的那个重写crash处理类的链接,我已经更新到最新代码
- 后续会继续在此帖子中更新
* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除