轉載請註明出處❤️
作者:IT小學生蔡坨坨
原文連結:https://www.caituotuo.top/a3a8d0c0.html
大家好,我是IT小學生蔡坨坨。
今天,我們來聊聊介面自動化測試是什麼?如何開始?介面自動化測試框架怎麼做?
自動化測試
自動化測試,這幾年行業內的熱詞,也是測試人員進階的必備技能,更是軟體測試未來發展的趨勢。
特別是在敏捷模式下,產品迭代速度快,市場不斷調整,客戶需求不斷變化,單純的手工測試越來越無法適應整個變化過程(迭代快,加班多)。測試人員如何快速響應並保證產品在上線後的質量能夠滿足市場要求(如何在上線一個新功能的同時快速對舊功能快速進行迴歸,保證舊功能不被新功能影響而出現嚴重的Bug?)。
針對以上問題,採用自動化測試無疑是一個不錯的選擇,能夠做到在保證產品質量
的同時提升測試效率
。
隨著行業內卷越來越嚴重,對於測試崗位的要求也是水漲船高,崗位招聘要求都會出現自動化測試的字眼,因此也是我們跳槽面試、升職加薪必備利器。
自動化測試又可分為介面自動化、Web UI自動化、App自動化,今天我們就來聊聊介面自動化測試。
介面自動化測試的價值
- 相比於UI自動化測試,介面自動化的維護成本更低,主要體現在以下幾個方面
- 在
分層測試金字塔模型
中,介面測試屬於第二層服務整合測試,與UI自動化測試相比,介面自動化測試收益更大、更容易實現、維護成本更低,有更高的投入產出比,因此是公司開展自動化測試的首選。 - 前端頁面變化快,而且UI自動化比較耗時,比如等待頁面元素載入、新增等待時間、定位元素、操作元素、模擬頁面動作這些都需要時間,因此UI自動化實施起來比較困難。
- 介面較穩定,介面的響應時間基本上都是秒級、毫秒級別,速度快,並且介面自動化本身也可以做一些有關聯的操作、全流程的操作,比如:註冊 --> 登入 --> 修改個人資訊。
- 在
- 測試複用性
- 快速回歸(提高迴歸的覆蓋率、效率、穩定性)
- 可以執行更多更繁瑣的測試,自動化的一個明顯的好處是可以在較少的時間內執行更多的測試
介面自動化測試如何開展
工具選擇
- Python/Java + Requests + Unittest/Pytest + HTMLTestRunner/Allure
- RobotFramework:關鍵詞驅動的自動測試框架
- 基於Web的自動化測試平臺(公司自主研發,成本較高,方便不懂程式設計也能使用)
自動化測試工具有很多,每種工具都有各自的優缺點,選擇適合自身實際情況的框架,落地實施才是重點,具體選擇哪種工具放在其他文章再說。
這裡使用Python + Requests + Pytest + Allure
舉個例子
介面文件(找了一個開放的介面用於測試)
介面資訊:
名稱:全國高校資訊查詢介面
描述:用於查詢全國高校資訊
Host: www.iamwawa.cn
Request URL:/home/daxue/ajax
Request Method:POST
Content-Type: application/x-www-form-urlencoded
headers:user-agent:Chrome
引數:
名稱 | 型別 | 是否必填 | 描述 |
---|---|---|---|
type | String | 是 | name,根據名稱查詢 |
keyword | String | 是 | 高校名稱,如:四川輕化工大學 |
請求示例:
POST /home/daxue/ajax HTTP/1.1
Host: www.iamwawa.cn
user-agent: Chrome
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=sjsrn0drje6ds5fq9kouoo2r23
Content-Length: 54
type=name&keyword=四川輕化工大學
響應示例:
{
"status": 1,
"info": "查詢成功!",
"data": [
{
"id": "2181",
"name": "四川輕化工大學",
"code": "4151010622",
"department": "四川省",
"city": "自貢市",
"level": "本科",
"remark": ""
}
]
}
線性指令碼
import requests
res = requests.post(url="https://www.iamwawa.cn/home/daxue/ajax",
headers={"user-agent": "Chrome"},
data={"type": "name", "keyword": "四川輕化工大學"})
assert res.status_code == 200
res_json = res.json()
print(res_json)
assert res_json["status"] == 1
使用以上程式碼,最基礎最簡單的介面測試就做起來了,好的開始就是成功的一半。
但是,問題也隨之而來,線性指令碼的缺點也暴露出來了:
- 測試的輸入和斷言都是捆綁在指令碼中,易讀性差
- 無共享或重用指令碼,可複用性低
- 線性指令碼修改代價大,維護成本高,不便於後期優化
- 容易受軟體變化的影響,容易受意外事件的影響,引起整個測試失敗
所以,下一步就是如何優化線性指令碼,也就是如何實現程式碼的高內聚低耦合,也是介面自動化測試框架要解決的問題。
介面自動化測試框架
GitHub:https://github.com/itcaituotuo/api_auto_framework
-
base_api.py:對介面測試框架Requests進行二次封裝,完成對api的驅動
-
api:繼承base_api,將http請求介面封裝成Python方法
-
utils:CommonUtil,公共模組,將一些公共函式、方法以及通用操作進行封裝,如:日誌模組、yaml操作模組、時間模組
-
config:配置檔案模組,配置資訊存放,如:URL、Port、Headers、Token、資料庫資訊等
-
data:測試資料模組,用於測試資料的管理,資料與指令碼分離,降低維護成本,提高可移植性,如:yml檔案資料
-
cases:測試用例模組,用於測試用例的管理,這裡會用到單元測試框架,如:Pytest、Unittest
-
run.py:批量執行測試用例的主程式,根據不同需求不同場景進行組裝,遵循框架的靈活性和擴充套件性
-
logs:日誌模組,用於記錄和管理日誌,針對不同情況,設定不同的日誌級別,方便定位問題
-
reports:測試報告模組,用於測試報告的生成和管理,如:基於Allure生成的定製化報告