Question

Je prévois d'utiliser des scripts de monkeyrunner pour effectuer des cas de test automatisés et je souhaite utiliser robotframework (je ne suis pas intéressé par le robotium). J'ai vu un excellent tutoriel pour automatiser les scripts Sikuli avec robotframework à http://blog.mykhailo.com/2011 /02/how-to-sikul-and-robot-framework.html

Y a-t-il un moyen de faire de la même chose, avec RobotFramework et Monkeyrunner?

Voici mon exemple de script de monkeyrunner, cela s'exécute correctement lorsqu'il est invoqué avec 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()

Je veux invoquer la même chose avec Roboframework. et j'essaie ce qui suit. Je ne sais pas si l'invocation suivante est correcte ou non, je me suis simplement copié de l'exemple d'automatisation Sikuli et de la modifier.

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

Quand je fais cela, je reçois l'erreur suivante.

 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
==============================================================================

Je crois que l'exécution des cas de test de monkeyrunner avec Roboframework est tout à fait possible.

Toutes les entrées?

Était-ce utile?

La solution

Eh bien, après avoir essayé quelques jours, j'ai constaté qu'il était possible d'utiliser des scripts de monkeyrunner avec robotframework.

En bref, vous pouvez utiliser le détournement pour lancer RobotFramework avec Monkeyrunner.

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

Mais seul le problème était que la principale de Monkeyrunner n'a pas été appelée, ne pas initialiser l'objet Chimpchat, qui entraîne une exception de pointeur nulle.J'ai réparé cela dans Monkeyrunner.java, et j'ai créé un nouveau monkeyrunner.jar.Avec cela, je suis capable d'exécuter des scripts de Monkeyrunner de Roboframework.Je vais essayer de créer un tutoriel étape par étape et de le poster.

Autres conseils

@jollychang faire de cette façon

Ajoutez ceci au fichier 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);
    }

Avant:

    JythonUtils.convertDocAnnotationsForClass(MonkeyRunner.class, dict);

puis faire un nouveau monkeyrunner.jar;

Besoin d'autres potentiels comme ceci: bibliothèques

Utilisez le nouveau monkeyrunner.jar au lieu de l'ancien.

Enfin: Robot d'exécution avec la commande:

Dans mon ordinateur, utilisez ceci:

Java -CP /USERSERS/Komejun/documents/devtool/andrroid/androïd-sdk-mac_x86/tools/lib/chimpchat.jar:/users/komejun/documents/devtool/andrroid/androïd-sdk-mac_x86/tools/ lib / ddmlib.jar: /USERSERS/komejun/document/devtool/andrroid/android-sdk-mac_x86/tools/lib/guavalib.jar: / Utilisateurs / Komejun / Documents / devtool / Android / Android-SDK-MAC_X86 / Outils / lib / skeyrunner.jar: /USERSERS/komejun/document/devtool/andrroid/android-sdk-mac_x86/tools/lib/sdklib.jar: /USERS/komejun/downloads/robotframework-2.7.5.jar -dcom.android. Monkeyrunner.bindir="/ Utilisateurs / Komejun / Documents / DevTool / Android / Android-SDK-MAC_X86 / Outils" -Djava.library.Path="/ Utilisateurs / Komejun / Documents / devtool / Android / Android-SDK-MAC_X86 / Outils / lib "org.robotframework.robotframework A.txt

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top