如何使用MonkeyDevice.instrument?

时间:2011-04-16 22:50:30

标签: android monkeyrunner

嗨,伙计们, 我正在尝试从我的MonkeyRunner脚本运行我的一个测试工具。不幸的是我无法让它发挥作用。我试过用不同的参数变量调用MonkeyDevice.instrument但没有运气。

我试过

device = MonkeyRunner.waitForConnection() device.instrument( “android.test.InstrumentationTestRunner”) device.instrument( “com.myTestPackage.myTestClass”) device.instrument( “com.myTestPackage / .myTestClass”) device.instrument( “myTestClass”)

这些抛出和错误都没有,但它们也没有运行测试。我可以通过Dev Tools或Android Junit Test运行我的仪器,所以我知道它有效。

有人能告诉我使用这种方法是否正确?感谢。

2 个答案:

答案 0 :(得分:1)

您可能使用了错误的参数。这个名为instrumentation.mr的脚本可以帮助您使用正确的脚本。 使用目标包名称调用它。

#! /usr/bin/env monkeyrunner

import sys
from com.android.monkeyrunner import MonkeyRunner

PLI = 'pm list instrumentation'

def usage():
    print >>sys.stderr, "usage: intrumentation.mr target-package"
    sys.exit(1)

def main():
    if len(sys.argv) != 2:
        usage()

    pkg = sys.argv[1]

    print "waiting for connection..."
    device = MonkeyRunner.waitForConnection()

    print "running istrumentation for %s" % pkg
    for (i, t) in map(lambda l: l.split(), device.shell(PLI).splitlines()):
        if t == '(target=%s)' % pkg:
            print device.instrument(i.split(':')[1], { 'wait':True })['stream']
            return

    print >>sys.stderr, "ERROR: instrumentation for %s not found" % pkg

if __name__ == '__main__':
    main()

例如:

$ instrumentation.mr com.example.aatg.tc

打印:

waiting for connection...
running istrumentation for com.example.aatg.tc

Test results for InstrumentationTestRunner=...............................
Time: 39.932

OK (31 tests)

答案 1 :(得分:1)

MonkeyDevice.instrument(string class, dictionary args)映射到InstrumentationTestRunner commands。 Android文档在instrumentation命令here上有一些很好的信息。

文档没有告诉你的是如何指定args。我发现在android源代码中。见AdbChipDevice line 483。这是代码的复制和粘贴:

   482     @Override
   483     public Map<String, Object> instrument(String packageName, Map<String, Object> args) {
   484         List<String> shellCmd = Lists.newArrayList("am", "instrument", "-w", "-r");
   485         for (Entry<String, Object> entry: args.entrySet()) {
   486             final String key = entry.getKey();
   487             final Object value = entry.getValue();
   488             if (key != null && value != null) {
   489                 shellCmd.add("-e");
   490                 shellCmd.add(key);
   491                 shellCmd.add(value.toString());
   492             }
   493         }
   494         shellCmd.add(packageName);
   495         String result = shell(shellCmd.toArray(ZERO_LENGTH_STRING_ARRAY));
   496         return convertInstrumentResult(result);
   497     }

以下python猴子代码:

params = dict()
params['size'] = 'small'
device = MonkeyRunner.waitForConnection()
device.instrument('com.mycompany.myapp/android.test.InstrumentationTestRunner', params)

等同于以下命令:

adb shell am instrument -w -r -e size small com.mycompany.myapp/android.test.InstrumentationTestRunner