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

来源:互联网 发布:网络词蜜汁是什么意思 编辑:程序博客网 时间:2024/06/14 03:33

1.相关链接:https://testerhome.com/topics/6468

                       https://testerhome.com/topics/9329

2.项目源码:https://github.com/Louis-me/CrashHandler

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

原创粉丝点击