Parfois, dans le monde de l'entreprise, les choses ne sont pas roses.
On n'a pas forcément de code Java sous la main, et les tests unitaires n'existent pas vraiment (alors l'intégration continue, c'est plus du domaine de la science-fiction qu'autre chose).
C'est ce qui m'est arrivé quand je suis arrivé chez Perigee.
Je suis passé à un autre langage sans tests unitaires, et donc sans intégration continue.
Au bout d'un moment, j'en ai eu assez. J'ai donc développé un équivalent réduit de jUnit version 2 ou 3. La seule différence avec jUnit, c'est que mon équivalent produit "spontanément" le fameux rapport XML. Et ce rapport peut être récupéré via un appel à un web service local. Une fois qu'on a ça, j'ai envie de dire que l'intégration continue est au coin de la rue : il faut "juste" un client web service qui stocke ce fichier XML dans Hudson ...
Ce qui se fait assez bien en groovy avec GroovyWS, comme le code ci-dessous le montre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
//
// Generated from archetype; please customize.
//
import java.io.File;
import groovyx.net.ws.WSClient;
import groovy.util.CliBuilder;
import groovy.lang.Grab;
/**
*/
class WSAUnitMojo
{
/**
* The web service url to query to get tests results
*/
String webService
/**
* The location where test results file will be saved
*/
String outputFileName = "WSAUnit.xml";
/**
* timeout for test execution. If tests are failing, increase it
*/
long timeout = 60000
@Grab(group='org.codehaus.groovy.modules', module='groovyws', version='0.5.1')
void execute() {
println("connecting to "+webService+" to write file "+outputFileName+" with a timeout of "+timeout+" ms");
WSClient proxy = new WSClient(webService, this.class.classLoader);
proxy.initialize();
proxy.setConnectionTimeout(timeout);
// This is where web service gets called
String results = proxy.runAllTests();
File outputFile = new File(outputFileName);
// Now write those logs to a file
if(outputFile.exists()) outputFile.delete();
println("file exists ? "+outputFile.exists());
// println("directory exists ? "+outputFile.parent.exists());
outputFile.write(results);
}
public static void main(args) {
def cli = new CliBuilder(usage:"get pss execution results and put them in a file");
cli.w(longOpt:"webService", "web service url", args:1, required:true);
cli.o(longOpt:"output", "output file name", required:false);
cli.t(longOpt:"timeout", "timeout duration", required:false);
def opt = cli.parse(args);
if(!opt) {
println cli.usage
} else {
WSAUnitMojo mojo = new WSAUnitMojo(webService:opt.w);
if(opt.o)
mojo.outputFileName = opt.o;
if(opt.t)
mojo.timeout = opt.t;
mojo.execute();
}
}
}
Il y a plusieurs "trucs" à noter dans ce script groovy :
- D'abord, GroovyWS est utilisée avec grape, ce qui fait que les dépendances sont téléchargées à la première exécution (ce qui est terriblement long).
- Ensuite, GroovyWS est en fait, d'après cve que j'ai compris, une surcouche d'Apache CXF (c'est ce qui fait que je n'ai pas à déclarer de classe côté client avant d'utiliser le web service, je crois)
- Enfin, le fichier XML créé localement doit être indiqué à Hudson, via l'option "Publier le rapport des résultats des tests JUnit"
Et une fois que c'est fait ? Eh bien, une fois que c'est fait, Hudsonv a régulièrement interroger notre application non Java pour récupérer les résultats des tests unitaires. C'est puissant, et ça marche franchement bien.
Loading ...

