2

大家好,我正在尝试从我的 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 运行我的仪器,所以我知道它可以工作。

那么有人可以告诉我正确使用这种方法吗?谢谢。

4

2 回答 2

1

MonkeyDevice.instrument(string class , dictionary args)映射到InstrumentationTestRunner commands。Android 文档有一些关于检测命令的好信息,这里

文档没有告诉您的是如何指定参数。我在android源代码中发现了这一点。请参阅AdbChipDevice 第 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
于 2013-08-15T15:56:14.030 回答
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)
于 2011-04-17T03:16:32.077 回答