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