Bonjour,
Je travaille sur le simulateur de tests SoapUI pour tester des mock services avec les scripts Groovy. Mes mocks fonctionnement normalement en mode mono-thread (une seule exécution à la fois), mais lorsque je lance les mocks en multithread, les réponses provenant du mock ne sont plus cohérentes (exemple : la deuxième réponse prend la valeur de la première), et cela est dû au contexte par lequel je stocke les réponses récupérées à partir d'une requête. L'exécution des réponses se faisant en parallèle, un problème de concurrence sur le contexte se crée.
Exemple :
Ma réponse en XML :
Mon script groovy :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <item>${id}</item>
J'ai vu dans ce fil qu'on peut locker le contexte de cette façon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) def holder = groovyUtils.getXmlHolder( mockRequest.requestContent ) def cstmt = con.prepareCall("{CALL STORED_PROCEDURE_X(?,?,?)}"); // déclaration des paramètres de la procédure ... def rs = cstmt.executeQuery(); //Récupérer les paramètres de réponse if( rs.next() ) { context.id = rs.getString("id"); }
context.lock = new Object()
avec un autre bout de code du genre :
synchronized(context.LoadTestContext.lock) // sachant que je n'utilise pas LoadTestContext dans mes tests; les mocks services sont appelés hors SoapUI, à partir d'une application console.
J'ai testé en rajouter le lock, mais ça n'a pas marché. Quelqu'un aurait une idée comme résoudre ce problème svp ?
En vous remerciant d'avance.
Partager