版權聲明:本文為原創文章,轉載請先聯系並標明出處
關於接口測試的理解,主要有兩類,一類是模塊與模塊間的調用,此類接口測試應該歸屬於單元測試的范疇,主要測試模塊與模塊之間聯動調用與返回。此類測試大多關注於流程性與正確性,通過設置不同的輸入,得到相應的返回與對應輸入數據的預期輸出目標比較是否一致,來確認接口的正確性和流程性。
另一類是系統的調用,如登錄調用認證系統的接口,如本系統調用第三方系統的接口等等,這類針對由web端發起的調用的測試也是一種接口測試,這類測試關注點更着重放在效率和健壯性上。
對於第一種,比較好的實踐是將輸入數據做成參數,在HyperPacer的數據池中進行維護,而接口調用則做成自動化進行。目前HyperPacer已經很好的能實現此類測試的需求。作為性能測試的專題,我們不在此展開贅述。我們重點來說第二種接口測試。
在這類web接口測試中,最多的就是WebService的測試。
關於WebService,soap,XML,rpc,wsdl等一系列概念,有不清楚的可以參考下面鏈接中給出的一些概念解釋:
雖然解釋的不夠詳細,但是基本的概念大概解釋清楚了。
對於WebService的測試,我們在網上比較容易查找到LoadRunner的實踐資料,LoadRunner在這方面確實方便,基本不需要太多這方面的知識,直接圖形化界面就可以自動生成相應方法的調用和參數輸入。
而Jmeter和HyperPacer對於WebService的測試資料相對較少,而且也沒有便捷的方式能自動生成相應方法,所以導致很多新人在使用這兩個工具進行WebService測試的時候感覺無從下手。這里以HyperPacer為例,講解一下用HyperPacer編寫腳本調用WebService進行性能測試。
首先我們,在網上找到一個公開的天氣預報的WebService接口,該接口的描述文檔如下:
這是一個WSDL文檔的片段截圖,在一個WSDL文檔中
一個WSDL文檔由以下幾部分部分組成:
- types
指定了WebService用到的所有數據類型。
- message
指明一個操作所用到的數據類型。
- portType
指出了這個WebService所有支持的操作,就是說有哪些方法可供調用。
- binding
transport指明傳輸協議,
operation 指明要暴露給外界調用的操作。
use屬性指定輸入輸出的編碼方式,這里沒有指定編碼。
- services
指定服務的一些信息,主要是指定服務的訪問路徑。
在我們的片段截圖里面我們可以看到提供了很多的方法,由於我們是舉例子,這里我們只選擇其中的一個方法getWeatherbyCityName來進行演示,我們可以看到在這個方法里只有一個參數theCityName,顧名思義,這個接口的這個方法是實現我們輸入一個城市名或者編號,就可以得到該城市的天氣情況。
下面我們來用HyperPacer來實現這個WebService的調用,首先添加一個工程,interface_demo和一個叫接口測試的並發場景,在場景內增加一個WebService取樣器,取樣器的界面如下:
可以看到在WebService發送的請求體中主要信息就是我們要調用的方法和方法的參數數據。
在過去接觸的很多新人中,大多都是在這個請求體的地方不知道該如何編寫。這里給出模版如下:
首先請求體先是XML的聲明,然后是soap envelop對象。這個沒有為什么,soap請求內容能夠必須以envelope作為根節點,以及envelope中的各個命名空間內容也都是固定的,有興趣詳細了解的可以點擊下面的鏈接進行查看:就是我~~~,里面有Envelope的schema的相關定義。
在envelope的根節點下分別是Header元素和Body元素。
Header這個是可選的,如果需要添加Header元素,那么它必須是Envelope的第一個元素。Header的內容並沒有嚴格的限制,我們可以自己添加一些和應用程序相關的內容,但是客戶端一定要記得處理這些Header元素。
而Body就是請求的主體了,如請求調用的方法,方法包含哪些參數等信息。在調用中沒有指定參數和返回類型,這里不需要指定,因為提供服務的一方自己已經規定好了數據類型,在調用時指定數據類型沒有任何意義,可以回過頭查看上面WSDL文檔截圖中關於根據城市獲取天氣這個的方法。
而一般情況下,我們用標簽來表示我們調用的方法,然后用子標簽來表示它的參數。如上面我們調用的是getWeatherbyCityName這個方法,所以在Body元素中,我們這樣寫:
<getWeatherbyCityName xmlns="http://WebXml.com.cn/"> <theCityName>58367</theCityName> </getWeatherbyCityName>
在上面,我們用黑色粗體標識的標簽就是方法名,而用斜體標識的標簽就是該方法的參數。
所以拼起來請求體就是如下格式:
<XML聲明> <soap:Envelope>
<Header>
</Header>
<Body>
<方法名>
<參數名>參數value</參數名>
</方法名>
</Body>
</soap:Envelope>
按照上面的模版拼出來請求體以后,我們的WebService采樣器就編寫完成了,執行一下,結果如下:
我們可以看到執行完成后,已經可以獲取到上海的天氣情況了。
實際執行測試的時候,我們當然不會這么簡單,只測試一個方法。很多時候是需要將多個方法聯動串聯起來進行測試。譬如,這里我們用到的獲取天氣的接口,我們可以看到還有獲取支持的城市列表的方法。感興趣的小伙伴可以在看完本文檔后,自己試着完成先調用獲取城市列表的方法取到支持的城市列表,然后每個用戶分別取到一個城市名,再根據取到的這個城市名在獲取該城市的天氣,並且根據取到的天氣信息中,如果低於5攝氏度則將該城市名輸出到控制台。
有小伙伴自己實現了該腳本的話,可以加群將腳本發給我們運營組的小伙子,他驗證通過后會給你發紅包哦,不用在意我們會不會給他報銷,因為我們絕對絕對不會給他報銷的,就醬,本文完工收攤了。
參考文章: Loadrunner調用Webservice接口進行性能測試時的方法及優化總結 原文出處