■文/公安部第一研究所 莊超明
關(guān)鍵字:視頻圖像信息 公安視頻圖像信息應(yīng)用系統(tǒng) 標(biāo)準(zhǔn)符合性測(cè)試
隨著大數(shù)據(jù)及智能分析技術(shù)的發(fā)展,視頻圖像在偵查實(shí)踐中發(fā)揮的價(jià)值越來越大,這些視頻圖像信息存在于各個(gè)相對(duì)獨(dú)立的應(yīng)用系統(tǒng)中。由于沒有統(tǒng)一的標(biāo)準(zhǔn),各廠商實(shí)現(xiàn)的應(yīng)用系統(tǒng)存儲(chǔ)的視頻圖像信息格式不統(tǒng)一,上下級(jí)公安機(jī)關(guān)沒有統(tǒng)一的接口,導(dǎo)致系統(tǒng)間的視頻圖像數(shù)據(jù)無法共享應(yīng)用,嚴(yán)重制約警務(wù)機(jī)制的創(chuàng)新。為解決上述問題,GA/T 1400《公安視頻圖像信息應(yīng)用系統(tǒng)》標(biāo)準(zhǔn)于2017年5月正式批準(zhǔn)發(fā)布。
標(biāo)準(zhǔn)發(fā)布后,已有多家安防廠商開始對(duì)系統(tǒng)進(jìn)行標(biāo)準(zhǔn)符合性升級(jí)改造。但由于沒有配套的標(biāo)準(zhǔn)檢測(cè)工具,各廠商對(duì)標(biāo)準(zhǔn)的理解可能存在差異,在實(shí)際建設(shè)中各廠商的系統(tǒng)對(duì)接存在諸多問題。本文對(duì)1400標(biāo)準(zhǔn)符合性的測(cè)試方法進(jìn)行研究,并在此基礎(chǔ)上實(shí)現(xiàn)了一個(gè)測(cè)試工具。
1400標(biāo)準(zhǔn)規(guī)定了標(biāo)準(zhǔn)體系中的各個(gè)實(shí)體組成,每個(gè)實(shí)體對(duì)外提供的服務(wù)采用REST架構(gòu)進(jìn)行定義。每個(gè)服務(wù)由REST資源標(biāo)識(shí)符和HTTP請(qǐng)求方法唯一標(biāo)識(shí)。訪問服務(wù)傳遞的參數(shù)和接收的返回值采用JSON格式來描述。為保證數(shù)據(jù)的有效性,標(biāo)準(zhǔn)對(duì)傳遞的JSON消息各個(gè)屬性的取值范圍作了要求。
REST是一種采用統(tǒng)一方式將所有信息抽象為資源來創(chuàng)建服務(wù)的方法,任何能夠被命名的信息都能夠作為一個(gè)資源,是一種組織WEB服務(wù)的架構(gòu)。REST使用一個(gè)資源標(biāo)識(shí)符(URI)來標(biāo)識(shí)組件之間交互所涉及到的特定資源,每個(gè)REST服務(wù)對(duì)應(yīng)一個(gè)資源標(biāo)識(shí)符。REST系統(tǒng)中所傳遞的消息包含了消息如何被處理的信息,如按XML來解析或者按JSON來解析;也包含了如何操作資源的信息,如增加、刪除和修改等。REST操作資源通過HTTP方法來實(shí)現(xiàn),見表1。
表1 REST操作與HTTP方法對(duì)應(yīng)表
JSON是指 JavaScript 對(duì)象表示法,是一種輕量級(jí)的數(shù)據(jù)交換格式。常見的JSON類型為對(duì)象和數(shù)組。其中,對(duì)象是一個(gè)無序的鍵值對(duì)集合,以“{”開始,“}”結(jié)束。每個(gè)鍵后跟一個(gè)“.”,鍵值對(duì)之間使用“,”分隔。數(shù)組以“[”開始,“]”結(jié)束,由多個(gè)對(duì)象組成,對(duì)象間以“,”分隔。1400標(biāo)準(zhǔn)在此基礎(chǔ)上對(duì)JSON格式進(jìn)行了擴(kuò)展,在對(duì)象和數(shù)組外面又加了一層對(duì)象描述信息,其格式分別如圖1(a)和圖1(b)所示。
圖1 1400標(biāo)準(zhǔn)中對(duì)象和數(shù)組JSON格式
根據(jù)以上分析,本文將1400標(biāo)準(zhǔn)符合性測(cè)試內(nèi)容分為以下部分:REST資源標(biāo)識(shí)符、HTTP方法、請(qǐng)求消息體JSON格式和請(qǐng)求消息各屬性的取值范圍。
測(cè)試時(shí)工具一般要根據(jù)情況作為上級(jí)或者下級(jí)對(duì)被測(cè)系統(tǒng)進(jìn)行測(cè)試,兩者的流程和實(shí)現(xiàn)原理類似。根據(jù)測(cè)試內(nèi)容,本文給出測(cè)試工具作為上級(jí)時(shí)的流程設(shè)計(jì),如圖2所示。
圖2 工具總體流程圖
資源標(biāo)識(shí)符校驗(yàn)用于檢查被測(cè)系統(tǒng)發(fā)請(qǐng)求時(shí)指定的訪問資源的標(biāo)識(shí)是否與標(biāo)準(zhǔn)規(guī)定的資源路徑一致,如果不一致會(huì)返回404 Not Found的失敗信息。
請(qǐng)求方法校驗(yàn)用于檢查被測(cè)系統(tǒng)發(fā)請(qǐng)求時(shí)指定的HTTP方法是否與標(biāo)準(zhǔn)規(guī)定的對(duì)資源進(jìn)行該操作時(shí)所用的方法一致,如果不一致會(huì)返回405 Method Not Allowed的失敗信息。
JSON消息體校驗(yàn)?zāi)K用于檢查被測(cè)系統(tǒng)發(fā)請(qǐng)求時(shí)攜帶的消息體是否是標(biāo)準(zhǔn)要求的JSON格式。不符合要求時(shí)會(huì)返回400 Bad Request的失敗信息。
消息取值范圍校驗(yàn)?zāi)K用于檢查被測(cè)系統(tǒng)發(fā)出的消息中各個(gè)屬性的取值范圍是否在標(biāo)準(zhǔn)限定的范圍內(nèi),不符合時(shí)會(huì)返回400 Bad Request的失敗信息。
展示驗(yàn)證結(jié)果用于將測(cè)試的結(jié)果實(shí)時(shí)展示給使用測(cè)試工具的用戶,成功以綠色字體顯示,失敗以紅色字體顯示,失敗時(shí)還會(huì)顯示不符合標(biāo)準(zhǔn)的具體信息。
JSON消息校驗(yàn)分兩部分,首先檢查是否為格式良好的JSON消息,內(nèi)容如下:
(1)以鍵值對(duì)的形式出現(xiàn),鍵值對(duì)之間用逗號(hào)分隔,鍵與值之間用冒號(hào)分隔;
(2)大括號(hào)、方括號(hào)、雙引號(hào)成對(duì)出現(xiàn);
(3)大小寫敏感;
(4)對(duì)象與對(duì)象或數(shù)組之間正確嵌套。
其次檢查是否符合1400擴(kuò)展的JSON格式,流程如下:
(1)工具先根據(jù)標(biāo)準(zhǔn)定義正確的消息對(duì)象的對(duì)象名和各個(gè)屬性名及屬性對(duì)應(yīng)的數(shù)據(jù)類型,并定義好接收消息的處理函數(shù)。
(2)工具收到消息后,根據(jù)請(qǐng)求資源路徑找到對(duì)應(yīng)的處理函數(shù),如果接收的是單個(gè)對(duì)象,執(zhí)行(3),如果是集合,執(zhí)行(4)。
(3)解析請(qǐng)求消息得到最外層的鍵和值,根據(jù)鍵名從正確對(duì)象消息集合中找到名字一樣的對(duì)象,比較該對(duì)象各個(gè)屬性名與值中各個(gè)鍵名是否一致。如一致,通過檢查;否則,將記錄不一致的地方提示用戶。
(4)解析請(qǐng)求消息次外層的鍵和值,根據(jù)鍵名從正確對(duì)象消息集合中找到名字一樣的對(duì)象,比較該對(duì)象各個(gè)屬性名與值中每個(gè)元素內(nèi)部的各個(gè)鍵名是否一致。如一致,通過檢查;否則,將記錄不一致的地方提示用戶。
JSON消息經(jīng)過校驗(yàn)后,會(huì)轉(zhuǎn)換成測(cè)試工具識(shí)別的對(duì)象。1400標(biāo)準(zhǔn)定義了34個(gè)系統(tǒng)間消息交互時(shí)傳遞的對(duì)象,這些對(duì)象中有部分屬性的取值范圍約束是一樣的,如果每個(gè)接口都對(duì)接收的對(duì)象做一遍取值范圍校驗(yàn),會(huì)存在大量的重復(fù)程序。針對(duì)這個(gè)問題,本文采用如下方法:對(duì)各個(gè)對(duì)象的每個(gè)屬性打一個(gè)標(biāo)簽,每個(gè)標(biāo)簽綁定一個(gè)校驗(yàn)類,取值范圍一樣的屬性對(duì)應(yīng)的標(biāo)簽及校驗(yàn)類也一樣。在消息的入口處統(tǒng)一進(jìn)行校驗(yàn),校驗(yàn)時(shí)不針對(duì)具體對(duì)象,只針對(duì)對(duì)象中的每個(gè)屬性進(jìn)行校驗(yàn)。JSON消息轉(zhuǎn)成對(duì)象后,遍歷對(duì)象的每個(gè)屬性,找到屬性上標(biāo)簽對(duì)應(yīng)的校驗(yàn)類,對(duì)該屬性對(duì)應(yīng)的值進(jìn)行校驗(yàn)。其流程如圖3所示。
圖3 取值范圍校驗(yàn)流程
圖4 測(cè)試工具邏輯結(jié)構(gòu)
測(cè)試工具采用B/S架構(gòu)實(shí)現(xiàn),系統(tǒng)邏輯結(jié)構(gòu)見圖4。工具采用Servlet技術(shù)中的Filter實(shí)現(xiàn)對(duì)請(qǐng)求消息標(biāo)準(zhǔn)符合性校驗(yàn)的統(tǒng)一處理。Filter處于客戶端與服務(wù)器之間,主要用于對(duì)請(qǐng)求進(jìn)行預(yù)處理。多個(gè)Filter之間采用鏈表形式串聯(lián)起來,協(xié)同工作。Filter中的Request對(duì)象可以方便地獲得REST請(qǐng)求的資源標(biāo)識(shí)和HTTP方法,并進(jìn)行校驗(yàn)。
JSON格式校驗(yàn)采用Jackson-databind實(shí)現(xiàn),Jackson-databind是一個(gè)高效處理JSON格式的類庫。通過對(duì)其主處理類Object Mapper的二次開發(fā),可以根據(jù)標(biāo)準(zhǔn)的要求自定義JSON與對(duì)象的轉(zhuǎn)換關(guān)系,完成對(duì)JSON格式的校驗(yàn)。
取值范圍校驗(yàn)采用Hibernate-validator實(shí)現(xiàn),Hibernate-validator提供了一套完善的針對(duì)輸入?yún)?shù)的校驗(yàn)框架,內(nèi)置了一些常用的校驗(yàn)類,也可根據(jù)框架實(shí)現(xiàn)validator的接口,自定義需要的校驗(yàn)類,完成對(duì)取值范圍的校驗(yàn)。
圖5 測(cè)試結(jié)果
根據(jù)測(cè)試內(nèi)容,按照1400標(biāo)準(zhǔn)分別構(gòu)造正常的和異常的測(cè)試數(shù)據(jù),通過HTTP發(fā)往測(cè)試工具的REST接口。測(cè)試用例如下:
(1)標(biāo)準(zhǔn)要求注冊(cè)接收地址為/VIID/System/Register,構(gòu)造注冊(cè)請(qǐng)求發(fā)往/VIID/System/Register1,預(yù)期工具提示404請(qǐng)求地址不對(duì)。
(2)標(biāo)準(zhǔn)要求發(fā)送注冊(cè)消息的HTTP方法為POST,構(gòu)造注冊(cè)請(qǐng)求,采用PUT方法發(fā)送,預(yù)期工具提示405請(qǐng)求方法不支持。
(3)按標(biāo)準(zhǔn)要求構(gòu)造好請(qǐng)求消息體后,在JSON中多加一個(gè){,發(fā)往測(cè)試工具,預(yù)期工具提示400請(qǐng)求消息JSON格式錯(cuò)誤。
(4)標(biāo)準(zhǔn)要求人員的性別取值范圍為0、1、2、9,構(gòu)造請(qǐng)求時(shí)將性別的值改成11,發(fā)往測(cè)試工具,預(yù)期工具提示400取值范圍不符合標(biāo)準(zhǔn)要求。
(5)構(gòu)造一個(gè)符合標(biāo)準(zhǔn)的請(qǐng)求發(fā)往測(cè)試工具,預(yù)期工具提示測(cè)試通過。
測(cè)試結(jié)果如圖5所示。測(cè)試結(jié)果表明,測(cè)試工具能夠正確識(shí)別不符合1400標(biāo)準(zhǔn)的REST請(qǐng)求,并給出相應(yīng)的提示。
本文針對(duì)GA/T 1400《公安視頻圖像信息應(yīng)用系統(tǒng)》標(biāo)準(zhǔn)符合性測(cè)試提出了測(cè)試工具的設(shè)計(jì)方案,并根據(jù)方案實(shí)現(xiàn)測(cè)試工具。對(duì)測(cè)試工具的實(shí)驗(yàn)結(jié)果表明設(shè)計(jì)方案具備可行性。目前,測(cè)試工具的每一項(xiàng)測(cè)完都需要人工干預(yù)進(jìn)行下一項(xiàng)測(cè)試,在未來的工作中將逐步實(shí)現(xiàn)測(cè)試工具的自動(dòng)化。