Comment puis-je utiliser des chemins relatifs à l'intervention de l'extérieur fichiers pour soapUI MockService

Ce que j'ai Fait

Je suis avec soapUI (3.6.1 version Gratuite) se moquer de services à servir des données spécifiques à 2 applications client je suis en train de tester. Avec quelques simples Groovy script que j'ai mis en place des simulacres d'opérations de chercher des réponses à partir des fichiers spécifiques sur la base des demandes formulées par les applications clientes.

Le contenu statique de la simulation de la réponse est:

${responsefile}

Le groovy dans l'opération d'envoi de script volet est:

def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
    context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryA.xml").text
}
else
{
    context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryB.xml").text
}

Dans cet exemple, lorsque l'application cliente envoie une demande à la maquette de service qui contient la chaîne CategoryA, la réponse retournée par soapUI est le contenu du fichier ID_List_CategoryA.xml

Ce que je suis en train De Réaliser

Tout cela fonctionne très bien avec les chemins absolus dans le groovy. Maintenant, je veux tirer l'ensemble de la collection de soapUI fichier de projet et des fichiers externes dans un package facile de re-déploiement. D'après mes lectures sur soapUI, j'espérais que ce serait aussi facile que de mettre les Ressources de projet à la Racine de la valeur à ${projectDir} et changer mes chemins:

def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
    context.responsefile = new File("Test_Files/ID_List_CategoryA.xml").text
}
else
{
    context.responsefile = new File("Test_Files/ID_List_CategoryB.xml").text
}

... en gardant à l'esprit que le projet soapUI fichier xml réside dans C:/soapProject/

Ce que j'ai Essayé jusqu'à Présent

Donc, qui ne fonctionne pas. J'ai essayé les variations de chemins relatifs:

  • ./Test_Files/ID_List_CategoryA.xml
  • /Test_Files/ID_List_CategoryA.xml
  • Test_Files/ID_List_CategoryA.xml

Un post a indiqué que soapUI peut considérer le projet les fichiers du répertoire parent la racine de l'application de la chemin d'accès relatif, donc essayé les variations suivantes: la

  • ./soapProject/Test_Files/ID_List_CategoryA.xml
  • /soapProject/Test_Files/ID_List_CategoryA.xml
  • soapProject/Test_Files/ID_List_CategoryA.xml

Quand rien de tout cela fonctionné, j'ai essayé en faisant usage de l' ${projectDir} la propriété dans le script groovy, mais toutes ces tentatives ont échoué avec un "Pas de telle propriété: mockService pour la classe: Script[n]" erreur. Admittefly, j'ai été vraiment tâtonner en essayant de le faire.

J'ai essayé en utilisant les informations de ce post et d'autres: Comment puis-je faire soapUI l'attachement des chemins d'accès relatifs?

... sans succès. Le remplacement de "test" avec "mock," (entre autres), dans la solution du code à partir de ce poste a entraîné plus d'erreurs de propriété, par exemple

testFile = new File(mockRunner.project.getPath())

.. a conduit à...

No such property: mockRunner for class: Script3

Ce Que Je Pense Que J'Ai Besoin De

Les postes que j'ai trouvé à ce sujet se concentrent tous sur soapUI des tests. J'ai vraiment besoin d'une solution qui est MockService centrée ou au moins jette une certaine lumière sur la façon dont il peut être géré différemment pour MockServices par opposition à des tests.

Toute aide est grandement appréciée. Merci. Marque.

La Solution Fournie par GargantuChet

La liste suivante comprend les modifications proposées par GargantuChet pour résoudre le problème de la tentative d'accès au ${projectDir} la propriété et de permettre l'utilisation de chemins relatifs par la définition d'une nouvelle projectDir objet dans le champ d'application de la groovy script:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def projectDir = groovyUtils.projectPath

def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
    context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryA.xml").text
}
else
{
    context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryB.xml").text
}
InformationsquelleAutor Mark | 2012-09-04