JSON Schema验证休息保证
最后修改:3月21日,2020年3月21日
1.概述
休息保证的库提供了用于测试REST API的支持,通常以JSON格式。
可能需要不时,在不详细分析响应的情况下,首先知道JSON Body是否符合某种JSON格式。
在这个快速的教程中,我们会看看如何我们可以根据预定义的JSON架构验证JSON响应。
2.设置
初始休息保证的设置与我们的上一篇文章。
此外,我们还需要包括JSON-架构验证器模块在pom.xml.文件:
<依赖项> IO.REST-SEARIZED GROUPID> JSON-SCHEMA-VALIDATOR ARTIFACTID> 3.3.0 version> test scope> 依赖项>
要确保您拥有最新版本,请执行以下操作这个链接。
3.JSON模式验证
让我们来看看一个例子。
作为JSON模式,我们将使用名为的文件中保存的JSONevent_0.json,它在类路径中存在:
{“ID”:“390”,“数据”:{“LeagueID”:35,“Hometeam”:“挪威”,“VisitingTeam”:“英格兰”,},“赔率”:[{“价格”:“1.30“,”名称“:”1“},{”价格“:”5.25“,”名称“:”X“}”}
然后假设这是REST API返回的所有数据的通用格式,我们可以检查JSON响应的一致性,如下所示:
@Test public void givenurl_whenjsonresponseconformstoschema_threct () {get("/events?id=390").then().assertThat() .body(matchesJsonSchemaInClasspath("event_0.json"));}
注意,我们仍然会静态导入matchesjsonschemainclasspath.从io.RestAssured.module.jsv.jsonschemavalidator。
4. JSON架构验证设置
4.1。验证响应
这JSON-架构验证器通过定义自己的自定义配置规则,休息模块使我们能够通过定义自己的自定义配置规则来执行细粒度验证。
假设我们希望我们的验证始终使用JSON架构版本4:
@test public void giventurl_whenvalidatesResponseWithInstanceTings_thencorChemafactory = jsonschemafactory.newbuilder().setvalidationConfiguration(validationConfiguration.newbuilder().setdefaultversion(stemaversion.draftv4).freeze()).freeze();获取(“/事件?ID = 390”)。然后()。serrthat().body(matchesjsonschemainclasspath(“event_0.json”).using(Jsonschemafactory));}
我们可以用Jsonschemafactory.并指定版本4架构并断言它正在使用该请求时使用该模式。
4.2。检查验证
默认情况下,JSON-架构验证器在JSON响应字符串上运行检查的验证。这意味着如果架构定义赔率作为一个阵列,如下json:
{“赔率”:[{“价格”:“1.30”,“名称”:“1”},{“价格”:“5.25”,“名称”:“X”}“}
然后验证器将始终期待数组作为值赔率,因此在哪里回应赔率是一个细绳将失败验证。因此,如果我们希望与我们的回复不那么严格,我们可以通过首先制作以下静态导入,在验证期间添加自定义规则:
io.RestAssured.Module.jsv.jsonschemavalidatoretings.settings;
然后使用验证检查设置执行测试假:
@test public void geturl_whenvalidatesresponsewithstaticestings_thencorrect(){get(“/事件?id = 390”)。然后()。sharertthat()。body(matchesjsonschemainclasspath(matchesjsonschemainclasspath(“event_0.json”)。使用(settings()。with()。checkedvalidation(错误的)));}
4.3。全局验证配置
这些自定义非常灵活,但随着大量的测试,我们必须为每个测试定义验证,这是麻烦的,而不是非常可维护。
避免这种情况,我们可以自由地只定义一次配置,并将其应用于所有测试。
我们将配置要取消选中的验证,并始终将其针对JSON架构版本3:
jsonschemafactory factory = jsonschemafactory.newbuilder().setvalidationConfiguration(validationConfiguration.newBuilder().setDefaultVersion(SequileAversion.Draftv3).Freeze())。Freeze();jsonschemavalidator.settings = settings().with()。Jsonschemafactory(工厂)。和()。与()。checkedvalidation(false);
然后删除此配置调用重置方法:
JsonSchemaValidator.reset ();
结论
在本文中,我们已经示出了在使用休息时,我们如何通过验证时验证架构的JSON响应。
与始终一样,可以使用该示例的完整源代码在GitHub。