WebApi接口測試


 API接口測試:

  什么是接口:通過API接口實現計算機軟件之間的相互通信

  為什么要做接口測試:

    不通過前端UI界面或者UI界面還沒有設計出來

    需要對功能做測試,這也是測試工程師盡早介入測試的一個點

    業務的邏輯,數據的資源,安全,需要通過接口去進行測試

  接口測試的流程

    需求評審-接口評審

    需求分析-接口分析

    接口用例設計

    執行測試用例

    Bug的定位與追蹤

    專項測試報告

  接口分類

    接口對象

      內部接口-集成測試,灰盒,一般開發去做

      外部接口-聯調測試,方案,聯調測試通過准則

    協議分類

      Web Service接口-SOAP協議

      Http Api接口-HTTP協議

    接口文檔

      接口名稱-功能描述

      接口地址URL

      支持的格式(xml/json)-請求數據格式

      請求方式-get/post

      請求參數-參數名稱,類型,是否必填,參數說明請求頭等,測試用例設計

      返回參數-返回碼,返回值信息,返回json或xml信息-預期結果

  接口測試

    excel表存儲接口測試用例

    postman進行接口測試

    記錄測試結果,提交bug

    接口測試過程中,如果系統已經完成,驗證地方:

      接口響應值

      系統對應的功能數據

      數據庫的數據驗證

  http協議

    http協議原理

      超文本傳輸協議,服務器傳輸文本到本地瀏覽器的傳送協議

      基於TCP/IP通信協議傳輸的

    網絡型協議

      OSI七層模型

        物理層

        數據鏈路層

        網絡層

        傳輸層

        會話層

        表示層

        應用層

      TCP/IP四層模型

        網絡接口層

        網絡層IP協議

        傳輸層TCP/UDP協議

        應用層http、smtp、telnet協議

    http協議特點

      無連接、無狀態、簡單靈活

    http與https的區別

      https-有證書,密文傳輸,443端口,有身份證驗證,完整性檢驗

      http-無證書,明文傳輸,80端口,無身份證校驗,無完整性校驗

    http請求報文

      請求行-包含請求方法,請求路徑,請求協議/版本組成

      請求頭-鍵值對,如數據類型,版本

      空行

      請求正文

    http響應報文

      狀態行-包含協議/協議版本,狀態碼,狀態描述符

      響應頭

      空行

      響應內容

    請求方法

      GET

        向指定資源發出請求

        大小有限制,2千字符以內,提交的數據直接顯示URL中,提交數據不安全

      POST

        向指定資源提交請求數據,如提交表單,上傳文件

        提交的數據沒有限制,數據在請求體中,數據安全,速度慢

      PUT

        向指定資源位置上上傳其新內容上傳文件

      DELETE

        請求服務器刪除Request-URL所標識的資源

      PATCH

        更新部分資源

    響應狀態碼

      200-客戶端請求成功

      301-永久性重定向

      302-臨時重定向

      403-服務器收到請求,拒絕訪問

      404-請求的資源不存在

      500-服務器發生不可預期的錯誤

    SSL通信過程

      SSL安全套接層,基於對稱密鑰與非對稱密鑰傳遞數據

      瀏覽器訪問https網站,要求與web服務器建立SSL連接

      服務器根據客戶端發的請求信息確定是否重新生成新的主密鑰,若需要服務器響應給客戶的信息將包含生成密鑰所需信息

      客戶根據收到服務器響應信息,產生一個主密鑰,並用服務器的公開密鑰加密后傳給服務器

      服務器回復該主密鑰,並返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器

  Cookie、Session、Cache緩存、Token

      Cookie

        什么是Cookie

          狀態的保持,辨別用戶身份,保持通信狀態

          Cookie保存於瀏覽器,來自於服務器

        Cookie包含的信息

          Key_Value值

          Path路徑

          Exprises過期時間

          Secure傳輸格式

          HttpOnly防止XSS攻擊

        Cookie類型

          持久Cookie

          會話Cookie

      Session

        服務器創建的,保存於服務器內存中

        Session標識是全局唯一的

        使用場景:記住用戶名和密碼登錄,購物車功能

      Browser Cache瀏覽器緩存

        節約網絡的資源加速瀏覽,瀏覽器在用戶磁盤上對最近請求過的文檔存儲

        當再次請求這個頁面時,瀏覽器就可以從本地磁盤顯示文檔,這樣就可以加速頁面的瀏覽

      Token

        客戶端可以將Token保存到任何地方

        無限制,無狀態,利於分布式部署

  Cookie與Session的區別

    cookie數據存放在客戶的瀏覽器,session數據存放在服務器

    cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應使用session

    session在一定時間內保存在服務器上,當訪問增多,會占用服務器性能,考慮到減輕服務器性能方面,應使用cookie

    單個cookie保存的數據不能超過4k,很多瀏覽器都限制一個站點最多保存50個cookie

    一般建議,將登錄信息等重要信息存放在session,其他信息如果需要保留,可以放在cookie

  Cookie與緩存的區別

    緩存只是對靜態資源的處理,Cookie是一種動態機制

    緩存大小受資源和磁盤空間的限制

    Cookie本身有大小限制,一般瀏覽器限制大小不能超過4Kb

    緩存不會發送服務器,cookie會與請求一並發送

    作用不一樣,緩存瀏覽器就可以從本地磁盤顯示文檔,可以加速頁面的閱覽。Cookie是服務器辨別用戶身份,維持通信傳輸狀態。

  JSON

    什么是json

      存儲和交換文本信息的語法

      更快,更小,易解析

    json格式

      {“key”:"value"}

      [{},{}]

  接口測試用例

    正常場景

      功能是否按照接口文檔要求實現

    異常場景

      參數為空

      參數多填

      參數少填

      參數類型錯誤

      參數數值取值范圍錯誤

      異常場景下是否有正確的處理邏輯和響應提示

    必填參數

      對於必填參數要設計傳參數和不傳參數,接口的返回情況

      必填參數傳參數

        必填參數都正確

        必填參數類型錯誤(非法、特殊字符)

        必填參數數值范圍錯誤(超過邊界)

        必填參數空格(前面、中間位置、尾部)

      必填參數不傳參數

        必填參數全部為空

        必填參數部分為空

    選填參數

      一般接口對於非必填參數都不會做非正常性傳值的判斷,所以只要測試接口返回的內容是否正確即可

      如果有接口文檔說明對非必填參數做了非正常的驗證的話,也要對其驗證

      覆蓋所有參數,正向用例

      覆蓋所有必填參數,正向用例

      某一必填參數為空,逆向用例

      必填參數基礎上,少傳一個參數

      多傳一個參數,逆向用例

      必填參數數據類型錯誤,數據值錯誤,逆向用例(例如整型變字符串)

      任意組合可選參數,正向用例

      與業務邏輯相關的,用戶身份認證為空或者錯誤,逆向用例

      字段的唯一性校驗,如插入數據字段不能重復,發送兩次請求,查看第二次返回結果

  Postman工具使用

    創建Collection

      Add Folder

      Add Request

    常用變量

      局部變量Variables

        對於單個請求

        比較少用

      數據變量

        txt/csv文件存儲數據

        參數化,批量執行接口測試

      環境變量Environment

        一般用戶測試環境的區分

        正式環境,預發布環境

      集合變量Collection

        針對於集合

        集合下edit-Varables設置集合變量

      全局變量Golable

    變量的優先級及格式

      引用格式:{{變量名}}

      局部變量--數據變量--環境變量--集合變量--全局變量

    傳參腳本

      獲取token及傳參

var data = JSON.parse(responseBody);
pm.globals.set("token",data.token);

 

      獲取響應信息中的ID及傳參

/獲取前面請求的客戶ID
var data = pm.response.json(responseBody);
pm.globals.set("Cid",data.obj.id);
console.log("客戶ID:"+pm.globals.get("Cid"));

 

    常用變量的腳本

      備注詳情

//1.設置環變量
pm.environment.set("hosttest", "192.168.1.1");
//獲取環境變量
var env = pm.environment.get("hosttest");
console.log("1.獲取設置的環境變量env:"+env);
//2.設置全局變量
pm.globals.set("glo", "設置全局變量glo");
//獲取全局變量
console.log("2.獲取設置的全局變量:"+pm.globals.get("glo"));
//3.設置局部變量
pm.variables.set("var","設置的局部變量var");
//獲取局部變量
console.log("獲取設置的局部變量var:"+pm.variables.get("var"));
//4.集合變量在集合下edit--Varibles設置集合變量
//5.清除全局變量
pm.globals.unset("teID");
//6.清除環境變量
pm.environment.unset("env");
//7.創建請求,發送請求,登錄操作
const echoPostRequest = {
url: 'http://localhost/api/mgr/loginReq',
method: 'POST',
header: 'Content-Type:application/x-www-form-urlencoded',
body: {
mode: 'urlencoded',
urlencoded: "username=auto&password=sdfsdfsdf",
}
};
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(err ? err : res.json());
});
View Code

 

    常用斷言腳本

      備注詳情

常用斷言:
//1.狀態碼斷言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//2.查看響應體中是否包含的內容
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("成功");
});
//3.響應值中JSON值的驗證
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.code).to.eql("0000");
});
//4.查看響應體中包含的內容
pm.test("Body is correct", function () {
pm.response.to.have.body("responsebodystring");
});
//5.查看響應頭 Conten-Type 是否存在
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
//6.查看響應時間是否小於200毫秒
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
//7.成功的響應狀態碼是否包含
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([200,202]);
});
//8.狀態碼包含的字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK");
});
//9.xml格式轉換json的格式
var jsonObject = xml2Json(responseBody);
//10.為json數據使用tiny驗證器
var schema = {
"items": {
"type": "boolean"
}
};
var data1 = [true, false];
var data2 = [true, 123];
pm.test('Schema is valid', function() {
pm.expect(tv4.validate(data1, schema)).to.be.true;
pm.expect(tv4.validate(data2, schema)).to.be.true;
});
View Code

    postman到處報告

      本地導出

        執行結合-->run-->export result

      newman run 命令導出

        安裝Node.js

          node -v命令顯示版本即可

        安裝newman

          安裝命令:npm install newman -global

               newman -v 顯示版本即可

        安裝html報告格式庫

          安裝命令:npm install -g newman-reporter-html

               執行命令:

              

newman run c.json(執行的集合文件) -g d.json(全局變量文件) -e e.json(環境變量文 件) -d csv.txt(數據文件) -n 6(迭代次數) --reporters html --reporter-html-export d: \2020\webapi\reporter.html(報告文件路徑) 
View Code

  

  Fiddler工具使用

    Fiddler抓包工作原理

      就是客戶端和服務器之間建立一個代理服務器,默認地址127.0.0.1,端口:8888

      瀏覽器發送請求會先發送到fiddler,fiddler再發送到服務器

      服務器的響應也是先發送到fiddler,fiddler在發送到客戶端

    Rules--Automatic Breakpotins

      請求前斷點Before Request

        步驟

          暫停抓包,進入響應的界面輸入數據

          回到頁面進行數據提交

          回到fiddler,webform修改請求數據

          點擊break on response -->run to completion 繼續執行

        使用場景

          假設前台頁面限制某個輸入框只能輸入20個字符

          需要測試接口該輸入框長度超過20個字符接口是怎么處理的

      請求后斷電After Response

        步驟

          設置請求后斷點,頁面操作,抓取數據

          修改相應內容

          run to completion 繼續執行

          查看頁面數據

        使用場景

          假設你測試某個UI功能,其中某個字段的長度最大值是200,但是你的請求獲取到的內容都很小

          無法看到字段長度很長時界面的展示情況,那么,你可以修改響應報文,把返回的內容自行修改

    AutoResponder自動響應

      步驟

        抓包請求

        選擇請求右擊save-->response-->save response body

        修改保存數據

        啟動autorespnseder

        把剛才的請求add rule-->添加剛才修改的json文件-->save

        刷新頁面

      使用場景

        前端工程師設計好界面后,想調試一下頁面效果,但是后端工程師接口功能還未完成,無法調試

        此時,前端工程師可以把某些請求設置為自動應答,響應返回本地測試數據

    Composer模擬器使用

      步驟

        開啟抓包,發送請求(該請求要有參數)

        拖動請求到compser中,綠色狀態松開即可

        修改請求參數

        執行,會有新的請求加載,點擊查看inspector中響應信息

      使用場景

        模擬后端,查看相應結果

    Filters過濾器,域名過濾

      只顯示特定域名記錄,Filters--勾選Use Filters--Hosts

      選擇Show only the following Hosts--輸入需要顯示的域名--點擊actions生效

    https抓包設置

      tools-->option-->https-->左邊選項進行勾選操作

      tools-->option-->https-->action-->export 導出證書--瀏覽器導入證書

    手機抓包設置

      tools-->option-->connections-->設置好端口--勾選allow remote computers to connect--點擊ok

      手機設置

        設置--無線局域網WIFi--代理設置--設置代理服務器電腦的ip(就是打開fiddler那台電腦的IP)--端口

        手機瀏覽器--輸入代理服務器電腦的ip+端口:如:192.168.3.8:8888

        下載安裝證書即可

      手機弱網測試

        Rules-->Customize Rules-->查找(ctrl+f)300數值--數值向上增加改值保存

        啟動Rules-->Performance-->勾選Simulte Modem Speeds

        執行發送請求,弱網測試,看響應時間

 

      

 

 

參考地址:

https://www.processon.com/view/5e9fdf9ff346fb177b8b7627#map

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM