2

谁能帮助我开始了解如何使用 RobotFramework 通过 json-schema 验证 json 响应?

理想情况下,json-schema 通过 http 请求从外部引用:示例http://api-bl-uk.northeurope.cloudapp.azure.com/api/v1/crm/schemas/contact

目前进展:

点安装机器人框架
点安装机器人框架-jsonvalidator
pip install robotsframework-jsonschemalibrary
机器人 .\mytest.robot

在哪里mytest.robot

库 JsonValidator
库 JSONSchemaLibrary 模式
*** 测试用例 ***
  我的测试用例:
   验证 Json service.schema.json {"foo": "bar"}

我在schemas名为的子目录中有一个架构service.json

当我运行测试时,我得到...

$ 机器人 .\mytest.robot
==================================================== ==============================
我的测试
==================================================== ==============================
我的测试用例:| 失败 |
未找到名称为“验证 Json”的关键字。
-------------------------------------------------- ----------------------------
我的测试 | 失败 |
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"}

现在...如何使用外部引用的架构文件?探索继续!

:)

4

1 回答 1

3

我不确定这是否适用于您正在使用的库,但我正在使用该库jsonschemahttps://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}

如果您想从外部源获取架构文件,请查看 requests 库。就像是:

*** Settings ***
Library     RequestsLibrary

*** Test Cases ***
Test case
    Create Session    yourSession    http://localhost
    ${file}    Get Request    yourSession    /filename
于 2019-05-13T10:57:47.900 回答