摘要:隨著瀏覽器技術(shù)的迭代更新,文檔對象技術(shù)在一些主流瀏覽器版本中不再受支持,前期設(shè)計(jì)的輕量級接口自動(dòng)化測試框架中結(jié)果統(tǒng)計(jì)分析與展示模塊因而功能不能正常使用?;诖?,本文對前期設(shè)計(jì)的輕量級接口自動(dòng)化測試框架做了一定的設(shè)計(jì)優(yōu)化,將用于記錄測試用例及結(jié)果的XML文件結(jié)構(gòu)設(shè)計(jì)優(yōu)化為MySQL數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì),將測試執(zhí)行模塊寫數(shù)據(jù)入XML文件優(yōu)化為寫數(shù)據(jù)庫表,將結(jié)果統(tǒng)計(jì)分析與展示模塊由前端JS讀取XML文件數(shù)據(jù)優(yōu)化為后端JSP讀取數(shù)據(jù)庫表數(shù)據(jù)。經(jīng)驗(yàn)證測試,優(yōu)化后的測試框架不再受文檔對象技術(shù)的限制,實(shí)用性更佳,能在較主流的幾款瀏覽器中正常使用,是一種有效的技術(shù)替代方案。
關(guān)鍵詞:自動(dòng)化測試框架;設(shè)計(jì)優(yōu)化;動(dòng)態(tài)Web技術(shù);JSP;MySQL
中圖分類號 TP311? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)08-0212-03
Abstract: With the iterative update of technology, document object technology is no longer supported in some browsers, thus the function of the statistical analysis and presentation module in the interface automation test framework designed in the early stage is affected. Based on this, this paper made some optimization for the automation test framework, such as with MySQL database table structure design replacing the XML file, with writing data into database table replacing into file, with reading data from database table by back-end JSP replacing from file by front-end JS. The optimized test framework is no longer limited by browser document object technology and has better usability, could be used in a few more mainstream browsers and is an effective technical alternative.
Key words: automation test framework; design optimization; dynamical Web technology; JSP; MySQL
前期針對某后端服務(wù)產(chǎn)品接口多、內(nèi)部處理邏輯復(fù)雜且版本迭代頻繁的情況,為了實(shí)現(xiàn)短時(shí)間快速測試,基于面向?qū)ο蠹夹g(shù)、Web開發(fā)技術(shù)等設(shè)計(jì)并實(shí)現(xiàn)了一套較實(shí)用的輕量級接口自動(dòng)化測試框架[1]。該框架由兩大部分組成,一是基于面向?qū)ο蠹夹g(shù)和XML文檔DOM開發(fā)等技術(shù)的自動(dòng)化測試執(zhí)行模塊,主要實(shí)現(xiàn)了對測試數(shù)據(jù)批量配置、測試腳本設(shè)計(jì)、測試腳本批量執(zhí)行以及自動(dòng)生成XML格式的測試結(jié)果數(shù)據(jù)文件。另一部分是集XML、HTML、CSS和JS等集成開發(fā)技術(shù)的測試結(jié)果統(tǒng)計(jì)分析與展示模塊,主要實(shí)現(xiàn)對測試結(jié)果文件內(nèi)數(shù)據(jù)的統(tǒng)計(jì)分析并以Web頁面形式作個(gè)性化展示。在瀏覽器支持文檔對象技術(shù)的情況下,該框架能表現(xiàn)出較好的實(shí)用性。但隨著瀏覽器版本的迭代,文檔對象技術(shù)不再受支持,如Microsoft Edge 84.0.522.52和Firefox 78.0b6,因此該框架部分功能無法正常使用。為了解決該問題,本文對該框架作了技術(shù)優(yōu)化,將用于記錄測試用例及結(jié)果等數(shù)據(jù)的XML文件設(shè)計(jì)改為MySQL數(shù)據(jù)庫表設(shè)計(jì)[2-3],將測試執(zhí)行模塊寫數(shù)據(jù)入XML文件改為寫入數(shù)據(jù)庫表,將結(jié)果統(tǒng)計(jì)分析與展示模塊由前端JS讀取XML文件數(shù)據(jù)改為后端JSP[4]讀取數(shù)據(jù)庫表數(shù)據(jù)。優(yōu)化后自動(dòng)化測試框架的結(jié)果統(tǒng)計(jì)分析與展示模塊功能在Microsoft Edge 84.0.522.52、Google Chrome 84.0.4147.105和Firefox 78.0b6等幾款主流瀏覽器新版中可正常使用,是一種較好的替代方案。
1 優(yōu)化前后整體設(shè)計(jì)對比
優(yōu)化前,整套測試框架部署在客戶端。在客戶端Eclipse平臺執(zhí)行測試執(zhí)行模塊,測試執(zhí)行模塊中以接口為單位對測試用例作分類設(shè)計(jì)與實(shí)現(xiàn),測試執(zhí)行時(shí)以一個(gè)接口為一個(gè)測試集分類執(zhí)行各測試用例,并將測試用例及結(jié)果等數(shù)據(jù)按測試集分類寫入本地XML文件。測試執(zhí)行結(jié)束后,在本地瀏覽器中打開HTML文件,加載本地的CSS文件,通過本地JS文件腳本讀取XML文件做統(tǒng)計(jì)分析并動(dòng)態(tài)更新HTML文件內(nèi)容實(shí)現(xiàn)個(gè)性化展示。
優(yōu)化后整套框架分前端客戶端程序、后端MySQL數(shù)據(jù)庫服務(wù)和后端Web動(dòng)態(tài)JSP頁面服務(wù)[5]。與優(yōu)化前一致,前端客戶端執(zhí)行測試執(zhí)行模塊,區(qū)別是將測試用例及結(jié)果等數(shù)據(jù)寫入后端MySQL服務(wù)器數(shù)據(jù)庫表,測試執(zhí)行結(jié)束后,在前端瀏覽器中訪問部署在遠(yuǎn)程Web服務(wù)器上的動(dòng)態(tài)JSP頁面來瀏覽測試結(jié)果及數(shù)據(jù),JSP頁面訪問MySQL數(shù)據(jù)庫,對表中數(shù)據(jù)做統(tǒng)計(jì)分析,并與CSS結(jié)合實(shí)現(xiàn)樣式個(gè)性化展示。CSS文件與優(yōu)化前一致。優(yōu)化后接口自動(dòng)化測試框架部署如圖1所示。
2 優(yōu)化前后具體設(shè)計(jì)實(shí)現(xiàn)對比
2.1 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)
優(yōu)化前,以XML文件存儲(chǔ)測試用例及結(jié)果數(shù)據(jù)。XML文件根元素包含各測試集元素,一個(gè)測試集元素對應(yīng)一個(gè)接口,以接口名作為測試集元素的唯一性標(biāo)識屬性,測試集元素下包含與該接口對應(yīng)的所有測試用例元素,以測試用例名作為測試用例元素的唯一性屬性標(biāo)識,測試用例元素下包含該測試用例所對應(yīng)的接口請求數(shù)據(jù)元素、接口響應(yīng)數(shù)據(jù)元素、接口測試結(jié)果元素。
優(yōu)化后,數(shù)據(jù)庫表及字段設(shè)計(jì)與優(yōu)化前的XML文件數(shù)據(jù)結(jié)構(gòu)相對應(yīng),包括測試集表和測試用例表。測試集表包含主鍵唯一自增id字段和testSuiteId字段。其中testSuiteId字段用于存儲(chǔ)測試集名,對應(yīng)優(yōu)化前XML文件中測試集元素的唯一性標(biāo)識屬性。測試用例表用于存儲(chǔ)各測試集下的測試用例及其與測試集表中某測試集的關(guān)聯(lián)關(guān)系,包含主鍵唯一自增id字段、testCaseId字段、testSuite_id字段、reqStr字段、resStr字段、result字段。testCaseId字段表示測試用例名,對應(yīng)優(yōu)化前測試用例元素的唯一性屬性標(biāo)識。testSuite_id字段表示該測試用例所屬測試集,與測試集表中id字段關(guān)聯(lián)。reqStr字段、resStr字段、result字段表示某測試用例對應(yīng)的接口請求數(shù)據(jù)、接口響應(yīng)數(shù)據(jù)、接口測試結(jié)果。result字段值為Pass表示該測試用例接口功能測試成功,F(xiàn)ail表示該測試用例接口功能測試失敗。MySQL索引的合理創(chuàng)建可提高數(shù)據(jù)庫表數(shù)據(jù)的查詢檢索速度,創(chuàng)建索引時(shí),需確保該索引是應(yīng)用在 SQL 查詢語句的條件[6]。對測試用例集表數(shù)據(jù)做統(tǒng)計(jì)分析時(shí),需要匯總統(tǒng)計(jì)每個(gè)測試集下所有測試用例并統(tǒng)計(jì)其中成功的用例數(shù)和失敗的用例數(shù),統(tǒng)計(jì)查詢條件是testSuite_id字段和result字段,因此,對testSuite_id字段和result字段創(chuàng)建復(fù)合索引,從而提高統(tǒng)計(jì)查詢執(zhí)行速率。復(fù)合索引只有在字段順序與查詢條件順序一致時(shí)才有效果,因此,兩個(gè)字段在復(fù)合索引中的次序與統(tǒng)計(jì)分析模塊中對數(shù)據(jù)庫表的查詢條件次序一致。
2.2 測試執(zhí)行模塊設(shè)計(jì)優(yōu)化與實(shí)現(xiàn)
優(yōu)化前,測試執(zhí)行模塊在執(zhí)行前新建XML文件并獲取文檔根元素,在每個(gè)測試集執(zhí)行前以接口名為測試集元素唯一性屬性,將測試集元素作為文檔根元素的子元素寫入文件,在測試集下每個(gè)測試用例執(zhí)行前以測試用例名為測試用例元素唯一性屬性,以該測試用例對應(yīng)的接口請求數(shù)據(jù)、響應(yīng)數(shù)據(jù)、測試結(jié)果分別作為該測試用例元素的三個(gè)子元素,將該測試用例元素作為其所屬測試集元素的子元素寫入文件。
優(yōu)化后,在.properties屬性文件中配置MySQL數(shù)據(jù)庫訪問配置信息。測試執(zhí)行模塊在執(zhí)行前,讀取配置文件中數(shù)據(jù)庫訪問配置并建立MySQL數(shù)據(jù)庫靜態(tài)連接[8]。在每個(gè)測試集執(zhí)行前以接口名為testSuiteId字段值,用數(shù)據(jù)庫靜態(tài)連接向測試集表插入一行數(shù)據(jù)。在每個(gè)測試用例執(zhí)行前以測試用例名作為testCaseId字段值、以該測試用例所屬測試集在測試集表中的id字段值作為testSuite_id字段值、以對應(yīng)接口請求數(shù)據(jù)、響應(yīng)數(shù)據(jù)、測試結(jié)果分別作為reqStr字段值、resStr字段值、result字段值,向測試用例表插入一行數(shù)據(jù)。測試執(zhí)行過程中,測試集表中將收集并存儲(chǔ)所有接口的接口名,測試用例表中將收集并存儲(chǔ)每個(gè)測試集下的所有測試用例。所有測試執(zhí)行結(jié)束后,關(guān)閉數(shù)據(jù)庫連接。
2.3 結(jié)果統(tǒng)計(jì)分析與展示模塊設(shè)計(jì)優(yōu)化與實(shí)現(xiàn)
優(yōu)化前,結(jié)果統(tǒng)計(jì)分析與展示模塊由HTML文件、CSS文件、JS文件和XML文件構(gòu)成,全部在前端客戶端部署并執(zhí)行。XML文件是數(shù)據(jù)源。HTML文件定義結(jié)果展示主界面整體布局,主要由概要區(qū)、結(jié)果匯總區(qū)、結(jié)果細(xì)節(jié)區(qū)構(gòu)成,概要區(qū)以表格形式展示測試用例總數(shù)、用例成功總數(shù)和用例失敗總數(shù)。結(jié)果匯總區(qū)以表格形式展示各測試集名及其下所含測試用例總數(shù)、用例成功總數(shù)和用例失敗總數(shù),其中測試集名為超鏈接。結(jié)果細(xì)節(jié)區(qū)默認(rèn)隱藏,點(diǎn)擊某個(gè)測試集名超鏈接后,結(jié)果細(xì)節(jié)區(qū)顯現(xiàn)且以表格形式顯示該測試集下所有測試用例及結(jié)果詳情。主界面整體層疊樣式通過引入CSS文件定義,部分樣式及子區(qū)域通過引入的JS文件根據(jù)統(tǒng)計(jì)結(jié)果作個(gè)性化動(dòng)態(tài)更新,各區(qū)內(nèi)的數(shù)據(jù)通過JS腳本根據(jù)對XML文件數(shù)據(jù)做統(tǒng)計(jì)分析后的結(jié)果作動(dòng)態(tài)更新。前端客戶端瀏覽器訪問HTML文件,以個(gè)性化Web頁面的形式查看所有測試集下的匯總結(jié)果以及每個(gè)測試集下所有測試用例及結(jié)果詳情。
優(yōu)化后,統(tǒng)計(jì)分析與展示模塊由后端MySQL數(shù)據(jù)庫表和后端基于JSP文件與CSS文件的動(dòng)態(tài)Web服務(wù)構(gòu)成。前端瀏覽器中訪問后端Web服務(wù)主界面JSP文件查看測試結(jié)果。統(tǒng)計(jì)分析與展示模塊與測試執(zhí)行模塊共用測試框架數(shù)據(jù)庫表,測試執(zhí)行模塊將測試集和測試用例及結(jié)果等數(shù)據(jù)寫入數(shù)據(jù)庫表,統(tǒng)計(jì)分析與展示模塊讀取數(shù)據(jù)庫表數(shù)據(jù)做統(tǒng)計(jì)分析。JSP文件分主界面JSP文件和結(jié)果細(xì)節(jié)JSP文件。主界面JSP文件中定義的整體布局與優(yōu)化前HTML文件中定義的基本一致,唯一區(qū)別是結(jié)果細(xì)節(jié)區(qū)不再在主界面下方顯示,而是以彈出新頁面的方式跳轉(zhuǎn)到結(jié)果細(xì)節(jié)JSP文件。主界面整體層疊樣式的處理機(jī)制與優(yōu)化前一致。主界面概要區(qū)、結(jié)果匯總區(qū)各表格數(shù)據(jù)通過JSP腳本訪問數(shù)據(jù)庫表經(jīng)統(tǒng)計(jì)查詢后作動(dòng)態(tài)更新。查詢測試用例表中用例總數(shù)、用例成功數(shù)、用例失敗數(shù),并更新概要區(qū)表格數(shù)據(jù)。查詢測試集表中所有測試集,以一個(gè)測試集為一行,在結(jié)果匯總區(qū)表格中增加各測試集行,在測試用例表中根據(jù)測試用例表與測試集表的關(guān)聯(lián)字段testSuite_id以及result字段查詢各測試集下的用例總數(shù)、用例成功數(shù)、用例失敗數(shù),并更新結(jié)果匯總區(qū)表格數(shù)據(jù)。
結(jié)果細(xì)節(jié)JSP文件主要包括結(jié)果細(xì)節(jié)區(qū),在結(jié)果細(xì)節(jié)區(qū)以表格形式顯示某測試集下的所有測試用例細(xì)節(jié)信息。在主界面結(jié)果匯總區(qū)點(diǎn)擊某個(gè)測試集名超鏈接跳轉(zhuǎn)到結(jié)果細(xì)節(jié)JSP文件時(shí),將測試集名在測試框架數(shù)據(jù)庫測試集表中對應(yīng)的id字段值作參數(shù)傳入。結(jié)果細(xì)節(jié)JSP文件根據(jù)傳入的測試集id字段值查詢屬于該測試集的所有測試用例,以一條用例為一行,在結(jié)果細(xì)節(jié)區(qū)表格中增加各測試用例行,并將測試用例名、請求串?dāng)?shù)據(jù)、響應(yīng)串?dāng)?shù)據(jù)、用例執(zhí)行結(jié)果更新到結(jié)果細(xì)節(jié)區(qū)表格。
3 優(yōu)化前后結(jié)果統(tǒng)計(jì)分析與展示模塊頁面效果對比
優(yōu)化前,測試框架中結(jié)果展示主界面在Firefox 67.0b9版瀏覽器中正常加載后概要區(qū)和結(jié)果匯總區(qū)顯示效果如圖2所示。
優(yōu)化前,測試框架中結(jié)果展示主界面在Firefox 78.0b6版瀏覽器中無法正常加載時(shí)概要區(qū)和結(jié)果匯總區(qū)顯示異常效果如圖3所示。
優(yōu)化后,在瀏覽器中訪問測試框架中部署在遠(yuǎn)程Web服務(wù)上的主界面JSP文件,主界面JSP概要區(qū)和結(jié)果匯總區(qū)在新版Firefox 78.0b6瀏覽器中可正常顯示,顯示效果與圖2一致。點(diǎn)擊某個(gè)測試集名后彈出的新頁面中結(jié)果細(xì)節(jié)區(qū)顯示效果如圖4所示。
4 結(jié)語
隨著瀏覽器技術(shù)的迭代更新,文檔對象技術(shù)不再受支持,前期設(shè)計(jì)的接口自動(dòng)化測試框架中部分功能使用受到影響。為了解決該問題,本文對該自動(dòng)化測試框架做了設(shè)計(jì)優(yōu)化,將用于數(shù)據(jù)存儲(chǔ)的XML文件以MySQL數(shù)據(jù)庫表代替,將測試執(zhí)行模塊寫XML文件改為寫數(shù)據(jù)庫表,將結(jié)果統(tǒng)計(jì)分析與展示模塊由前端JS讀取XML文件數(shù)據(jù)改為后端JSP讀取數(shù)據(jù)庫表數(shù)據(jù)。優(yōu)化后的測試框架能在Microsoft Edge 84.0.522.52、Google Chrome 84.0.4147.105和Firefox 78.0b6等中正常使用,有更好的實(shí)用性和瀏覽器版本兼容性。
參考文獻(xiàn):
[1] 孫立哲.輕量級接口自動(dòng)化測試框架設(shè)計(jì)與實(shí)踐[J].計(jì)算機(jī)應(yīng)用與軟件,2020,37(1):27-30,36.
[2] Oracle. MySQL Reference Manual[EB/OL]. https://dev.mysql.com/doc/refman/5.6/en/column-indexes.html.
[3] 唐漢明.深入淺出MySQL[M].北京:人民郵電出版社,2014.
[4] Oracle. JavaServer Pages Technology [EB/OL].https://www.oracle.com/java/technologies/jspt.html.
[5] 陳丹丹.JSP項(xiàng)目開發(fā)全程實(shí)錄[M].北京:清華大學(xué)出版社,2013.
[6] Baron S,Peter Z,Vadim T. 高性能MySQL[M]. 寧海元,周振興,彭立勛,等譯. 北京:電子工業(yè)出版社,2013:141-193.
[7] 黃威,聶藩,丁建完.關(guān)鍵字驅(qū)動(dòng)的測試自動(dòng)化框架模型與系統(tǒng)實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(4):57-60,64.
[8] Cay S Horstmann. Java核心技術(shù)[M]. 11版.林琪,蘇玨涵,等,譯.北京:機(jī)械工業(yè)出版社,2019.
【通聯(lián)編輯:梁書】