2016-06-14 4 views
1

j'ai les étapes de test suivantes:Modifier le transfert d'objets (à l'aide de transfert de propriété) dans SoapUI

  • GetDetails
  • TransferObject (transfert de propriété)
  • Changer Détails

GetDetails délivre un Objet JSON comme suit:

{ 
    "databaseId": 123, 
    "databaseName": "Test", 
    "address": "ON", 
    "details": { 
     "detail_id": 999, 
     "userId": 2, 
     "date": null, 
     "state": "active" 
    }, 
    "itemName": "Bob details", 
} 

transferObject transfère cet objet details à ChangeDetails test step.

Mais maintenant, je veux modifier l'objet (modifier la propriété state-non-active) avant de le nourrir à ChangeDetails cas de test.

Comment puis-je faire cela? Aucune suggestion?

+0

Ce que vous avez mentionné semble être des «étapes de test» d'un cas de test, n'est-ce pas? De plus, il semble qu'il y ait plusieurs 'details' et pas unique, donc peu plus d'extraits de json ont besoin de l'expliquer. Par le, vous pouvez utiliser 'Property Expansion' pour le même. – Rao

+0

@Rao: Vous avez raison! J'ai modifié mon message. Dans un seul objet JSON, la propriété 'details' est unique. Où puis-je trouver le 'Property Expansion'? – CodeJockey

+0

Vous voulez donc que les données ci-dessus soient entrées dans l'étape de test 'ChangeDetails'? Et seulement changer d'état? Peux-tu élaborer? – Rao

Répondre

1

Je ne suis pas vraiment sûr de savoir comment y parvenir en utilisant l'étape de transfert de propriété car il semble être une manipulation de données.

Si cela devait être réalisé, je le ferais de la manière ci-dessous (en utilisant l'assertion de script).

Demandez à deux pas

  • obtenir des détails
  • Changer Détails

Ajouter un Script Assertion avec le code ci-dessous pour obtenir des détails étape:

import groovy.json.* 

//Read the response of GetDetails and filter details 
def details = new JsonSlurper().parseText(context.response).details 

//assert there is details available and not empty 
assert details, "Details is empty or null in the response" 

//Creating object to build the next step request 
def json = new JsonBuilder() 

//Building details object for Change 
json.details { 

    //looping thru each data 
    details.each { key, value -> 

     //Change state to inactive 
     if ('state' == key) value = 'non-active' 

     //add the properties inside details 
     "$key"("$value") 
    } 
} 

//Create a pretty print sting and this is going to be the next test step's request 
def prettyJson = JsonOutput.prettyPrint(json.toString()) 

//Assign this data to a test step custom property, say REQUEST 
context.testCase.setPropertyValue('REQUEST', prettyJson) 

Dans le changement Détails étape, ouvrir l'éditeur de requête => avoir ${#TestCase#REQUEST}

Maintenant, lancez votre test pour voir s'il fonctionne comme vous le souhaitez.

Remarque: Il est mentionné dans le commentaire inactive, mais il est mentionné dans la question à non-active - donc gardé le même dans la réponse. Je pense que ce n'est pas vraiment un gros problème dans ce cas, je crois.

+0

Merci @Rao. Ça a marché! – CodeJockey