閆耀珍
摘要:接口測試是軟件系統(tǒng)測試非常重要的一個方面。某廣告接口入?yún)⒓俺鰠⒈姸啵槍υ摻涌谶M(jìn)行日常測試時,需要執(zhí)行的測試用例數(shù)量達(dá)到指數(shù)膨脹狀態(tài),且測試用例無法全面覆蓋線上流量場景。在軟件研發(fā)日益敏捷的時代,為了達(dá)到快速測試、場景覆蓋度高這兩大要求,基于unittest、DDT數(shù)據(jù)驅(qū)動測試框架等自動化測試用例組織技術(shù),設(shè)計并實現(xiàn)了一套非常實用的接口Diff自動化測試框架??蚣苤С肿詣訌木€上服務(wù)器拉取所需的測試請求日志數(shù)據(jù),通過在測試、線上兩套環(huán)境中同時回放請求并收集返回結(jié)果,并以優(yōu)美的Web頁面展示測試結(jié)果報告。基于該框架的接口Diff自動化測試,能夠在非常短的時間內(nèi)高效完成日常測試,有效緩解了該廣告產(chǎn)品因迭代頻繁帶來的巨大測試壓力。
關(guān)鍵詞:接口測試;unittest;數(shù)據(jù)驅(qū)動測試;Diff;請求日志
Abstract: Interface testing is a very important aspect of software system testing. Take an advertising interface as an example, there are many input params and output data, when test the interface daily, the number of test cases to be executed reaches an exponential expansion state, and the test cases can not fully cover the online traffic scenarios. In the era of increasingly agile software development, in order to meet the two requirements of rapid testing and high scene coverage, a very practical interface Diff automatic testing framework is designed and implemented based on the automation test case organizing technologies such as unittest and DDT data-driven testing framework. The framework supports automatically pulling the required test request log data from the online server, playing back the request and collecting the returned results in the test and online environments at the same time, and displaying the test result report in a beautiful web page. The interface Diff automatic test based on this framework can efficiently complete the daily test in a short time, and effectively solve the test pressure caused by frequent iterations of the advertising product.
Key words: interface test; unittest; data driven test; Diff; request log
1 背景
隨著現(xiàn)代互聯(lián)網(wǎng)公司之間的競爭越來越激烈,用戶需求也越來越多樣化,對軟件及服務(wù)更新速度和質(zhì)量的要求也越來越高,如何通過加速產(chǎn)品研發(fā)流程,快速滿足用戶需求,使得在競爭加劇的時代贏得用戶的青睞,成為企業(yè)關(guān)心的重要問題之一。舉例來說,某廣告業(yè)務(wù)為提升用戶體驗,間接提升收入,某后臺服務(wù)已經(jīng)達(dá)到了一天上線數(shù)次的頻率,而在這種情況下,測試周期被不斷壓縮,于是對質(zhì)量保障的速度以及質(zhì)量提出了更高的要求。原有的手工回歸測試至少也需要半天甚至更多的時間,并且回歸測試能夠覆蓋的線上場景也非常有限,經(jīng)常發(fā)生由于某個場景沒有測試覆蓋,導(dǎo)致出現(xiàn)線上問題,影響用戶體驗甚至收入。手工測試已不能滿足業(yè)務(wù)迭代需求,測試同學(xué)面臨兩個問題:一是如何使得接口測試變得更快,二是如何使得測試場景覆蓋度變得更高。在這種情況下,自動化測試[1]作為提升測試效率的一種手段,就變得迫在眉睫。在這個后端服務(wù)中,接口比較多,為了提升不同接口自動化測試的復(fù)用性,方便擴(kuò)展,以及未來遷移到其他業(yè)務(wù)服務(wù),如何設(shè)計一個好的測試框架就成為關(guān)鍵。為此,本文基于Shell技術(shù)、Python技術(shù)、unittest[2]單元測試技術(shù)、DDT數(shù)據(jù)驅(qū)動測試[3]技術(shù)、HTML超文本傳輸協(xié)議與CSS、JS編程語言,設(shè)計了一套方便、實用的基于請求日志的接口自動化Diff測試框架。該框架具有結(jié)構(gòu)清晰、易擴(kuò)展[4]、易維護(hù)等特點,能夠?qū)⒕€上請求流量經(jīng)過處理后保存到文件,作為測試數(shù)據(jù)輸入,并通過數(shù)據(jù)驅(qū)動的測試方式,分別在測試、線上兩套環(huán)境中執(zhí)行測試并對比測試結(jié)果,并且將所有測試數(shù)據(jù)的測試結(jié)果通過Web頁面形式的測試報告供開發(fā)人員瀏覽。通過在實際項目中使用該自動化測試工具,可以在五分鐘內(nèi)完成2000條請求日志的快速執(zhí)行和對比,極大提升了測試的效率和覆蓋度,有效解決了版本頻繁迭代帶來的測試人員壓力過大問題,并且對于出現(xiàn)異常結(jié)果的測試數(shù)據(jù),提供了詳盡的錯誤原因,方便研發(fā)人員快速定位問題并修改bug。
2 整體設(shè)計
本文設(shè)計的接口自動化測試框架主要分為三部分,采用分層設(shè)計思想,且測試數(shù)據(jù)與測試腳本分離[5]。第一部分是測試數(shù)據(jù)獲取模塊,主要是通過Shell等技術(shù),實現(xiàn)線上請求日志的抓取、處理,并將數(shù)據(jù)文件放入指定路徑。第二部分是自動化測試執(zhí)行模塊,通過Python等技術(shù),主要實現(xiàn)測試參數(shù)的輸入及接收解析、Diff任務(wù)的執(zhí)行及結(jié)果獲取等內(nèi)容。第三部分是測試結(jié)果展示模塊,通過HTML、CSS及JS技術(shù),主要實現(xiàn)對以上測試數(shù)據(jù)執(zhí)行后的Diff結(jié)果報告的生成。