很多小伙伴可能會說介面真的有測驗的必要嗎?
我只要把功能測驗好了不就ok了嗎?
答案是肯定的,在中大型專案中,后端、前端多人協同開發程序中,介面測驗是必要的,

什么是介面(API)測驗?
API全稱(Application Progarmming Interface),介面是一個位于復雜系統之上能簡化任務,像中間人一樣不需要你了解詳細的所有細節,比如用戶登錄頁面,只需要呼叫登錄介面,就可以達到登錄系統的目的,
介面回傳的資料型別都是json,json是一種通用的資料型別.
什么是介面自動化?
介面自動化測驗:讓程式代替人為對介面專案進行自動化驗證測驗的程序
介面測驗是一種功能測驗,也是一種自動化測驗,
功能測驗的角度上說只要管輸入資料后得到的輸出結果是怎么樣的,從執行方式上來講介面必須要借助工具來實作,
介面測驗與性能測驗之間存在介面性能測驗,主要通過jmeter來進行壓測,
介面測驗的意義
- 更早地發現問題,越早發現bug,修復成本越低
功能測驗必須要等到系統提供可測驗的界面后才能進行
- 縮短產品研發周期
介面測驗的介入可以更早地發現并解決bug,使得留到功能測驗階段被修復的bug減少,從而縮短整個專案的上線時間
- 發現更底層的問題
介面測驗可以更簡單更全面地覆寫到底層的代碼邏輯,從而可以發現一些隱藏的bug.
只針對UI層的功能進行測驗,就很難發現后端系統對一些例外情況的處理能力.
- 前端隨便變,介面測好了,后端不用變
- 檢查系統的安全性、穩定性
介面測驗常用工具:
-
常用瀏覽器
-
Postman
-
Jmeter
-
Fiddler
介面的請求和相應原理
針對這一部分所需掌握的知識HTTP協議、會話技術,屬于基本常識了,有不了解的同學可自行學習,
JSON語法及資料格式
什么是JSON?
JSON 指的是 JavaScript 物件表示法(JavaScript Object Notation),JSON是輕量級的文本資料交換格式(資料傳遞)–xml
JSON 獨立于語言:JSON 使用 Javascript語法來描述資料物件,JSON 決議器和 JSON 庫支持許多不同 的編程語言, 目前非常多的動態(PHP,JSP,.NET)編程語言都支持JSON,
語法規則:
JSON 語法是 JavaScript 物件表示語法的子集,
-
資料在名稱/值(鍵值對)對中 如 {“name” : “zs”}
-
資料由逗號分隔 如 {“name” : “zs” , ”age”:”18”}
-
大括號保存物件 如 {“name” : “zs” , ”age”:”18”}
-
中括號保存陣列 如 {“score” : [100,80,90]
資料格式:

介面測驗流程
1.介面檔案必備要素
介面說明
呼叫url
請求引數
請求方式
請求引數、引數型別、請求引數說明
回傳引數說明
2.介面請求報文拼接方式
URL拼接:
url拼接規則為:Url?param1=value1?m2=value2
問號前面是請求url,后面是請求引數和引數值,多個引數用&連接
如:
https://api.douban.com/v2/book/search?q=鄒偉偉
JSON串:
需要測驗工具完成,如postman、jmeter等,其傳參方式符合json的組合規則,
3.介面型別
http api介面
http api 介面是走http協議,通過路徑來區分呼叫的方法,請求報文都是key-value形式,回傳報文一般都是json串,請求方式有get、post等方式,
這兩種為最常用的請求方式,
webservice介面
webservice 介面是走soap協議通過http傳輸,請求報文和回傳報文都是xml格式,需要通過工具才能進行測驗,
資料庫訪問介面
資料庫訪問介面是走jdbc方式連接資料,對資料庫進行增刪改查操作,需要使用工具進行測驗,
GET、POST區別:
get使用url或cookie傳參,post將資料存放在body中
get的url在長度上有限制,post資料可以很大
post比get更安全,因為資料在地址欄上不可見
一般get用于獲取資料,post用于發送資料
HTTP狀態碼:
200 2開頭表示請求發送成功
300 3開頭表示重定向
400 4開頭表示客戶端發送請求有語法錯誤
401 訪問頁面未授權
403 無權訪問
404 無此頁面
500 5開頭表示服務器例外
500 服務器內部例外
504 服務器端超時,未回傳結果
1.第一個案例(發送一個get請求)
# coding=utf-8
import requests
# 請求的鏈接
url = 'http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例'
# 發送get請求
r = requests.post(url)
# 請求的狀態碼 200代表成功
status = r.status_code
print(status)
# 請求的內容
j = r.json()
print(j)
輸出結果如下:

2.第二個案例(發送一個post請求)
# 請求的鏈接
url = 'http://suggest.taobao.com/sug'
# post請求以字典格式傳入
data = {'code': 'utf-8', 'q': '褲子', 'callback': 'cb 用例'}
# 發送post請求
r = requests.post(url, data)
# 請求的狀態碼 200代表成功
status = r.status_code
print(status)
# 請求的內容
print(r.content)
輸出結果如下:

(介面只回傳了一個b,這里只需要明白遇到post介面怎么去請求就好了~)
3.第三個案例(進行介面狀態碼斷言)
# coding=utf-8
import requests
# 請求的鏈接
url = 'http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例'
# 發送請求
r = requests.post(url)
# 請求的狀態碼 200代表成功
status = r.status_code
# 進行介面的狀態碼斷言,等于200則認為通過,不是200不通過
if status == 200:
print('用例測驗通過')
else:
print('測驗不通過')
print(status)
# 請求的內容
j = r.json()
print(j)
輸出結果如下:

4.第四個案例(進行介面內容斷言-正常情況)
# coding=utf-8
import requests
# 請求的鏈接
url = 'http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例'
# 發送請求
r = requests.post(url)
# 請求的狀態碼 200代表成功
status = r.status_code
# 進行介面的狀態碼斷言,等于200則認為通過,不是200不通過
if status == 200:
print('用例測驗通過')
else:
print('測驗不通過')
print(status)
# 請求的內容
j = r.json()
# 判斷介面回傳內容里面,有沒有 褲子女夏 內容
if '褲子女夏' in str(j):
print('存在此資料')
else:
print('不存在此資料')
print(j)
輸出結果如下:

5.第五個案例(進行介面內容斷言-例外情況)
# coding=utf-8
import requests
# 請求的鏈接
url = 'http://suggest.taobao.com/sug?code=utf-8&q=褲子&callback=cb 用例'
# 發送請求
r = requests.post(url)
# 請求的狀態碼 200代表成功
status = r.status_code
# 進行介面的狀態碼斷言,等于200則認為通過,不是200不通過
if status == 200:
print('狀態碼校驗過')
else:
print('狀態碼校驗不通過')
print(status)
# 請求的內容
j = r.json()
# 判斷介面回傳內容里面,有沒有 褲子女夏 內容
# 褲子女夏 增加了一個1
if '褲子女夏1' in str(j):
print('存在此資料')
else:
print('不存在此資料')
print(j)
輸出結果如下:

6.第六個案例(介面的小封裝-介面和邏輯代碼分開控制-~)
增加config.py主要存放介面
# coding=utf-8
# baseurl 一般介面都是分測驗介面和正式介面的,只需要修改ip即可
baseurl = 'http://suggest.taobao.com'
# 假裝是登錄介面 baseurl=于樓上
url_login = baseurl + '/sug?code=utf-8&q=褲子&callback=cb 用例'
# 假裝是注冊介面
url_register = baseurl + '/sug?code=utf-8&q=褲子&callback=cb 用例'
# 假裝是首頁介面
url_home = baseurl + '/sug?code=utf-8&q=褲子&callback=cb 用例'
增加testapi.py
# coding=utf-8
import requests
# 引入config配置介面的檔案
import config
# 發送請求 使用config.來呼叫想要的介面 呼叫首頁介面
r = requests.get(config.url_home)
# 請求的狀態碼 200代表成功
status = r.status_code
# 進行介面的狀態碼斷言,等于200則認為通過,不是200不通過
if status == 200:
print('狀態碼校驗過')
else:
print('狀態碼校驗不通過')
print(status)
# 請求的內容
j = r.json()
# 判斷介面回傳內容里面,有沒有 褲子女夏 內容
# 褲子女夏 增加了一個1
if '褲子女夏1' in str(j):
print('存在此資料')
else:
print('不存在此資料')
print(j)
輸出結果如下:

用心的同學已經發現了,這樣的話每次介面變了鏈接等,只需要修改config檔案即可 不用去邏輯代碼里面去找了,
通用介面用例設計
通過性驗證
要保證這個介面功能是正確的,按照介面檔案上的引數,正常傳入,查看是否可以回傳正確的結果
引陣列合
如:現有一個操作商品的介面,有個欄位type,type傳1的時候代表修改商品,商品id、商品名稱、價格有一個是必傳的,這樣就要測引陣列合,type傳1的時候,只傳商品名稱能不能修改成功;id、名稱、價格都傳的時候能不能修改成功
介面安全:
繞過驗證
如購買了一個商品,價格是300元,提交訂單時候,把這個商品的價格改成3元,后端有沒有做驗證,更狠點,我把錢改成-3,是不是我的余額還要增加?
繞過身份授權
如修改商品資訊介面,必須得是賣家才能修改,那我傳一個普通用戶,能不能修改成功,傳一個其他的賣家能不能修改成功
引數是否加密
如登陸的介面,用戶名和密碼是不是加密,如果不加密的話,別人攔截到你的請求,就能獲取到你的資訊,
加密規則是否容易破解
密碼安全規則
對密碼的復雜程度校驗
例外驗證
不按照介面檔案上的要求輸入引數,來驗證介面對例外情況的校驗
如必填的引數不填,輸入整數型別的,傳入字串型別,長度是10的,傳11
必傳非必傳、引數型別、入參長度,

最后: 可以關注公眾號:傷心的辣條 ! 進去有許多資料共享!資料都是面試時面試官必問的知識點,也包括了很多測驗行業常見知識,其中包括了有基礎知識、Linux必備、Shell、互聯網程式原理、Mysql資料庫、抓包工具專題、介面測驗工具、測驗進階-Python編程、Web自動化測驗、APP自動化測驗、介面自動化測驗、測驗高級持續集成、測驗架構開發測驗框架、性能測驗、安全測驗等,
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
好文推薦
轉行面試,跳槽面試,軟體測驗人員都必須知道的這幾種面試技巧!
面試經:一線城市搬磚!又面軟體測驗崗,5000就知足了…
面試官:作業三年,還來面初級測驗?恐怕你的軟體測驗工程師的頭銜要加雙引號…
什么樣的人適合從事軟體測驗作業?
那個準點下班的人,比我先升職了…
測驗崗反復跳槽,跳著跳著就跳沒了…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298610.html
標籤:其他
