MonkeyRunner с роботизированной платформой

Я планирую использовать скрипты monkeyrunner для выполнения автоматизированных тестов, и я хочу использовать robotframework (меня не интересует роботиум). Я видел отличное руководство по автоматизации сценариев сикули с помощью robotframework по адресу http://blog.mykhailo.com/2011/02/how-to-sikuli-and-robot-framework.html

Есть ли способ сделать подобное с помощью robotframework и monkeyrunner?

Вот мой пример скрипта monkeyrunner, он правильно выполняется при вызове с помощью monkeyrunner.

from __future__ import with_statement
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

def testCase() :
    device = MonkeyRunner.waitForConnection()
    result2 = device.takeSnapshot()
    # Writes the screenshot to a file
    result2.writeToFile("scr.png","png")

def my_keyword():
    print 'Hello, world!'

if __name__ == '__main__':
    testCase()

Я хочу вызвать то же самое с roboframework. и я пытаюсь следующее. Я не уверен, правильный ли следующий вызов, я просто скопировал из примера автоматизации sikuli и изменил его.

monkey_jar=/home/user/android-sdks/tools/lib/monkeyrunner.jar
guava_jar=/home/user/android-sdks/tools/lib/guavalib.jar
java -cp "robotframework-2.7.4.jar:$monkey_jar:$guava_jar" -Dpython.path="/home/user/android-sdks/tools/lib/" \
org.robotframework.RobotFramework --pythonpath=./  --outputdir=results --loglevel=TRACE $1

Когда я это делаю, я получаю следующую ошибку.

 Importing test library 'MyLibrary' failed: NoClassDefFoundError: Could not initialize class com.android.monkeyrunner.MonkeyDevice
java.lang.NoClassDefFoundError: 
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at MyLibrary$py.f$0(/home/user/automation/DemoScripts/MyLibrary.py:9)
    at MyLibrary$py.call_function(/home/user/automation/DemoScripts/MyLibrary.py)
    at robot.utils.importer$py._import$13(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:154)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.utils.importer$py.import_$28(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:241)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.utils.importer$py._import_class_or_module$4(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:67)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.utils.importer$py.import_class_or_module$3(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:64)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.run$py.main$3(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py:367)
    at robot.run$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py)
    at robot.utils.application$py._execute$10(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py:87)
    at robot.utils.application$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py)
    at robot.utils.application$py.execute_cli$5(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py:45)
    at robot.utils.application$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py)
    at robot.run$py.run_cli$6(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py:396)
    at robot.run$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py)
    at robot.jarrunner$py._run$3(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py:60)
    at robot.jarrunner$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py)
    at robot.jarrunner$py.run$2(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py:53)
    at robot.jarrunner$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py)
    at org.robotframework.RobotFramework.run(RobotFramework.java:62)
    at org.robotframework.RobotFramework.main(RobotFramework.java:37)
PYTHONPATH:
  /home/user/automation/DemoScripts
  /home/user/automation/DemoScripts/robotframework-2.7.4.jar/Lib/robot/libraries
  /home/user/automation/DemoScripts/robotframework-2.7.4.jar/Lib
  /home/user/android-sdks/tools/lib/
  /home/user/automation/DemoScripts/Lib
  __classpath__
  __pyclasspath__/
  .
  /home/user/automation/DemoScripts
CLASSPATH:
  robotframework-2.7.4.jar
  /home/user/android-sdks/tools/lib/monkeyrunner.jar
  /home/user/android-sdks/tools/lib/guavalib.jar
==============================================================================

Я считаю, что выполнение тестовых случаев monkeyrunner вместе с roboframework вполне возможно.

Любые входы?


person Durairaj Packirisamy    schedule 02.10.2012    source источник
comment
Извините, у меня нет ответа, но он меня интересует, и голосование против кажется глупым, поэтому +1, чтобы восстановить естественный баланс Androidverse.   -  person Simon    schedule 02.10.2012
comment
Спасибо. Я добавил некоторые подробности в пост. Я надеюсь, что кто-то предоставит входные данные.   -  person Durairaj Packirisamy    schedule 02.10.2012


Ответы (2)


Что ж, попробовав несколько дней, я обнаружил, что можно использовать сценарии MonkeyRunner с Robotframework.

Короче говоря, вы можете использовать следующее для запуска robotframework вместе с monkeyrunner.

export cpath=$(echo libs/*.jar | tr ' ' ':')
java   -Dpython.path=$cpath -jar robotframework-2.7.4.jar robo-tests.txt

Но единственная проблема заключалась в том, что main не вызывался, поэтому объект ChimpChat не инициализировался, что приводило к исключению нулевого указателя. Я исправил это в MonkeyRunner.java и создал новый файл monkeyrunner.jar. Благодаря этому я могу запускать скрипты monkeyrunner из roboframework. Я постараюсь создать пошаговый урок и опубликовать его.

person Durairaj Packirisamy    schedule 09.10.2012

@jollychang делай так

добавьте это в файл MonkeyRunner.java

   if(chimpchat == null) {
        Map<String, String> chimp_options = new TreeMap<String, String>();
        chimp_options.put("backend", "adb");
        chimpchat = ChimpChat.getInstance(chimp_options);
        MonkeyRunner.setChimpChat(chimpchat);
    }

до:

    JythonUtils.convertDocAnnotationsForClass(MonkeyRunner.class, dict);

затем создайте новый файл monkeyrunner.jar;

нужна другая банка, например: Libraries

используйте новый файл monkeyrunner.jar вместо старого.

наконец: запустите робота командой:

на моем компьютере используйте это:

java -cp/Users/komejun/Documents/devtool/android/android-sdk-mac_x86/tools/lib/chimpchat.jar:/Users/komejun/Documents/devtool/android/android-sdk-mac_x86/tools/lib/ddmlib .jar:/Users/komejun/Documents/devtool/android/android-sdk-mac_x86/tools/lib/guavalib.jar:/Users/komejun/Documents/devtool/android/android-sdk-mac_x86/tools/lib/monkeyrunner .jar:/Users/komejun/Documents/devtool/android/android-sdk-mac_x86/tools/lib/sdklib.jar:/Users/komejun/Downloads/robotframework-2.7.5.jar -Dcom.android.monkeyrunner.bindir ="/Users/komejun/Documents/devtool/android/android-sdk-mac_x86/tools" -Djava.library.path="/Users/komejun/Documents/devtool/android/android-sdk-mac_x86/tools/lib" org.robotframework.RobotFramework a.txt

person houlianpi    schedule 01.11.2012