1. 程式人生 > >接口測試操作指引

接口測試操作指引

數據化 win 亂碼 環境準備 菜單 安裝jdk 瀏覽器 點擊 構造

接口測試操作指引

1、接口測試理論

接口測試主要是檢查數據的交換、傳遞和控制管理過程,發送數據後,看返回數據是否正確,返回值類型是否正常。

接口測試主要分為兩類:模塊接口測試和Web接口測試

模塊接口測試:是單元測試的基礎,它主要測試模塊的調用與返回

web接口主要分為:服務器接口測試和外部接口測試

服務器接口測試:主要是測試瀏覽器和服務器之間的接口,

外部接口:第三方提供的接口

2、接口測試工具

Postman --Charles--Fiddler:只接受單次單個接口的測試,很難滿足多接口調用邏輯驗證問題,也不太靈活,沒辦法做到數據化

Jmeter:可實現接口自動化測試

3、測試要點

1)檢查接口返回的數據是否與預期結果一致

2)檢查接口的容錯性,假如傳遞數據的類型錯誤時是否可以處理。例如上面的例子是支持整數,傳遞的是小數或字符串呢?

3)接口參數的邊界值。例如,傳遞的參數足夠大或負數時,接口是否可正常處理。

4)接口的性能,接口處理數據的時間也是測試的一個方法

4、狀態碼

200:返回成功

404:錯誤的請求,請求的資源不存在

500:服務器內部錯誤

5、Get與post請求的區別
Get:從指定的服務器中獲取數據,Get請求的參數數據會附在URL之後,以?分割URL和傳輸數據,參數之間以&相連,參數明文展現在URL上,GET請求能夠被緩存

Post:提交數據給指定的服務器處理,參數不會展現在URL上,請求不會被緩存

6、環境準備

安裝jmeter需要有jdk的支持

1)下載jdk+安裝jdk+配置環境變量

變量名:JAVA_HOME
變量值: C:\Program Files\Java\jdk1.8.0_51 (即jdk安裝的位置)
變量名:Path
變量值: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
變量名:CLASSPATH
變量值:.;%JAVA_HOME%lib;%JAVA_HOME%lib\tools.jar(記住前面的.)

附:查看jdk是否安裝成功:命令行中輸入Java -version,如有版本號顯示表示安裝成功

2)下載jmeter+安裝jmeter+配置環境變量

變量名:JMETER_HOME

變量值:C:\Program Files\apache-jmeter-2.11

變量名:CLASSPATH

變值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;

%JMETER_HOME%\lib/logkit-2.0.jar;

附:看是否安裝成功:雙擊jmeter.bat,會彈出兩個窗口,一個是windows窗口,一個是Jmeter界面

7、接口測試步驟

前提:從開發人員那裏獲取接口文檔,接口文檔應該包括完整的功能接口、接口請求方式、接口請求URL、接口請求參數、接口返回參數。如果當前項目沒有接口文檔,則可以使用fiddler或Charles對APP進行抓包確認。

方式1:fiddler接口測試步驟

1)準備工作

下載安裝fiddler

安裝fiddler證書:這是為了讓Fiddler能捕獲HTTPS請求,如果你只需要截獲HTTP請求, 可以忽略這一步;打開IPhone 的Safari, 問 http://本機IP地址:8888;證書的密碼就是手機設置的鎖屏密碼

配置fiddler為代理:打開手機,找到你的網絡連接,打開HTTP代理,輸入Fiddler所在機器的IP地址(比如:192.168.1.104)以及Fiddler的端口號8888

(2)通過請求構造器進行接口測試

步驟如下:

  • 將左側欄接口直接拖到composer下,如下所示

  • 在【Request Body】中輸入或修改請求參數,點【Execute】,發送模擬請求
  • 在左側可以看到請求的session,雙擊或點擊【Inspector】,可以查看請求響應結果

註意:get請求,request body中無內容,只能通過復制接口URL後的參數

(3)通過設置斷點進行接口測試

作用:能夠讓你清晰地看到程序執行的具體步驟,便於程序的調試運行和分析其中的變量變化和出錯的地點.

設置好斷點後,你可以修改httpRequest的任何信息包括host, cookie或者表單中的數據,模擬真實用戶請求。步驟如下:

  • 打開Fiddler點擊Rules-> Automatic Breakpoint->Before Requests或者按F11
  • 左側欄中選擇一個接口,按R鍵
  • 點擊Inspectors tab下的WebForms tab或testview tab修改參數信息,然後點擊Run to Completion

break on response :攔截修改服務器返回數據(可在webform或textview)

run to complete :執行修改過的請求數據(可在webform或textview)

查看返回的數據是否正確

方法2:jmeter自動化接口測試

(1)導入fiddler測試腳本方式

fiddler抓APP接口,然後導出jmx格式,在jmeter中打開此文件,測試計劃會自動添加上【http請求默認值】、【http信息頭管理器】、【http cookie管理器】和監聽器【查看結果樹】

http請求默認值】:設置公共的域名和端口號

http信息頭管理器】:在添加http請求之前,添加一個HTTP信息頭管理器,發請求頭中的數據通過鍵值對的形式放到HTTP信息頭管理器中。在往後端請求的時候就可以模擬web攜帶header信息了。

(2)手動在Jmeter中添加相關組件

  • 添加線程組(右擊測試計劃-添加-線程組)

名稱:待測接口的名稱

線程數:虛擬用戶數即並發數,一個線程表示一個虛擬用戶

Ramp-Up Period(s):所有線程啟動的時間,設置每個線程間的啟動間隔

循環次數:測試循環的次數,如果勾選了“永遠”,那麽所有線程會一直發送請求,直到手動停止運行腳本;

  • 添加http請求默認值

主要是用來設置被測系統的域名和端口,線程組裏的所有“HTTP Sampler”可默認使用此設置。

  • 添加http cookie管理器

cookie manager實際上就像一個容器一樣,自身就是Jmeter聲明出來的一塊存儲空間,他會接受服務器發來的所有cookie的賦值命令,自動在cookie manger裏面建立相應的變量,記錄值。這個過程僅僅需要我們添加一個cookie manger到測試腳本裏(jmeter.properties中需要開啟CookieManager.save.cookies=true這項,且特別需要註意的是,一個腳本裏最好只有一個cookie manger否則會混亂。

之後再確定服務應答的時候已經設置了cookie值之後,在需要的地方用${COOKIE_變量名}的取值方法取得cookie數據。

此外還有一點需要註意,當我們的腳本有跨域的情況時,${COOKIE_變量名}只能取到當前域中的cookie值,如果需要使用其他域中的cookie,那只能通過正則來提取。提取sample或者sub-samples的header部分,把值當成變量記錄下來。

HTTP Cookie 管理器具備三個功能:
1. Cookie 管理器就像一個 web 瀏覽器那樣存儲並發送 cookie。
如果你有一個 HTTP 請求,其返回結果裏包含一個 cookie,那麽 Cookie 管理器會自動將該 cookie 保存起來,而且以後所有的對該網站的請求都使用同一個 cookie。每個 JMeter 線程都有自己獨立的"cookie 保存區域"。因此,如果你在測試網站的時候使用了 Cookie 管理器來存儲 session 信息的話,那麽每個 JMeter 線程將會擁有自己獨立的 session。**註意這些 cookie 不會顯示在 Cookie 管理器裏,你可以通過察看結果樹來對其進行察看。
2. 接收到的 cookie 數據可以作為 JMeter 線程的參數進行存儲(JMeter 2.3.2 之後的版本默認不再打開這個功能)。
要將 cookie 存儲為參數,定義屬性"CookieManager.save.cookies=true"cookie 在被保存之前會在名字上加上 "COOKIE_" 前綴(避免和本地參數重復)。設置好名稱TEST 的cookie可以用 ${COOKIE_TEST}進行引用。如果不希望這個前綴可以對屬性 "CookieManager.name.prefix=" 進行定義。
3. 手工添加一個 cookie 到 Cookie 管理器。
註意如果你這麽幹了,這個 cookie 將被所有 JMeter 線程所共享。這種方式用於創建有很長過期日期的 cookie。
HTTP Cookie 管理器應用實踐。

對於 bug 跟蹤系統的測試,測試場景將會包含一個 "僅登錄一次" 操作,這個明顯僅需新用戶登錄。新建一個項目,我們把登錄請求放到 "Only Once Controller"。這意味著登錄請求將僅被執行一次。之後,cookie 將被 HTTP Cookie 管理器所保存並用於以後的請求。
現在我們將執行一次僅一個用戶的場景。之後我們會切換到察看結果樹以核實 JMeter 是否已對 cookie 做了處理。

你會看到在 POST 請求的時候 JMeter 捕捉到了 cookie。現在我們來驗證這個 cookie 是否會被應用於後續的請求。

  • 添加http請求(右擊線程組-采樣器-http請求)

錄入被測接口的詳細信息,包括請求路徑,對應的請求方法以及隨請求一起發送的參數列表.

協議:可以是http或https,一般都是http

請求的方法:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE

路徑:填入接口請求的URL

請求參數:如果是GET方法的請求,請求參數直接寫在URL後面

如果是POST的方法,則需要在Body Data中填入包含請求參數的數據Body Data可以從Fiddler抓的包中獲取,將Fiddler抓取的到數據包中Inspectors-TextView中的數據復制到Body data中即可);

  • 設置檢查點:添加-斷言-響應斷言

查看測試結果時,有時會發現返回數據不符合要求時,Jmeter給出的結果仍是通過的。這時候我們需要通過斷言來判斷返回數據是否符合要求。

比如,我們可以添加一個斷言來檢查返回信息中是否包含關鍵字“errMsg”來判斷錯誤信息:首先添加一個響應斷言,在要測試的響應字段中選擇響應文本,在模式匹配規則中選擇包括,勾選否,在要測試的模式中添加提一條,輸入關鍵字“errMsg”;檢查網絡返回結果中不包含“errMsg”的才會判定為通過。

  • 添加監聽器--查看結果樹

查看結果樹:在結果樹中會以樹形結構展示每個接口請求的測試結果,包括取樣器結果、請求、響應數據,在響應數據中可看到網絡側返回的數據,可以以接口文檔中期望返回的參數做比較以判斷返回是否正確。在結果樹中通過顏色可以直觀的看到接口測試的結果,綠色為通過,紅色為失敗。

另外,我們還可以從監聽器中添加一個斷言結果,在斷言結果中可查看斷言的詳細返回信息。

8、參數化詳細介紹

參數化:如果系統不允許相同的用戶名和密碼同時登錄,或者想更好的模擬多個用戶來登錄系統。這個時候就需要對用戶名和密碼進行參數化,使每個虛擬用戶都使用不同的用戶名和密碼進行訪問。斷言中也可以使用到參數化。對於這種接口不變,只是改下請求參數的測試,我們可以考慮引入參數化到概念。

參數化只需簡單五步就能搞定:

準備數據、配置元件、設置參數、引用參數和執行用例

這裏介紹兩種參數化的方式:函數助手,CSV Data Set Config

1、數據準備

用記事本寫了五個用戶名和密碼,保存為.dat/.txt/.csv格式的文件,編碼問題在使用CSV Data Set Config參數化時要求的比較嚴格,記事本另存為修改編碼UTF-8.註意用戶名和密碼是一一對應的,中間用戶逗號(,)隔開。將這個文件放在( C:\JmeterWorkSpace\t.dat )路徑下

2、設置引用參數

方式1、借助函數助手的方式

a、點擊菜單欄“選項”---->函數助手對話框,看下圖: CSV文件列號是從0開始的,第一列0、第二列1、第三列2、依次類推。

b、復制生成的參數化函數,打開登陸請求頁面,在右則的參數化中找到我們要參數化的字段,這裏對用戶名和密碼做參數化,第一列是用戶名,列號為0;第二列是密碼,列號為1;修改函數中對應的參數化字段列號就可以啦。

方式2、借助jmeter中的配置元件(CSV Data Set Config)

a、選中線程組,點擊右鍵,添加-配置元件-CSV Data Set Config

b、引用以上設置的參數

這裏設置了兩個參數,第一個地方是請求路徑裏面,將citycode參數化了,第二個地方是斷言裏面,將城市參數化了

1.講請求路徑裏面的citycode換成:${citycode}

2.將斷言裏面的城市名稱,換成:${city}

9、邏輯控制器

僅一次控制器表示在該控制器下的Http Request,每個Thread只執行一次,不會循環loop

交替控制器表示在該控制器下的Http Request,Thread會依次執行,而不是亂序執行

10、如何解決json中文亂碼問題?

方法1:將該采樣器中的“http請求”中的“contentencoding”值改成utf-8

方法2:將jmeter.property文件中“sampleresult.default.encoding=。。”改成sampleresult.default.encoding=utf-8

方法3:線程組添加後置處理器-beanshell postprocessor,在框子輸入:prev.setDataEncoding(“utf-8”)

接口測試操作指引