Я пытаюсь создать динамический запрос, который должен получить 2 параметра (имя пользователя и пароль). Для этого я определил следующий файл JSON:
{
"grant_type": "password",
"client_id": "myClient",
"username": "#(username)",
"password": "#(password)"
}
Чтобы вызвать мой JSON, я установил приведенный ниже файл функций, где я намереваюсь определить переменную для каждого параметра, который я хочу отправить.
Scenario: Get Sugar access token
Given url baseUrl
And path 'oauth2/token'
And def username = 'user'
And def password = 'password'
And def requestBody = read('classpath:jsonFiles/requests/authRequest.json')
When request requestBody
And method POST
Then status 200
* print 'Response: ', response
К сожалению, когда я запускаю сценарий, я получаю сообщение об ошибке ниже
10:59:59.111 [main] INFO com.intuit.karate - Karate version: 1.4.0-SNAPSHOT
10:59:59.286 [main] INFO com.intuit.karate.Suite - backed up existing 'target\karate-reports' dir to: target\karate-reports_1672160399285
10:59:59.303 [main] INFO c.intuit.karate.core.FeatureRuntime - found scenario at line: 4
11:00:00.174 [main] ERROR com.intuit.karate - src/test/java/myCompany/testautomation/features/auth/getToken.feature:11
And def requestBody = read('classpath:jsonFiles/requests/authRequest.json')
js failed:
>>>>
01: read('classpath:jsonFiles/requests/authRequest.json')
<<<<
org.graalvm.polyglot.PolyglotException: not found: jsonFiles/requests/seugarAuth/authRequest.json
- com.intuit.karate.resource.ResourceUtils.getResource(ResourceUtils.java:126)
- com.intuit.karate.core.ScenarioFileReader.toResource(ScenarioFileReader.java:129)
- com.intuit.karate.core.ScenarioFileReader.readFileAsStream(ScenarioFileReader.java:99)
- com.intuit.karate.core.ScenarioFileReader.readFileAsString(ScenarioFileReader.java:95)
- com.intuit.karate.core.ScenarioFileReader.readFile(ScenarioFileReader.java:54)
- com.intuit.karate.core.ScenarioEngine.lambda$new$0(ScenarioEngine.java:120)
- <js>.:program(Unnamed:1)
src/test/java/myCompany/testautomation/features/auth/getToken.feature:11
Использование classpath:
имеет больше смысла для проектов Java. Похоже, вы используете расширение кода Visual Studio, и в этом случае корневая папка вашей рабочей области будет путем к классам, если не переключиться в «режим Maven» или эквивалентный: https://marketplace.visualstudio.com/items?itemName= karatelabs.karate#run-mode
Или другой вариант — использовать «раннер» Java и использовать расширение Java для VS Code.
Если все вышеперечисленное не имеет смысла, пока просто не усложняйте и используйте относительные пути. Например, если authRequest.json
находится рядом с вашим файлом функций, это будет работать:
* def requestBody = read('authRequest.json')
Можно использовать относительные пути и префикс this:
, но я оставляю это на ваше усмотрение: https://github.com/karatelabs/karate#path-prefixes