Как использовать MonkeyDevice.instrument? - PullRequest
2 голосов
/ 17 апреля 2011

Привет, ребята, Я пытаюсь запустить один из моих тестовых инструментов из моего скрипта 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 ]

1 голос
/ 15 августа 2013

MonkeyDevice.instrument (строковый класс, аргументы словаря) отображается на команды InstrumentationTestRunner . В документации 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
1 голос
/ 17 апреля 2011

Возможно, вы используете неправильные аргументы.Этот скрипт, который я назвал 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)
...