Подтверждение JSON с JSonschema и роботизированной рамой - PullRequest
0 голосов
/ 08 июня 2018

Может ли кто-нибудь помочь мне начать с того, как использовать 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
robot .\mytest.robot

Где mytest.robot:

Library JsonValidator
Library JSONSchemaLibrary schemas
*** Test Cases ***
  My Test Case:
   Validate Json  service.schema.json  {"foo": "bar"}

У меня есть схема в подкаталоге schemas с именем service.json

Когда я запускаю тест, я получаю ...

$ robot .\mytest.robot
==============================================================================
Mytest
==============================================================================
My Test Case:                                                         | FAIL |
No keyword with name 'Validate Json' found.
------------------------------------------------------------------------------
Mytest                                                                | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
Output:  E:\GitLab\customer-api\test\output.xml
Log:     E:\GitLab\customer-api\test\log.html
Report:  E:\GitLab\customer-api\test\report.html

Таккажется, я упускаю довольно простую часть головоломки:

Не найдено ни одного ключевого слова с именем 'Validate Json'

ОБНОВЛЕНИЕ

Проблемыслепого следования «примеру кода»

Проблема заключалась в том, что я пропускал заголовок *** Settings *** до операторов Library, плюс имя используемой схемы было неверным (легко решить после того, как заголовок былисправлено).

Полный пример:

*** Settings ***
Library  JSONSchemaLibrary  schemas

*** Test Cases ***
My Test Case:
    Validate Json  service.json  {"foo": "bar"}

Теперь ... Как мне использовать файлы схемы с внешними ссылками?Квест продолжается!

:)

1 Ответ

0 голосов
/ 13 мая 2019

Я не уверен, будет ли это работать с используемой вами библиотекой, но я использую библиотеку 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
...