公安视频图像信息应用系统标准符合性测试研究
2019-07-30公安部第一研究所庄超明
■文/公安部第一研究所 庄超明
关键字:视频图像信息 公安视频图像信息应用系统 标准符合性测试
1 引言
随着大数据及智能分析技术的发展,视频图像在侦查实践中发挥的价值越来越大,这些视频图像信息存在于各个相对独立的应用系统中。由于没有统一的标准,各厂商实现的应用系统存储的视频图像信息格式不统一,上下级公安机关没有统一的接口,导致系统间的视频图像数据无法共享应用,严重制约警务机制的创新。为解决上述问题,GA/T 1400《公安视频图像信息应用系统》标准于2017年5月正式批准发布。
标准发布后,已有多家安防厂商开始对系统进行标准符合性升级改造。但由于没有配套的标准检测工具,各厂商对标准的理解可能存在差异,在实际建设中各厂商的系统对接存在诸多问题。本文对1400标准符合性的测试方法进行研究,并在此基础上实现了一个测试工具。
2 标准符合性测试内容
1400标准规定了标准体系中的各个实体组成,每个实体对外提供的服务采用REST架构进行定义。每个服务由REST资源标识符和HTTP请求方法唯一标识。访问服务传递的参数和接收的返回值采用JSON格式来描述。为保证数据的有效性,标准对传递的JSON消息各个属性的取值范围作了要求。
2.1 REST架构
REST是一种采用统一方式将所有信息抽象为资源来创建服务的方法,任何能够被命名的信息都能够作为一个资源,是一种组织WEB服务的架构。REST使用一个资源标识符(URI)来标识组件之间交互所涉及到的特定资源,每个REST服务对应一个资源标识符。REST系统中所传递的消息包含了消息如何被处理的信息,如按XML来解析或者按JSON来解析;也包含了如何操作资源的信息,如增加、删除和修改等。REST操作资源通过HTTP方法来实现,见表1。
表1 REST操作与HTTP方法对应表
2.2 JSON格式
JSON是指 JavaScript 对象表示法,是一种轻量级的数据交换格式。常见的JSON类型为对象和数组。其中,对象是一个无序的键值对集合,以“{”开始,“}”结束。每个键后跟一个“.”,键值对之间使用“,”分隔。数组以“[”开始,“]”结束,由多个对象组成,对象间以“,”分隔。1400标准在此基础上对JSON格式进行了扩展,在对象和数组外面又加了一层对象描述信息,其格式分别如图1(a)和图1(b)所示。
图1 1400标准中对象和数组JSON格式
2.3 测试内容
根据以上分析,本文将1400标准符合性测试内容分为以下部分:REST资源标识符、HTTP方法、请求消息体JSON格式和请求消息各属性的取值范围。
3 测试工具设计与实现
3.1 总体流程
测试时工具一般要根据情况作为上级或者下级对被测系统进行测试,两者的流程和实现原理类似。根据测试内容,本文给出测试工具作为上级时的流程设计,如图2所示。
图2 工具总体流程图
资源标识符校验用于检查被测系统发请求时指定的访问资源的标识是否与标准规定的资源路径一致,如果不一致会返回404 Not Found的失败信息。
请求方法校验用于检查被测系统发请求时指定的HTTP方法是否与标准规定的对资源进行该操作时所用的方法一致,如果不一致会返回405 Method Not Allowed的失败信息。
JSON消息体校验模块用于检查被测系统发请求时携带的消息体是否是标准要求的JSON格式。不符合要求时会返回400 Bad Request的失败信息。
消息取值范围校验模块用于检查被测系统发出的消息中各个属性的取值范围是否在标准限定的范围内,不符合时会返回400 Bad Request的失败信息。
展示验证结果用于将测试的结果实时展示给使用测试工具的用户,成功以绿色字体显示,失败以红色字体显示,失败时还会显示不符合标准的具体信息。
3.2 JSON消息体校验设计
JSON消息校验分两部分,首先检查是否为格式良好的JSON消息,内容如下:
(1)以键值对的形式出现,键值对之间用逗号分隔,键与值之间用冒号分隔;
(2)大括号、方括号、双引号成对出现;
(3)大小写敏感;
(4)对象与对象或数组之间正确嵌套。
其次检查是否符合1400扩展的JSON格式,流程如下:
(1)工具先根据标准定义正确的消息对象的对象名和各个属性名及属性对应的数据类型,并定义好接收消息的处理函数。
(2)工具收到消息后,根据请求资源路径找到对应的处理函数,如果接收的是单个对象,执行(3),如果是集合,执行(4)。
(3)解析请求消息得到最外层的键和值,根据键名从正确对象消息集合中找到名字一样的对象,比较该对象各个属性名与值中各个键名是否一致。如一致,通过检查;否则,将记录不一致的地方提示用户。
(4)解析请求消息次外层的键和值,根据键名从正确对象消息集合中找到名字一样的对象,比较该对象各个属性名与值中每个元素内部的各个键名是否一致。如一致,通过检查;否则,将记录不一致的地方提示用户。
3.3 消息取值范围校验设计
JSON消息经过校验后,会转换成测试工具识别的对象。1400标准定义了34个系统间消息交互时传递的对象,这些对象中有部分属性的取值范围约束是一样的,如果每个接口都对接收的对象做一遍取值范围校验,会存在大量的重复程序。针对这个问题,本文采用如下方法:对各个对象的每个属性打一个标签,每个标签绑定一个校验类,取值范围一样的属性对应的标签及校验类也一样。在消息的入口处统一进行校验,校验时不针对具体对象,只针对对象中的每个属性进行校验。JSON消息转成对象后,遍历对象的每个属性,找到属性上标签对应的校验类,对该属性对应的值进行校验。其流程如图3所示。
图3 取值范围校验流程
3.4 测试工具实现
图4 测试工具逻辑结构
测试工具采用B/S架构实现,系统逻辑结构见图4。工具采用Servlet技术中的Filter实现对请求消息标准符合性校验的统一处理。Filter处于客户端与服务器之间,主要用于对请求进行预处理。多个Filter之间采用链表形式串联起来,协同工作。Filter中的Request对象可以方便地获得REST请求的资源标识和HTTP方法,并进行校验。
JSON格式校验采用Jackson-databind实现,Jackson-databind是一个高效处理JSON格式的类库。通过对其主处理类Object Mapper的二次开发,可以根据标准的要求自定义JSON与对象的转换关系,完成对JSON格式的校验。
取值范围校验采用Hibernate-validator实现,Hibernate-validator提供了一套完善的针对输入参数的校验框架,内置了一些常用的校验类,也可根据框架实现validator的接口,自定义需要的校验类,完成对取值范围的校验。
图5 测试结果
4 实验
根据测试内容,按照1400标准分别构造正常的和异常的测试数据,通过HTTP发往测试工具的REST接口。测试用例如下:
(1)标准要求注册接收地址为/VIID/System/Register,构造注册请求发往/VIID/System/Register1,预期工具提示404请求地址不对。
(2)标准要求发送注册消息的HTTP方法为POST,构造注册请求,采用PUT方法发送,预期工具提示405请求方法不支持。
(3)按标准要求构造好请求消息体后,在JSON中多加一个{,发往测试工具,预期工具提示400请求消息JSON格式错误。
(4)标准要求人员的性别取值范围为0、1、2、9,构造请求时将性别的值改成11,发往测试工具,预期工具提示400取值范围不符合标准要求。
(5)构造一个符合标准的请求发往测试工具,预期工具提示测试通过。
测试结果如图5所示。测试结果表明,测试工具能够正确识别不符合1400标准的REST请求,并给出相应的提示。
5 结语
本文针对GA/T 1400《公安视频图像信息应用系统》标准符合性测试提出了测试工具的设计方案,并根据方案实现测试工具。对测试工具的实验结果表明设计方案具备可行性。目前,测试工具的每一项测完都需要人工干预进行下一项测试,在未来的工作中将逐步实现测试工具的自动化。