1. 程式人生 > >接口測試學習筆記(一)

接口測試學習筆記(一)

正則表達 絕對路徑 計劃 描述 器) 接口測試 學習筆記 nat 例如

第一課主要關於接口測試,涉及到postman和jmeter兩個工具

一、基礎知識:

1、接口就是把client(前端)和server(後端)端聯系起來的(或者說各種花式操作數據庫)。服務器也是一臺電腦,只是性能比較高的一臺電腦。

2、接口返回的數據都是json,(json,是一種通用的數據類型,以鍵值對 key-value 的數據形式來保存的)。

3、接口測試其實就是 功能測試,在接口測試之前,得要有接口文檔。(問開發要的)

4、post請求和get請求沒有很大的區別,get請求一般用於獲取數據,post請求一般用於發送數據:

如果是get請求:不借助任何的工具,用瀏覽器就可以發請求,如:http://118.00.0.00/api/user/stu_info?stu_name=小黑

5、cookie:就是放在你本地的一個鍵值對。如:

niuhanyang hahaha12345
niuhanyang:sfjsksdf4234sdfw34

session:就是放在服務端的一個鍵值對。 如:

niuhanyang:sfjsksdf4234sdfw34


比如 登錄, 登錄成功後,本地(瀏覽器)就會保存鍵值對
瀏覽器發送請求的時候,就會自動把鍵值對發過去服務端進行對比

若對不上服務端的鍵值對,就會讓你重新登錄

session過期 也會讓你重新登錄

默認永久生效的。不過一般都會設置過期時間限制。

token 其實就是Cookie裏面保存的一個鍵。

6、http請求分為兩個部分:請求頭和請求體

請求頭裏面呢是一些額外的信息,比如說用的什麽瀏覽器,cookie
請求體裏面傳的是具體的數據。

請求頭 header :
額外的信息
瀏覽器
cookie
需要什麽樣的數據

請求體 body :
username=xxx
file=aa.py

7、

get請求只有請求頭,是沒有請求體的。
它的數據直接放在url裏面的,post請求數據是放在body裏面的,get請求有長度限制,post請求沒有。

在以前的時候技術不好,有長度限制。
現在早就沒有了。
get請求沒有post請求安全。
只要通過抓包,post請求的數據一樣也可以看到。

8、

功能測試測的就是業務邏輯。

server端測試。
1、接口測試就是功能測試。
2、關註業務邏輯
3、正常、異常的,就不是按照接口文檔上要求的來

http 狀態碼:
200 請求成功
302 重定向
404 客戶端發出去的請求不合法
500 服務端有問題

9、、進行接口測試,必需的是接口文檔,文檔主要包含以下幾個部分:
1、URL
2、請求方式(一般為post或者get)
3、請求參數說明
4、返回參數說明
5、請求、返回示例
6、狀態碼說明

二、postman接口測試

示例1 :GET請求 :

獲取所有學生信息

簡要描述:

  • 這個接口是為了說明怎麽添加header信息的

請求URL:

  • http://URL地址/api/user/all_stu

請求方式:

  • get

需要添加header信息,key為Referer value 為http://XXXX/

參數:

返回參數說明

參數名類型說明
error_code int 錯誤編碼,0為操作成功
msg string 提示信息

參數及返回示例

技術分享圖片

示例2: POST請求:

登錄接口

簡要描述:

  • 登錄接口

請求URL:

  • http://URL地址/api/user/login

請求方式:

  • post

參數:

參數名必選類型說明
username string 用戶名
passwd string 密碼
  1. 登陸用戶名:XXXXX
  2. 密碼:aA123456

返回示例

  1. {
  2. "error_code": 0,
  3. "login_info": {
  4. "userId": 1,
  5. "sign": "d58e3582afa99040e27b92b13c8f2280",
  6. "login_time": "20171207113501"
  7. }
  8. }

返回參數說明

參數名類型說明
error_code int 錯誤編碼,0為操作成功
login_info object 登錄對象信息
userId int 用戶id
sign string 簽名
login_time string 登錄時間

參數及返回示例

技術分享圖片

示例3:POST請求,添加Cookie

學生金幣充值

簡要描述:

  • 學生金幣充值接口,這個接口是為了講添加cookie以及身份驗證的

請求URL:

  • http://URL地址/api/user/gold_add

請求方式:

  • post

參數:

該接口有權限驗證,需要admin用戶才可以做操作,需要添加cookie

cookie中key為登錄的用戶名,value從登錄接口中獲取,登陸成功之後會返回sign

參數名必選類型說明
stu_id int 學生id
gold int 金幣數量

返回示例

  1. {
  2. "error_code": 0,
  3. "msg":"充值成功!"
  4. }

返回參數說明

參數名類型說明
error_code int 錯誤編碼,0為操作成功
msg string 提示信息

請求參數及返回參數示例

技術分享圖片

三、Jmeter接口測試 :jmeter 開源的java開發的一個壓力測試工具。

為什麽要使用JMeter

  • 開源免費,基於Java編寫,可集成到其他系統可拓展各個功能插件
  • 支持接口測試,壓力測試等多種功能,支持錄制回放,入門簡單
  • 相較於自己編寫框架活其他開源工具,有較為完善的UI界面,便於接口調試
  • 多平臺支持,可在Linux,Windows,Mac上運行



jmeter查看結果樹亂碼
1、在jmeter的bin目錄下找到jmeter.properties這個文件
添加上
sampleresult.default.encoding=utf-8
2、重啟jmeter
jmeter body data裏面有亂碼怎麽解決
1、在jmeter的bin目錄下找到jmeter.properties這個文件
添加上
jsyntaxtextarea.font.family=Hack
2、重啟jmeter
jmeter參數化
1、用戶定義的變量
2、函數助手裏面的
__random
__counter
__time
3、從文件裏面讀
如果文件不寫絕對路徑,只寫一個文件名,那麽你就把你的文件
放到jmeter的bin目錄下就ok了

4、

關聯:
1、調用第一個接口,然後從這個接口的返回數據裏面拿到某個值
2、放到第二個接口裏面來用。

5、

表示時間
1、格式化好的時間 20180506185922
2、時間戳 從計算機發明那一天到現在過了多少秒
jmeter是java開發的,Java裏面的時間戳默認是精確到毫秒

所以你要除以1000才是真正的時間戳

關聯:
1、調用第一個接口,然後從這個接口的返回數據裏面拿到某個值
2、放到第二個接口裏面來用。

一、添加線程組 :

如下圖所示,右擊“測試計劃”>添加>Threads(Users)>線程組。這裏xmeter君需要解釋一下“線程組”的意思:JMeter是由Java實現的,並且使用一個Java線程來模擬一個用戶,因此線程組(Thread Group)就是指一組用戶的意思,換句話說一個線程組就是一組虛擬用戶(virtual users),這些虛擬用戶用來模擬訪問被測系統

技術分享圖片

二、添加HTTP請求:加入實際被測頁面

技術分享圖片

服務器名稱或IP:被測服務器的網站名字,也可以是IP地址。剩下的屬性可以按照被測系統的屬性按需配置

技術分享圖片

三 、用戶定義的變量:

技術分享圖片

技術分享圖片

四,添加結果監聽器:察看結果樹 :來查看性能測試過程中請求和響應信息 ,你可以看到一些測試期間一些有用的信息,比如發送的請求的信息和響應數據等

技術分享圖片

請求數據:HTTP請求的相關信息,有raw和HTTP兩種類型展示。

響應數據:HTTP請求所得到的響應數據。響應數據有正確和錯誤。

技術分享圖片

五、HTTP信息頭管理器

定義信息頭,在其覆蓋下的所有元件都會使用該信息頭。例如定義在測試計劃中的信息頭,即該測試計劃所有請求的信息頭。比如添加Cookie

技術分享圖片

技術分享圖片

六.jp@gc - JSON Path Extractor插件,該插件可以應用到關聯接口上

這個東西相當於正則表達式提取器



技術分享圖片

Destination Variable Name: 變量名,就是下個http請求需要用到的名字,相當於正則表達式提取器中的引用名稱

JSONPath Expression: json表達式,這個是根據返回的json來寫的。如圖,例如後臺返回的數據如下,那麽取sign 的表達式就應該寫成$.login_info.sign

第一個$是固定寫法,後面用.和不同層級的字段名來表達取哪個字段。如果有多個相同的字段名,則在字段後面加上索引以區分,例如$.login_inf[0].sign

Default Value: 默認值,當沒有取到值時的默認傳入值。


技術分享圖片

七.參數化

a. 使用時間戳${__time(,)}

技術分享圖片

b.使用當前時間${__time(YYYYMMdd-HH:mm:ss,)}

技術分享圖片

c.隨機數${__Random(,)}

技術分享圖片

d.按順序的${__counter(1,10)}

註:${__counter(,)}的初始值默認從1開始,設置起始值無效,設置結束值也無效。可以根據線程數控制。

技術分享圖片

e.通過文件進行參數化

添加配置元件 CSV Data Set Config

技術分享圖片

技術分享圖片

示例文件:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

接口測試學習筆記(一)