Подтверждение JSON с JSonschema и роботизированной рамой
Может ли кто-нибудь помочь мне начать с того, как использовать RobotFramework для проверки ответов JSON с помощью JSON-схемы?
В идеале на json-схему внешне ссылаются через http-запрос: Пример http://api-bl-uk.northeurope.cloudapp.azure.com/api/v1/crm/schemas/contact
Прогресс на данный момент:
pip install robotframework pip install robotframework-jsonvalidator pip install robotframework-jsonschemalibrary робот.\mytest.robot
куда mytest.robot
является:
Библиотека JsonValidator Библиотека JSONSchemaLibrary схемы *** Тестовые случаи *** Мой тестовый пример: Проверьте Json service.schema.json {"foo": "bar"}
У меня есть схема в подкаталоге schemas
называется service.json
Когда я запускаю тест, я получаю...
$ robot.\mytest.robot ================================================== ============================ MyTest ================================================== ============================ Мой тестовый пример: | FAIL | Не найдено ни одного ключевого слова с именем "Validate Json". ------------------------------------------------------------------------------ Mytest | FAIL | 1 критический тест, 0 пройден, 1 не пройден 1 тест всего, 0 пройдено, 1 не пройдено ================================================== ============================ Вывод: E:\GitLab\customer-api\test\output.xml Журнал: E:\GitLab\customer-api\test\log.html Отчет: E:\GitLab\customer-api\test\report.html
Кажется, мне не хватает довольно простой части головоломки:
Не найдено ни одного ключевого слова с именем "Validate Json"
ОБНОВИТЬ
Проблемы слепого следования "образцу кода"
Проблема была в том, что мне не хватало *** Settings ***
заголовок до Library
операторы, а также имя используемой схемы было неверным (легко решить после исправления заголовка).
Полный пример:
*** Настройки *** Библиотека JSONSchemaLibrary схемы *** Тестовые случаи *** Мой тестовый пример: Проверьте Json service.json {"foo": "bar"}
Теперь... Как я могу использовать файлы схемы с внешними ссылками? Квест продолжается!
:)
0 ответов
Я не уверен, будет ли это работать с используемой вами библиотекой, но я использую библиотеку jsonschema
(https://python-jsonschema.readthedocs.io/).
Я придумал два способа использования схемы из файла. Я бы пошел с первым.
Первый способ
В вашем virtualenv запустите pip install jsonschema
.
Затем создайте новый файл, mySchema.json
в том же каталоге, что и файл тестового примера. Файл тестового случая:
*** Settings ***
# For the "Get Binary File" task
Library OperatingSystem
# For the "validate" task
Library jsonschema
*** Test Cases ***
Load json schema from file, and validate json
# Load the file as a string, usually sufficent for most methods, but not validate() below
${schema} Get Binary File ./mySchema.json
# Load the string as a binary object, you could then use this like ${schema}[someProperty] if you wanted to
${schema} evaluate json.loads('''${schema}''') json
# Do a simple validation, using the schema, and your json data. Remember ${instance} needs to be a json object, not just some string
${instance} evaluate json.loads('''{"someField":[1,2,3]}''') json
validate instance=${instance} schema=${schema}
Второй способ
В вашем virtualenv запустите pip install jsonschema
.
Затем создайте новый файл, mySchema.json
в том же каталоге, что и файл тестового примера. Файл тестового случая:
*** Settings ***
# For the "Get Binary File" task
Library OperatingSystem
# For the "validate" task
Library jsonschema
*** Test Cases ***
Load json schema from file, and validate
# Create a schema
${schema} concat
... {
... "type": "object",
... "properties": {"$ref": "file:/absolute/path/to/mySchema.json"}
... }
${schema} evaluate json.loads('''${schema}''') json
# Do a simple validation, using the schema, and your json data. Remember ${instance} needs to be a json object, not just some string
${instance} evaluate json.loads('''{"someField":[1,2,3]}''') json
validate instance=${instance} schema=${schema}
Если вы хотите получить файл схемы из внешнего источника, взгляните на библиотеку запросов. Что-то типа:
*** Settings ***
Library RequestsLibrary
*** Test Cases ***
Test case
Create Session yourSession http://localhost
${file} Get Request yourSession /filename