Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    [SoapUI Groovy] Problème de contexte en multi-appels de Mocks
    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 :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <item>${id}</item>

    Mon script groovy :
    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");
     }


    J'ai vu dans ce fil qu'on peut locker le contexte de cette façon :
    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.

  2. #2
    Membre du Club
    Bonjour,

    Je me suis rendu compte que l'objet lock créé dans mon exemple ne fait pas du tout la fonction lock, c'est un objet simple qui prend une valeur aléatoire (lock:java.lang.Object@130e32f).

    Quelqu'un aurait une idée comment locker l'objet contexte dans Groovy ou dans Java ?

    Ou bien y a t-il un moyen de récupérer la réponse du mock sans passer par le contexte ?

    Merci.