Appium appium 运行时,如何获取 adb shell dumpsyst 或 adb bugreport日志,这两者运行时会有冲突,如何解决?

enumerate · 2017年02月17日 · 最后由 Ly-cc 回复于 2019年07月01日 · 2875 次阅读

如标题,我想在运行 appium 编写的用例时,获得这个用例完成时手机的 cpu 和内存的信息
如何获取信息
1.adb shell dumpsys meminfo xxxx
2.adb bugreport
下列代码,有两个用例作为展示

def test_background_1(self):
        self.driver.background_app(2)
        os.system("adb shell dumpsys meminfo xxxxxxx > d:/log/background.txt")

def test_changetab_1(self):
        Element.toClickbyName("通讯录")
        os.system("adb shell dumpsys meminfo xxxxxxx  > d:/log/changetab.txt")

如下图

在第二个获取日志时报错了
这里想是不是 appium 运行时因为就连接了 adb
在运行时又运行 adb 做其他操作,导致的?
那如果我想实现我这种在执行了一个用例后,就获取一下 cpu 和内存的数值好用在后面获得数据,要怎么解决这个日志的问题,求大神们给点建议

共收到 13 条回复 时间 点赞

和 appium 用同一个同路径的 adb.exe

其实没特殊需求的话,直接在手机里运行你的命令 (uiautomator2 的 executeShellCommand) 然后再 pull 出来

#1 楼 @264768502 不好意思,appium 同一个路径的 adb 没有找到啊。。而且我用的是 python,不能够用 uiautomator2 吧,还请在帮忙看下,谢谢

多进程吧。 我之前用 uiautomator 可以一边操作一边抓 cpu。多线程没试过

#3 楼 @ctro15547 好的多谢,我在看看,目前还没有找到合适的方法

#3 楼 @ctro15547 你好,不好意思能让我看下代码吗,或者是多进程的思路,我这里也写了,但是还是报错。。

用 adb shell "nohup sh -c XXXX &“ ?我是这么同时跑 monkey+ 抓内存的。。。记得 adb shell xxxx >xxxx 控制台还会是在等待结束吧?

好的多谢,不过我感觉是因为 appium 在启动的时候就是用 adb 去连接的,然后连接成功了就是一个进程了,我又在用例里又调用 system 或者 popen 新开启一个进程调用 adb,是不是 adb 调了两次,导致端口被占用?

自己补充一下,试验了一把,把代码里执行日志的拿出来单独操作,也还是会报错
例如 appium 在运行:

其实此时可看下端口:

已经绑定了 5037
这时我新开一个 cmd,运行输出日志的命令:

此时就会出现报错

所以问题的关键在于,代码端在连接 appium 服务的时候,就已经开启了 adb 程序,因为是用 adb 连接的,这块我是这么理解的,在运行时我在代码里或非代码里又再次调用 adb 命令去获取日志导致,调取日志的时候和前面连接 appium 的 server 发生了冲突

同问啊

我也遇到这个问题了 请问怎么解决啊????

楼主 我解决这个了 使用 adbbridge 就可以了。安卓自带的 ddmslib,你们搜搜就行。

匿名 #12 · 2018年11月19日

求问,楼主怎么解决的,现在也遇到了同样的问题

请问楼主解决了吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册