Monkeyrutunner con robotFramework.
-
12-12-2019 - |
Domanda
Sto pensando di usare gli script di monkeyruroccolo per fare casi di test automatizzati e voglio usare robotfreworkwork (non sono interessato al robotium). Ho visto un tutorial eccellente per automatizzare gli script Sikuli con RobotFramework a http://blog.mykhailo.com/2011 /02/how-to-sikuli-and-robot-framework.html
C'è un modo per fare una cosa simile, con robotFramework e MonkeyRunner?
Ecco il mio campione Script MonkeyRunner, questo viene eseguito correttamente quando è stato invocato con 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()
.
Voglio invocare lo stesso con RoboFramework. E sto provando quanto segue. Non sono sicuro che la seguente invocazione sia corretta o meno, ho semplicemente copiato dall'esempio di automazione Sikuli e la modifica.
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
.
Quando lo faccio, sto ottenendo il seguente errore.
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
==============================================================================
.
Credo che l'esecuzione dei casi di test di MonkeyRunner insieme a RoboFramework sia abbastanza possibile.
Eventuali ingressi?
Soluzione
Bene, dopo aver provato per pochi giorni, ho scoperto che è possibile utilizzare gli script di monkeyrutunner con robotFramework.
In breve, è possibile utilizzare il folllowing per avviare RobotFramework insieme a MonkeyRunner.
export cpath=$(echo libs/*.jar | tr ' ' ':')
java -Dpython.path=$cpath -jar robotframework-2.7.4.jar robo-tests.txt
.
Ma solo il problema era che il principale di Monkeyrutunner non è stato chiamato, non inizializzando così l'oggetto Chimpchat, il che si traduce in un'eccezione di puntatore null.L'ho riparato a Monkeyrutunner.java, e ho creato un nuovo monkeyrutunner.jar.Con questo, sono in grado di gestire gli script di MonkeyRunner da RoboFramework.Proverò a creare un tutorial passo passo e post-it.
Altri suggerimenti
@jollychang fai questo modo
Aggiungi questo a File 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);
}
.
Prima:
JythonUtils.convertDocAnnotationsForClass(MonkeyRunner.class, dict);
.
quindi fai un nuovo monkeyrutunner.jar;
Hai bisogno di altri come questo:
Usa il nuovo MonkeyRunner.jar invece del vecchio.
Alla fine: eseguire robot con il comando:
Nel mio computer usa questo:
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: / Utenti / Komejun / Documenti / DevTool / Android / Android-SDK-Mac_X86 / Strumenti / lib / monkeyrurocner.jar: /users/komejun/documents/devtool/android/android-sdk-mac_x86/tools/lib/sdklib.jar: /User/komejun/downloads/robotframework-2.7.5.jar -dcom.android. monkeyrurunner.bindir="/ utenti / komejun / documents / devtool / android / android-sdk-mac_x86 / strumenti" -djava.library.path="/ utenti / komejun / documents / devtool / android / android-sdk-mac_x86 / strumenti / Libr "Org.RobotFramework.RobotFramework A.txt