Извлечение дочернего узла из JSON Response с использованием сценария SoapUI-Groovy - PullRequest
0 голосов
/ 27 апреля 2018

Я новичок в soapUI и все еще изучаю отличный сценарий, мне нужна ваша помощь. это мой ответ JSON:

 {
  "userId": 36,
  "userTypeId": 2,
  "name": "Name_7",
  "surname": "R",
  "friendlyName": "",
  "employeeId": "1000245",
  "role": "engineer",
  "dateOfBirth": "1985-07-09T01:46:23.213",
  "fPicture": "",
  "deleted": false,
  "visitingUserId": null,
  "mineId": 1,
  "crewId": null,
  "versionAutoId": 10002814,
  "externalId": null,
  "email": null,
  "externalLoginId": null,
  "sourceJson": null,
  "description": null,
  "propertyJson": null,
  "userGroups":       [
     {"groupCode": "ALL_USERS"},
     {"groupCode": "MTCC_ADMIN"}
  ],
  "userAccessDto":       {
     "userAccessId": 36,
     "userId": 36,
     "password": "XKjgXD6o/pjHaHd6swvkB8TiQ6L1kEC8307sV94F2GeiFnb4QXUZJhk8rdQJgvdJujSPK/NoM94CMtp8X51ExTEwMDAyNDU=",
     "deleted": false
  }
   },

{
  "userId": 37,
  "userTypeId": 5,
  "name": "Name_9",
  "surname": "R",
  "friendlyName": "",
  "employeeId": "1201",
  "role": "engineer",
  "dateOfBirth": "1985-07-09T01:46:23.213",
  "fPicture": "",
  "deleted": false,
  "visitingUserId": null,
  "mineId": 6,
  "crewId": null,
  "versionAutoId": 10031438,
  "externalId": null,
  "email": null,
  "externalLoginId": null,
  "sourceJson": null,
  "description": null,
  "propertyJson": null,
  "userGroups":       [
     {"groupCode": "ALL_USERS"},
     {"groupCode": "MTCC_ADMIN"}
  ],
  "userAccessDto":       {
     "userAccessId": 37,
     "userId": 37,
     "password": "a05qHK+KrXXmHTFFGQN9JRQWkHnjJX+SCmqBK1PAa2f95I8e20JNt5GaVxL5nGbnTReobSZ/vej3qCAsZK9Q7DEyMDE=",
     "deleted": false
  }

} ]

Как я могу получить значение пароля для userId = 36 и передать его другим моим тестам? Я много искал, но не смог найти подходящего руководства по существующим задаваемым вопросам. Я должен упомянуть, что мой ответ время от времени меняется, поэтому я не могу принять его за строку. Цените все ваши ответы.

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018
import net.sf.json.groovy.*

def i, newUserId, hashPass, empId;
//get test case from other project or from the same one
project = 
testRunner.getTestCase().getTestSuite().getProject().
getWorkspace().getProjectByName("API_Services_v3.0.321")
testSuite = project.getTestSuiteByName("Users");
testCase = testSuite.getTestCaseByName("Users-Retrieve a list of users");

// запустить тестовый набор

runner = testCase.run(new 
com.eviware.soapui.support.types.StringToObjectMap(), false);
Thread.sleep(3000)

// получаем JSONresponse из testStep и анализируем его

def responseContent = testCase.getTestStepByName("ApiV1UsersGet -Get 
all").getPropertyValue("response")
slurperResponse = new JsonSlurper().parseText(responseContent)

// получаем userId из свойства TestSuite для сравнения с

newUserId = 
testRunner.testCase.testSuite.project.getTestSuiteByName("Users").
getPropertyValue("idOfUser")

// цикл через JSONresponse

for(i=0;i<slurperResponse.resource.size();i++)
{
            if(slurperResponse[i].userId == newUserId.toInteger() )
            {
                            log.info("Hash Pass is" +slurperResponse[i].userAccessDto.password);
                            log.info("Employee Id is" +slurperResponse[i].employeeId);
                            hashPass = slurperResponse[i].userAccessDto.password
                            empId = slurperResponse[i].employeeId

                            break;
            }
}

// присваиваем hashPassword и empId свойствам testSuite для следующего шага теста

testRunner.testCase.testSuite.project.getTestSuiteByName("Users")
.setPropertyValue("Hash_Pass",hashPass.toString())
 testRunner.testCase.testSuite.project.getTestSuiteByName("Users").
setPropertyValue("EmployeeId2",empId.toString())
0 голосов
/ 30 апреля 2018

Я вижу, что вы нашли способ, хотя я бы назвал его трудным. Вы могли бы просто использовать опцию JSONPath в Property Transfer. Такой запрос работает:

$. [? (@. == 36 идентификатор пользователя)]. Пароль

Кроме того, вы можете включить userId в параметр для динамических проверок.

Property Transfer with JSONPath

0 голосов
/ 27 апреля 2018

Я предлагаю вам использовать JsonSlurper.

Для файла Json, подобного этому: Example.json

{
  "userAccessDto": {
    "userAccessId": 37,
    "userId": 37,
    "password": "a05qHK+KrXXmHTFFGQN9JRQWkHnjJX+SCmqBK1PAa2f95I8e20JNt5GaVxL5nGbnTReobSZ/vej3qCAsZK9Q7DEyMDE=",
    "deleted": "false"
  }
}

Groovy код:

import groovy.json.JsonSlurper;

def root =new JsonSlurper().parse(new File ('/tmp/example.json'))

println root.userAccessDto.password
...