我试过
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运行我的仪器,所以我知道它有效。
有人能告诉我使用这种方法是否正确?感谢。
答案 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