陸俊杰
摘要:對于接口性能測試,性能測試腳本開發(fā)是一個重要的環(huán)節(jié),HTTP接口是目前常見的應(yīng)用軟件的后臺接口,該文就該類型接口的性能測試腳本開發(fā)技術(shù)進(jìn)行了討論,著重闡述了腳本開發(fā)過程中各環(huán)節(jié)需要關(guān)注的重點,并結(jié)合實際的項目案例,對一些常見的問題以及解決方法進(jìn)行了描述。
關(guān)鍵詞:HTTP接口;接口性能測試;腳本開發(fā);LoadRunner;性能問題定位
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)13-0095-02
1引言
隨著大數(shù)據(jù)、云計算等技術(shù)的不斷發(fā)展,軟件規(guī)模越來越大,軟件系統(tǒng)的復(fù)雜度也越來越高,軟件的用戶數(shù)量也越來越龐大,越來越多的應(yīng)用軟件采用服務(wù)化的方式進(jìn)行設(shè)計,通過接口作為各個系統(tǒng)間通信的橋梁,接口的質(zhì)量對于軟件的整體質(zhì)量起到了重要的作用,接口性能測試是保障接口質(zhì)量的重要手段,而在接口性能測試中,性能測試腳本開發(fā)是一個重要的環(huán)節(jié),目前大部分應(yīng)用軟件的后臺接口數(shù)據(jù)傳輸是基于HTTP協(xié)議的,本文將結(jié)合筆者的實際經(jīng)驗,針對HTTP接口性能測試腳本開發(fā)技術(shù)進(jìn)行探討。
2概述
本文選取了某移動應(yīng)用軟件測試項目作為研究案例,本項目中,需要對被測軟件的后臺HTTP接口進(jìn)行性能測試,并對性能測試中發(fā)現(xiàn)的問題進(jìn)行分析和定位,結(jié)合本項目的實際情況,筆者采用了HP LoadRunner具,作為本次項目的性能測試工具。
3初步腳本開發(fā)
對于HTYP接口的數(shù)據(jù)傳輸,遵循一個完整的HTTP請求過程,包含建立連接、發(fā)送請求、回送響應(yīng)、關(guān)閉連接4個階段,初步腳本開發(fā)就為了實現(xiàn)這一過程,通過編寫發(fā)送請求的代碼,使得測試腳本能夠成功向被測接口發(fā)送請求,并完成此過程的數(shù)據(jù)交互。因此在代碼中需要定義完成這個過程所需要的相關(guān)請求參數(shù),例如:請求地址、請求方式、請求人參、請求頭域等。
接口的請求方式一般分為GET和POST方式,針對簡單的接口請求,例如本項目中無需人參直接以GET方式請求的接口,由于HPLoadRunner工具內(nèi)置了默認(rèn)的請求頭,所以一般僅需要在發(fā)送請求的代碼中定義請求地址、請求端口號、請求方式三個參數(shù),即可實現(xiàn)請求的發(fā)送;對于一些復(fù)雜的接口請求,例如本項目中,以POST方式傳遞JSON格式參數(shù)的接口,在發(fā)送請求的代碼時,就還需要額外定義符合JSON格式的請求人參以及"application/json"請求頭域等參數(shù)。
完成發(fā)送請求的代碼的編寫,只是做到了腳本開發(fā)的第一步,即測試腳本實現(xiàn)了成功向接口發(fā)送請求和接收接口返回信息的功能,但這并不意味著腳本開發(fā)過程結(jié)束了,例如可能會發(fā)生接口未返回期望的響應(yīng)、沒有能夠真實地模擬實際使用場景等,因此通常還需要對測試腳本進(jìn)行諸多完善,才能使測試腳本達(dá)到最終測試目的。
4完善腳本開發(fā)
4.1動態(tài)參數(shù)的處理
HTTP接口請求中的一些參數(shù)經(jīng)常是動態(tài)的,它們遵循一定的業(yè)務(wù)規(guī)則或技術(shù)規(guī)則,同時一些接口的后臺數(shù)據(jù)庫是存在緩存的,若是在測試中使用固定的參數(shù)重復(fù)請求,就可能觸發(fā)數(shù)據(jù)庫的緩存機(jī)制,因此不足以檢測出實際接口的性能嘲;針對一些安全性更高的接口,例如對參數(shù)加密的接口,若是用固定的參數(shù)發(fā)送請求,則可能導(dǎo)致請求發(fā)送失敗,因此在測試腳本中需要對這些動態(tài)參數(shù)進(jìn)行合理的處理。
針對一些非加密的參數(shù),可以通過在測試工具中建立參數(shù)池,根據(jù)業(yè)務(wù)的規(guī)則建立參數(shù)迭代的機(jī)制,并考慮參數(shù)的充足性。例如本項目中的某一業(yè)務(wù)數(shù)據(jù)查詢接口,考慮到數(shù)據(jù)庫緩存對性能測試結(jié)果的影響,腳本需要實現(xiàn)向被測接口每次查詢不同的數(shù)據(jù),該項測試的并發(fā)要求為5,000個并發(fā)用戶,需要進(jìn)行10次循環(huán)迭代的測試,因此在測試腳本中建立了50,000個不同數(shù)據(jù)的參數(shù)池,并設(shè)置了參數(shù)的唯一迭代。
針對一些加密參數(shù),參數(shù)化的處理方式會相對復(fù)雜。經(jīng)過筆者研究,一般有以下幾種解決方法:
1)若加密的參數(shù)可以通過某一接口動態(tài)獲取,則可以在測試腳本中先請求該接口,通過測試工具提取該接口返回信息中的加密參數(shù)。
2)由系統(tǒng)的開發(fā)方將加、解密方法封裝成組件,提供給測試方,供測試方在測試腳本中調(diào)用組件進(jìn)行加解密操作。
3)測試方在了解加密算法的前提下,在測試腳本中實現(xiàn)加密參數(shù)的生成。
4)減弱或取消加密的限制,例如后臺延長密鑰的有效期、使用一個固定的萬能密鑰等,使用該方法將較大程度地減輕參數(shù)化工作量,但需要對因加密機(jī)制調(diào)整而導(dǎo)致的性能測試結(jié)果影響進(jìn)行充分評估。
以本項目中涉及的一個加密接口為例,開發(fā)方通過SHA-256加密算法對接口的某一參數(shù)值進(jìn)行了加密。由于其無法提供組件或提供可以動態(tài)獲取該加密信息的接口,同時加密機(jī)制不宜取消,因此采用了第三種方式進(jìn)行參數(shù)化,即在測試腳本中實現(xiàn)加密參數(shù)的生成。筆者通過HPLoadRunner工具自帶的函數(shù)完成加密前字符串的處理,但工具不支持直接進(jìn)行SHA-256加密,為了盡量使測試腳本簡潔、高效,筆者使用了C-FREE 5工具編譯了SHA-256算法的動態(tài)鏈接庫文件,利用HP LoadRunner工具的動態(tài)鏈接庫文件的調(diào)用機(jī)制,在測試腳本中調(diào)用該動態(tài)鏈接庫文件中封裝的SHA-256加密函數(shù),從而在測試腳本中成功實現(xiàn)了該參數(shù)值的加密。
4.2檢查點的設(shè)計
在性能測試過程中,操作執(zhí)行的成功率是一項重要的指標(biāo),尤其是對于接口,若是接口在性能測試中返回了未預(yù)期的響應(yīng),就意味著接口可能存在性能的缺陷,為了準(zhǔn)確地衡量接口是否正確地處理了客戶端的請求,就需要我們在測試工具中設(shè)置合理的判斷。HP LoadRunner工具中可以通過設(shè)計檢查點m來判斷接口服務(wù)端的返回信息中是否包含了預(yù)期的結(jié)果,對于HTTP接口,在返回信息中,通常會有特定的狀態(tài)碼來表明接口請求的處理狀態(tài),例如“code:0”經(jīng)常是一個接口請求成功的響應(yīng)標(biāo)志。不同接口的成功響應(yīng)標(biāo)志取決于接口的設(shè)計,因此關(guān)于接口處理成功的標(biāo)準(zhǔn)需要與開發(fā)方確認(rèn)并達(dá)成一致,若是用了不合理的檢查方式,將可能會影響性能缺陷的檢出率。
4.3集合點設(shè)置
通常在測試腳本中可以設(shè)置集合點,用以同步虛擬用戶以便恰好在同一時刻執(zhí)行任務(wù),對于接口測試來說,添加集合點,使虛擬用戶在同一時刻集中請求接口,可以檢測接口承受瞬時并發(fā)的能力,有助于快速發(fā)現(xiàn)接口在并發(fā)請求處理上的性能瓶頸。在本次測試中,對于接口的并發(fā)處理能力要求較高,因此在測試腳本中設(shè)置了集合點。
4.4輔助性能問題定位
對于一個成功的HTFP接口性能測試,不僅要能夠準(zhǔn)確檢測接口實際性能情況,同時還應(yīng)有利于協(xié)助開發(fā)方成功定位性能問題,測試腳本的開發(fā)對性能問題定位可以起到重要的作用,通過在腳本中有針對性地進(jìn)行一些輔助問題定位的定制化開發(fā),可以為性能問題的定位提供重要的支撐。一個接口如果發(fā)生問題,通常會向客戶端返回相關(guān)錯誤信息,而這個信息對于開發(fā)方定位性能問題起到了重要的作用,在分析性能問題時,報錯信息和報錯數(shù)量是一個重要的指標(biāo),在事務(wù)失敗時,HP LoadRunner工具可以輸出一些基本的報錯,例如檢查點不通過、非正常的HTrP響應(yīng)代碼等錯誤類型,但不會將接口自身反饋的錯誤信息記錄到報錯中,若需要查看具體的返回,就需要在日志中查看。對于一些并發(fā)量大、報錯信息較多的測試,將會給錯誤信息的查找、統(tǒng)計、分析帶來較大的工作量。
在本次接口性能測試中,為了解決這一問題,在測試腳本中,編寫了自定義的字符串關(guān)聯(lián)函數(shù),有選擇性地將接口返回的關(guān)鍵報錯信息關(guān)聯(lián)出來,并在檢查點未通過的情況下,將接口返回的錯誤信息定義為工具級別的報錯。性能測試執(zhí)行完畢后,可以直接通過HP LoadRunner工具的結(jié)果分析模塊,將接口返回的錯誤和數(shù)量進(jìn)行分類導(dǎo)出。由于本次測試的接口數(shù)量較多,測試迭代較為頻繁,通過這樣的方式有效地節(jié)省了測試數(shù)據(jù)分析的時間,使開發(fā)方能夠快速準(zhǔn)確地定位到接口問題。
5結(jié)束語
本文結(jié)合了筆者對HTYP接口性能測試腳本開發(fā)技術(shù)的研究以及實際的項目案例,介紹了HTFP接口性能測試腳本開發(fā)過程中各個主要環(huán)節(jié)的技術(shù)要點,并對開發(fā)過程中遇到的問題和解決方法進(jìn)行了描述。對于HTFP接口性能測試,測試腳本開發(fā)是一個重要的環(huán)節(jié),測試腳本不僅要能夠有效地模擬實際使用場景,同時也應(yīng)能夠盡可能地為性能問題分析和定位提供幫助,而在開發(fā)過程中,也需要根據(jù)實際情況,進(jìn)行合理的設(shè)計和開發(fā),使測試腳本能夠最大化地滿足最終測試目的。