【问题标题】:MonkeyRunner generates zombie processesMonkeyRunner 生成僵尸进程
【发布时间】:2014-05-12 15:49:12
【问题描述】:

我正在使用 MonkeyRunner 在真实设备上进行 Android 自动化测试并运行通宵测试。在其中一项广泛的自动化测试中,我发现每当 MonkeyRunner 截取屏幕截图时,都会在设备内部系统上创建一个僵尸进程。当我运行adb shell ps 命令时,您可以在下面看到僵尸进程:

随着僵尸进程的增加,设备变得无响应并开始挂起。在 MonkeyRunner 中,截图是唯一的验证方式。因此,在运行需要数小时的大量测试时,此问题非常关键。

我还看到this

framebuffer_service 没有“等待”生成的 截屏过程完成。因此,子进程 成为僵尸进程。

并建议修改 adb 源代码本身。但是,我认为在不深入到源代码的情况下,肯定还有其他解决方案。

任何想法/建议如何解决这个问题?

【问题讨论】:

  • monkeyrunner 在运行长时间测试时的不可靠性是我开始 AndroidViewClient/culebra 的主要原因之一。试一试。
  • 今天确实在考虑试一试 culebra。遇到这样一个简单但又很关键的问题,真是令人沮丧。
  • 您能否更改开发机器端的代码以在设备上运行自定义的东西(代替或作为中介),等待孩子?

标签: android adb monkeyrunner zombie-process


【解决方案1】:

我已经看到这在很大程度上取决于 android 版本和 screencap 实现。 您可以运行此测试(在 KitKat 上成功,但在以前的版本上可能会失败)来验证您的案例。

#! /usr/bin/python -u
# -*- coding: utf-8 -*-
'''
Copyright (C) 2014  Diego Torres Milano
'''

import sys
import unittest

from com.dtmilano.android.adb.adbclient import AdbClient

VERBOSE = True
TIMES = 40
SLEEP = 0

def repeat(times):
    def repeater(t):
        def caller(*args):
            for f in (t,)*times:
                if VERBOSE:
                    sys.stdout.write('.')
                f(*args)
                if SLEEP:
                    time.sleep(SLEEP)
        return caller
    return repeater

class TakeSnapshotTests(unittest.TestCase):

    def setUp(self):
        self.device = AdbClient(serialno=serialno)

    def tearDown(self):
        pass

    @repeat(TIMES)
    def testSnapshot(self):
        self.device.takeSnapshot(reconnect=True).save('/dev/null', 'PNG')
        out = self.device.shell('ps | grep screencap').split('\n')
        if len(out) > 1:
            self.fail(out)

    @staticmethod
    def main():
        unittest.main()

if __name__ == '__main__':
    if len(sys.argv) >= 2:
        serialno = sys.argv.pop(1)
    else:
        serialno = '.*'
    TakeSnapshotTests.main()

【讨论】:

  • 感谢测试用例。不幸的是,在我的情况下它失败了。看来我只需要接受它并尝试尽可能多地使用 AndroidViewClient
猜你喜欢
  • 2011-01-26
  • 2016-07-03
  • 1970-01-01
  • 2011-03-14
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多