2015-06-02 3 views
1

Я использую groovy для автоматизации некоторых тестов на SoapUI, и я хотел также автоматизировать утверждения таким образом, чтобы получить имя и значение поля из файла * .txt и проверьте, существует ли требуемое поле с требуемым значением в ответе SOapUI.SoapUi Assertions - использовать строку как json-путь с groovy

Пусть У меня есть следующие JSON ответ:

{ 
    "path" : { 
     "field" : "My Wanted Value" 
    } 
} 

И из моего текстового файла я бы следующие две строки:

path="path.field" 
value="My Wanted Value" 

Я попытался следующие:

import groovy.json.JsonSlurper 
def response = messageExchange.response.responseContent 
def slurper = new JsonSlurper() 
def json = slurper.parseText response 

assert json.path==value; 

Но, конечно, это не сработает.

Любая идея, как я могу это сделать, пожалуйста?

Спасибо

ответ

2

Я думаю, ваша проблема доступа к значению JSon от пути на основе с . нотации, в вашем случае path.field для решения этой проблемы можно использовать последующий подход:

import groovy.json.JsonSlurper 

def path='path.field' 
def value='My Wanted Value' 
def response = '''{ 
    "path" : { 
     "field" : "My Wanted Value" 
    } 
}''' 

def json = new JsonSlurper().parseText response 

// split the path an iterate over it step by step to 
// find your value 
path.split("\\.").each { 
    json = json[it] 
} 

assert json == value 

println json // My Wanted Value 
println value // My Wanted Value 

Дополнительно Я не уверен, что вы также спрашиваете, как читать значения из файла, если это также требование, вы можете использовать ConfigSlurper, чтобы сделать это, предположив, что у вас есть файл с именем myProps.txt с вашим контентом:

path="path.field" 
value="My Wanted Value" 

Вы можете получить к нему доступ с помощью последующего подхода:

import groovy.util.ConfigSlurper 

def urlFile = new File('C:/temp/myProps.txt').toURI().toURL() 
def config = new ConfigSlurper().parse(urlFile); 
println config.path // path.field 
println config.value // My Wanted Value 

Все вместе (JSon пути + чтение конфигурации из файла):

import groovy.json.JsonSlurper 
import groovy.util.ConfigSlurper 

def response = '''{ 
    "path" : { 
     "field" : "My Wanted Value" 
    } 
}''' 

// get the properties from the config file 
def urlFile = new File('C:/temp/myProps.txt').toURI().toURL() 
def config = new ConfigSlurper().parse(urlFile); 
def path=config.path 
def value=config.value 

def json = new JsonSlurper().parseText response 

// split the path an iterate over it step by step 
// to find your value 
path.split("\\.").each { 
json = json[it] 
} 

assert json == value 

println json // My Wanted Value 
println value // My Wanted Value 

Надеется, что это помогает,

+0

Это работает! Спасибо большое ! Но это дает мне следующую ошибку: «Нет такого свойства: поле для класса: java.lang.String» Любая идея, как противостоять этому? – user3089045

+0

@ user3089045 проблема в том, что, может быть, на вашем пути ('path.field') есть корневой узел, который не относится к ответу json? Вы можете защитить его, проверяя, если 'json [it]' имеет значение null, прежде чем назначить его: 'path.split (" \\. "). Each { def newValue = json." $ {It} " if (newValue! = null) json = newValue } '. ':)' – albciff

+0

Это просто совершенство, спасибо – user3089045