29前端
2020-04web
今天距2020年246天數據庫
這是ITester軟件測試小棧第117次推文json
點擊上方藍字「ITester軟件測試小棧「關注我,每週一、三、五早上 07:30準時推送。後端
微信公衆號後臺回覆「資源」、「測試工具包」領取測試資源,回覆「21天打卡」一塊兒學習成長,打怪升級。跨域
本文4829字,閱讀約需13分鐘安全
在上一篇Python接口自動化測試系列文章:Python接口自動化之unittest單元測試,主要介紹單元測試,unittest模塊特性、大體流程、源碼及實戰例子。微信
如下主要介紹接口概念、接口用例設計及登陸接口測試實戰。cookie
01session
什麼是接口?
接口:檢測外部系統與系統之間以及內部各個子系統之間的交互點。
通俗來講,接口就是鏈接先後端的橋樑,接口測試能夠簡單理解爲脫離了前端的功能測試。一個又一個的接口就對應功能測試內一個又一個的功能。但注意,一個功能有可能不是一個接口就能實現。
那麼,接口測試和功能測試的區別在哪呢?其實功能測試就是在頁面上輸入咱們的參數值,點點點;而接口測試沒有前端,而是經過接口文檔上的調用地址、請求參數等,校驗返回的結果值,也就是說,接口能夠當作沒有界面的功能測試。
所以,能夠分析,系統間的接口包含三部分:輸入
、處理邏輯
、輸出
。
02
如何開展接口測試?
接口測試流程以下:
1.需求評審,熟悉業務和需求;
2.開發提供API接口文檔;
3.根據開發交付的接口文檔,編寫接口測試用例;
4.接口測試用例評審;
5.開始執行接口測試;
6.提交測試報告;
03
如何設計接口用例?
▌1.獲取接口文檔
通常公司的開發會提供接口文檔,沒有接口文檔的自行抓包吧(摸摸頭),不知道怎麼抓包的小夥伴,能夠看看公衆號的Fiddler
系列文章。
接口文檔是咱們測試時最重要的一個依據,一個規範的接口文檔至少包括:
1.接口說明;
2.調用URL;
3.請求方法(get、post等);
4.請求參數、參數類型、請求參數說明等;
5.返回參數說明;
以下爲一個簡單的登陸接口文檔:
▌2.分析接口文檔的接口,提取測試點
接口測試用例跟常規的功能測試用例基本同樣,能夠從接口功能測試、接口業務測試、接口性能測試、接口安全測試等角度考慮。
接口的邏輯校驗,能夠參照接口流程圖來進行設計,一個分支須要做爲一個場景去進行測試,須要覆蓋到流程圖裏面全部的邏輯分支。
接口的參數校驗,能夠參照接口文檔中的參數定義去進行驗證,須要覆蓋到全部參數對應的枚舉值以及錯誤碼等信息。
▌3.接口測試用例設計思路
接口功能的關注點是:
1.接口參數正確與否:接口傳入的參數是否有正確填寫;
2.接口參數缺失:接口參數有必填、選填參數,傳參時,測試參數缺失對結果的影響;
3.接口參數邊界值:好比用戶名、密碼有長度限制,須要測試不一樣長度的參數對結果的影響;
4.接口參數類型:好比接口文檔中用戶名爲String類型,測試傳入其餘數據類型對結果的影響。
▌4.接口測試其餘範圍
接口業務測試
主要是從業務的角度出發,把接口組合成一條業務鏈,好比登陸以後充值,在數據庫中金額是否正確等等
接口的性能測試
是指接口是否知足業務的要求,好比業務要求系統能夠知足50我的同時下單,那麼下單這個接口就要能夠承擔50 TPS,目前業內通常使用JMETER去作接口性能測試,jmeter接口性能後續會單獨在Jmeter系列文章裏介紹。
接口安全測試
接口的安全性主要圍繞Token
、Timestamp
和Sign
三個機制展開設計,保證接口的數據不會被篡改和重複調用。
注意:本文主要涉及接口功能測試,相信作過功能測試的童鞋,設計接口測試用例也是沒問題的。
04
接口測試用例實戰
如下,咱們以登陸接口進行實戰。
隨着代碼模塊愈來愈多,混在一塊兒,雜亂無章,這時咱們考慮架構分層了,上篇文章:Python接口自動化之requests請求封裝,封裝的requests請求類,每一個用例都要調用,能夠放在公共模塊裏。
① 在項目下新建一個文件夾common,放入請求模塊requests_handler.py
requests_handler.py
import requests
class RequestsHandler:
def __init__(self):
"""session管理器"""
self.session = requests.session()
def visit(self, method, url, params = None, data= None, json= None, headers= None):
result = self.session.request(method,url,params=params,data=data,json=json,headers=headers)
try:
# 返回json結果
return result.json()
except Exception:
return 'not json'
def close_session(self):
self.session.close()
②編寫登陸接口用例,調用封裝的請求類。
登陸用例,新建一個test_cases文件夾,用來存放用例模塊。
test_Login.py
import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
def setUp(self):
# 請求類實例化
self.req = RequestsHandler()
def tearDown(self):
self.req.close_session()
def test_login_success(self):
login_url = 'http://127.0.0.1:8000/user/login'
payload = {
"mobile_phone": "1530272****",
"pwd": "12345678"
}
res = self.req.visit('post',login_url,json=payload)
self.assertEqual(0, res['code'])
if __name__ == '__main__':
unittest.main()
運行結果爲:
Ran 1 test in 0.213s
OK
對於用例的一些總結:
①setUp, tearDown。前置條件,後置條件,setUp實例化,在運行測試用例前獲取session管理器, tearDown,在測試用例執行結束後關閉session管理器。
②對於斷言,小夥伴們可能不知道到底用返回結果中的哪一個字段斷言。我的意見,若是code、msg比較詳細的話,能夠利用code、msg其中一個來斷言,固然code、msg一塊兒作斷言也能夠,甚至你以爲返回結果中某個數據符合你的預期,也是能夠拿來斷言,斷言手段是靈活多變的,自行選擇最優方案。
小夥伴們看到總結,退出微信,打開王者榮耀,一鼓作氣,其實還沒完呢,咱們寫了正向用例,還有異經常使用例也寫兩條,更多的異經常使用例能夠自行擴展下。
import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
def setUp(self):
# 請求類實例化
self.req = RequestsHandler()
def tearDown(self):
# 關閉session
self.req.close_session()
def test_login_success(self):
"""
正確手機號,正確密碼
"""
login_url = 'http://127.0.0.1:8000/user/login'
payload = {
"mobile_phone": "1530272****",
"pwd": "12345678"
}
res = self.req.visit('post',login_url,json=payload)
# 根據請求結果中的code進行斷言
self.assertEqual(0, res['code'])
def test_phone_is_null(self):
"""
手機號爲空,密碼正確
"""
login_url = 'http://127.0.0.1:8000/user/login'
payload = {
"mobile_phone": "",
"pwd": "12345678"
}
res = self.req.visit('post', login_url, json=payload)
# 根據返回結果中的msg進行斷言
self.assertEqual("手機號碼爲空", res['msg'])
def test_pwd_is_null(self):
"""
正確用戶名,密碼爲空
"""
login_url = 'http://127.0.0.1:8000/user/login'
payload = {
"mobile_phone": "1530272****",
"pwd": ""
}
res = self.req.visit('post', login_url, json=payload)
# 根據返回結果中的msg進行斷言
self.assertEqual("密碼爲空", res['msg'])
if __name__ == '__main__':
unittest.main()
測試結果爲:
Ran 3 tests in 0.259s
OK
以上代碼以下痛點:
① 用例和數據未分離,維護成本大。能夠數據與測試腳本分離,使用Excel存放測試用例,方便維護。
② 仔細研究發現正向用例、異經常使用例,只是傳入的數據不同,其餘都是通用,這種狀況下,咱們能夠引入ddt數據驅動,減小代碼量。
總結:以上主要介紹了接口概念、接口用例設計及登陸接口用例實戰。
下一篇:Excel存放用例及封裝類讀取Excel數據。
測試交流Q羣:727998947
本文分享自微信公衆號 - ITester軟件測試小棧(ITestingA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。