Каратэ - Опубликовать ответ на основании предыдущего запроса - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь создать сценарий из нескольких частей, используя каратэ и graphql - используя ответы для формирования следующего запроса. Я внимательно просмотрел документы, но, похоже, не могу понять это.

Я посмотрел на документ с надписью «Данный путь ...», а затем запустил второй запрос как get, но мне нужно использовать тот же путь

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

  • войдите в систему get authId - это выполняется в фоновом режиме с помощью «чтения вызова» в другом файле функций, содержащем логин
  • , запросите запрос унаш внутренний сервер graphql, использующий запрашиваемый идентификатор
  • , извлекает workId из ответа
  • , использует этот workId для запуска мутации graphql и изменения базы данных
  • для получения ответаи подтвердить, что изменение было сделано успешно

Я не могу опубликовать точные схемы и коды по соображениям безопасности, но, чтобы дать вам смутное представление о том, что я пытаюсь сделать:

Background:
    * url serverBaseUri
    * def signIn = call read('classpath:somepath/to_login.feature') { username: 'abc', password: '123', result: true }
    * def sessionAccessId = signIn.responseHeaders['set-cookie'][0]
    * header Cookie = sessionAccessId


Scenario: 'Multi Lookup Value test'

* def reqID = "32443rw"

### Send query to get work id from request id as its dynamic and is required to modify the request.
* def query = 
"""
 query {
                RequestById(id: "<reqID>"){
                        workId
                        otherNotes
                      }
                  }

"""

Given request { query: '#(query)' }
When method post
Then status 200

#### Extract work id from response

* def wkId = response.data.RequestById.workId 

### populate 'otherNotes' and 'assignee' for workflow

* def queryMutate = 
"""
        mutation {
                  ModifyRequest(
                              requestId: "<reqID>"
                              workId: "<wkId>",
                              assignee: "testUser"
                              otherNotes: "test"
                  }
    """

Given request { query: '#(queryMutate)' }
When method post
Then status 200
And match $ ==
"""
{
    "data": {
      "completeRequest": true
    }
  }
"""

### Verify query changed successfully


* def validateMutationsWorked = 
"""
 query {
                RequestById(id: "<reqID>"){
                        workflowId
                        otherNotes
                      }
                  }

"""

Given request { query: '#(validateMutationsWorked)' }
When method post
Then status 200
And match $ ==
"""
{
                  "data": {
                    "Requests": [
                      {
                        "requestId": "32443rw",
                        "workId": "abc",
                        "assignee": null,
                      }
                    ]
                  }
                }

"""

Итак, по сути, у меня есть 3 приведенных утверждения в моем сценарии, которые должны следовать последовательно. Надеюсь, что это имеет больше смысла и добавляет запрошенные детали.

1 Ответ

0 голосов
/ 15 октября 2019

Пожалуйста, посмотрите на ключевое слово replace: https://github.com/intuit/karate#replace

* def text = 'hello <foo> world'
* replace text.foo = 'bar'
* match text == 'hello bar world'

И где у вас есть queryMutate, пожалуйста, используйте text. Все это подробно описано в документации, вам действительно нужно время, чтобы прочитать ее: https://github.com/intuit/karate#text

* def reqID = "32443rw"
* text query = 
"""
query {
  RequestById(id: "<reqID>") {
    workId
    otherNotes
  }
}
"""
* replace query.reqID = reqID
Given request { query: '#(query)' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...