当前位置: 首页 > 知识库问答 >
问题:

用jsonschema和robotframework验证json

罗昊明
2023-03-14

有人能帮助我了解如何使用RobotFramework通过JSON-Schema验证json响应吗?

理想情况下,通过http请求外部引用json-schema:示例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
Library JsonValidator
Library JSONSchemaLibrary schemas
*** Test Cases ***
  My Test Case:
   Validate Json  service.schema.json  {"foo": "bar"}

当我做测试的时候...

$ 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  JSONSchemaLibrary  schemas

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

共有1个答案

宫弘亮
2023-03-14

我不确定这是否适用于您正在使用的库,但我正在使用库jsonschema(https://python-jsonschema.readthedocs.io/)。

我提出了两种从文件中使用模式的方法。我会选择第一个。

在virtualenv中,运行PIP install JSONSchema

*** 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}
*** 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
 类似资料:
  • 在这里输入image description我有一个如下所示的json模式,我希望根据B和C的值将定义加载到D和E中,为此我已经编写了所有的条件。我使用json-schema-validator在应用程序中进行json模式验证。 javaCode看起来像

  • 考虑到模式和(反)序列化框架的可用性,我认为构建一个能够实现以下功能的系统是很简单的: 它通过HTTP get请求接收输入 将其转换/解析/反序列化为python对象 验证给定公共模式语言描述的python对象 对参数进行一些操作以获取结果数据 将结果数据序列化为JSON 验证结果 归还它 我想使用一种语言不可知的模式语言——任何只在一种语言中使用的语言。我将avro和json模式视为模式语言和(

  • JsonSchema.net是一个从JSON数据自动生成JSON Schema的工具. 模式生成根据 IETF JSON Schema Internet Draft. 草案规范, 此工具包括5个主要功能: 接受JSON输入,并根据此输入生成秒速此JSON输入的JSON Schema Provides a GUI to modify the schema generated with useful

  • 我正在使用Jackson模块的最新分支-jackson-mode-jsonSchema,即2.4.4-Snapshot。 我试图使用@JsonPropertyOrder注释来维护POJO属性的顺序,但它似乎不尊重注释。 我的POJO示例如下- 杰克逊代码如下- Json输出如下- 有人能建议我是否做错了什么,或者我们需要在杰克逊身上打开一个问题,因为我看到这种问题已经在2.3.2(https://

  • 问题内容: 问题已经解决了这里,但没有工作,我(不相同的弹簧引导版本我猜)本 尝试编写自定义约束验证器代码,以在保留之前检查帐户电子邮件是否存在。 // ------------------------------------------------ -------------------------- // --------------------------------------------

  • 问题已经在这里解决了,但对我不起作用(我猜不是同一个Spring启动版本) 尝试编写自定义约束验证器,在持久化之前检查帐户电子邮件是否存在。 // -------------------------------------------------------------------------- // ------------------------------------------------