Exécution de cas Robotium dans des lots séparés via Ant
-
12-12-2019 - |
Question
En gros, ce que je veux réaliser, c'est quelque chose comme ça mais en utilisant Robotium dans Ant.Je souhaite tester mes packages (suites ?) individuellement à l'aide d'une commande Ant.
La raison en est que la complexité de l'application est si grande qu'elle rencontre des problèmes lorsque je lance tout en même temps, généralement se termine à mi-chemin en raison d'une fuite de mémoire tandis que Robotium parcourt les dossiers, et comment certains cas affectent les cas futurs en raison d'un changement d'état quelque part dans l'application.
Tout fonctionne parfaitement lors de l'exécution du package actuel ou de l'exécution de chaque cas individuellement (en utilisant mon IDE), je veux donc savoir comment cela est réalisé via Ant à la place.
La solution
J'ai moi-même compris le problème.C'est en fait assez simple car j'ai imité le comportement du test des fourmis.
L'idée est que chaque fois ant test
est exécuté, il invoque simplement le adb shell
commande et déclenche le lanceur de tests d'instrumentation am instrument
, avec d'autres paramètres.Les paramètres peuvent être personnalisés pour définir quelles classes ou packages seront testés.
La solution est de définir un target
Sur ton custom_rules.xml
(J'utilise macrodef
afin que je puisse le réutiliser pour d'autres cibles) qui effectue cela.
<macrodef name="test-class">
<attribute name="class"/>
<sequential>
<echo level="info">Running tests for @{class}</echo>
<exec executable="${adb}" failonerror="false">
<arg line="${adb.device.arg}"/>
<arg value="shell"/>
<arg value="am"/>
<arg value="instrument"/>
<arg value="-w"/>
<arg value="-e"/>
<arg value="class"/>
<arg value="@{class}"/>
<arg value="com.example.application/${test.runner}"/>
</exec>
</sequential>
</macrodef>
Donc, si vous souhaitez une commande Ant telle que test-example qui teste les cas de test .tests.ExampleTest, vous pouvez la définir comme telle :
<target name="test-example">
<test-class class="com.example.application.tests.ExampleTest />
</target>
Et puis exécutez-le comme
ant clean debug install test-example
ou juste
ant test-example
Oh, et ce n'est pas exclusif à Robotium, car Robotium s'appuie en fait sur le cadre de test existant fourni par Android.