接口篇:
在今天之前的很長時間,我一直認為的接口即目前測試系統和外部系統的接口。現在才了解,接口大概分為兩種。一種為系統對外的接口,另外一種是程序內部的接口。程序內部接口主要是對於前后端分開而言,如果后端已開發完成相關接口,但是前端界面還沒完成,這個時候我們通過單獨測試接口,可以更早的解決程序中存在的bug。
接口分類有很多種,我目前公司用的比較多的接口是webService接口,這類接口是走soap協議,通過http傳輸,請求報文和返回格式都是xlm格式;另外一種比較常用的接口是http api接口,這種協議是走http協議,返回報文是json串。這兩類接口可以用postman、jmeter和soapui來進行測試。當然還有很多其他類型的接口,如dubbo接口
{
"error_code": 0,
"login_info": {
"login_time": "20171211143838",
"sign": "b4dc507efa37b94923e960df09e37f38",
"userId": 8
}
}
(json串)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://WebXml.com.cn/">
<soap:Header/>
<soap:Body>
<web:getSupportCity>
<!--Optional:-->
<web:byProvinceName>?</web:byProvinceName>
</web:getSupportCity>
</soap:Body>
</soap:Envelope>
(xlm格式)
接下來單獨簡單介紹一下怎樣利用工具來測試接口。測試准備工作:安裝好jmeter、postman和soapui。接口地址:http://doc.nnzhp.cn/index.php?s=/6&page_id=12,以登陸和學生金幣充值為例。
jmeter篇
jmeter是一款輕量級測試工具,主要是用來做性能測試的,但是也可以用來與jenkins+maven/ant用來做接口自動化持續集成或者性能持續集成。接下來介紹一下怎樣用jmeter來做接口測試。
jmeter中添加的元素較多,常用的主要包括線程組、CSV Date Set Config、Http Cookie、http請求、正則表達式、響應斷言與查看結果樹。

(一個最簡單的登陸接口)
Paramenters用來填寫post請求參數,Body Data用來放json串或者xml串,Files Upload用來測試上傳文件類接口。
在實際測試工作中往往需要測試的功能依賴於前面的相關功能,比如上訴接口中學生金幣充值接口需要用到登陸后返回的sign值,因此需要添加cookie,http cookie管理器這個時候就用到了。在學生金幣充值請求下面加一個cookie管理器,定義名稱、值和域,如下圖:


接下來就用來說一下經常用到的參數化和關聯了。當我們有一些操作如注冊操作,需要用到不同數據時,這個時候參數化就起到作用了,jmeter最常用的參數化就是CSV Date Set Config,設置好值后在請求中替換對應的值即可,如下圖:
(設置參數化)

(用${name/telephone}替換)
filename為文件的絕對路徑,file encodiing為文件編碼,寫成UTF-8,variable names填寫變量名稱,如果參數化多個名稱可以用符號隔開,在下面delimiter定義這個符號,一般默認用,即可。其他的話可以保持默認,但是如果是進行壓測 sharing mode這里需要注意三個不同區別。All threads這個策略相當於LR中的unique+每次迭代,如注冊這種取這個就好了;current thread 這種類似於LR中順序取值+每次迭代;另外一種current thread group主要是用在多個線程組的情況下,線程組取值就是獨立的,如果只有一個線程組和All threads就一樣。設置參數化后在線程組中添加多個進程,可以在結果樹中去驗證取值是否如預期。
當我們有兩個請求A和B時,如果B請求需要用到A請求返回的一個值,但是這個返回值是動態變化的,這個時候我們需要做關聯。jmeter關聯最常用的是正則表達式,這里主要介紹正則表達式和新學的json path extractor,其中后者需要安裝插件jpgc-json。注意這兩個后置處理器均需要放到被依賴的請求也就是請求A下面,在請求B中傳參時用${變量名}即可。



jmeter實現數據庫mysql數據庫連接測試:先導mysql連接jar包:

再配置JDBC Connection Configuration,定義變量名稱,配置URL,用戶名和密碼,注意URL在后面增加?allowMultiQueries=true,才能批量操作,如果出現亂碼,也在后面加上?characterEncoding=UTF-8這個參數

再新建一個jdbc請求,query type選擇Callable Statement可以執行所有語句組合,如果只執行查詢語句可以選擇select Statement,如果只執行除了查詢操作其他所有操作,可以選擇update Statement。如下圖,對插入的數據可以進行參數化

執行結果查看結果樹:

postman篇
postman是一款谷歌游覽器插件。接下來主要總結一下psotman如何用來測http協議接口。說到http協議,這里需要介紹一下http請求與返回。
常見的http請求包括請求行、請求頭、空行和請求數據4部分,請求的內容我們可以通過抓包獲得。請求行包括了請求方法、URL、http協議版本,請求方法常用的有get和post方法;請求頭包括很多內容,每個請求頭包括內容不固定,也不一樣,主要有一些cookie、Keep-Alive、Cache-Control等這些內容;然后就是請求數據。對於get方法請求參數都放在URL上,post方法傳的參數一般放在請求數據里即body里,但是也可以放到URL上。
說到http請求頭里面的cache-control,我想到曾經看過的一篇文章,主要討論緩存。緩存可以分為強制緩存和對比緩存。強制緩存即客戶端發送請求后直接取緩存,這個時候都不需要向服務器發送請求,直接返回狀態碼200;對比緩存為客戶端發送請求時加上緩存標識給服務器,服務器根據這個緩存標識去判斷,如果成功,則直接去緩存中拿結果,這個時候返回狀態碼為304,如果對比不成功,則服務器需要重新響應,響應后狀態碼為200。而控制是否使用緩存,決定於第一次服務器返回的請求信息。在服務器返回的請求頭中會有相關字段標識是否使用緩存,在http1.1協議中一般用Cache-Control來定義。

言歸正傳,接下來介紹一下postman實現接口測試。

根據接口文檔,選擇請求方法(post和get),輸入URL,對於post請求,在body中輸入相關參數與參數值,對於json串直接raw中輸入即可。如果請求有請求頭,可以在headers中添加,輸入完成后點擊send,就可以查看到返回結果。
soapui 篇
以天氣預報接口為例,接口地址http://www.webxml.com.cn/zh_cn/weather_icon.aspx
打開soapui工具,選擇New soapui Project,導入WSDL文件,點ok,查看查看天氣請求,如下圖:



?用參數替換,點擊運行,右側會返回結果:

