开源框架 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) # runnerCaseAppcase
pool.close()
pool.join()

看看运行效果

开源框架 appium+python (二) 支持多设备并行 + 性能监控 +webserver 监控 crash日志

测试报告

开源框架 appium+python (二) 支持多设备并行 + 性能监控 +webserver 监控 crash日志
开源框架 appium+python (二) 支持多设备并行 + 性能监控 +webserver 监控 crash日志

主要问题点

  • 关于监控crash,我自己写了个jar包,闪退后会记录关键日志到本地,然后推送(用的socket client)到我的框架(socket server,一个设备一个socket server),框架中的socket server监控到闪退信息后,就会读取手机中的错误日志存到测试报告中
  • 现在是打的jar包引用到其他app中,一打开就闪退,很费解,一直无法找到原因,希望帮忙指导下
  • 打包的jar文件:

开源框架 appium+python (二) 支持多设备并行 + 性能监控 +webserver 监控 crash日志

  • 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处理类的链接,我已经更新到最新代码
  • 后续会继续在此帖子中更新

* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除