一、一張圖表告訴你接口自動化框架有哪些,他們之間有何區別:
另外,現階段流行推薦使用:Python+unittest+requests+HTMLTestRunner框架
二、Java Rest-assured框架:
Java Rest-assured 是使用代碼來實現接口的請求,封裝業務流程,對於公司的業務支持比較高,靈活度很強,可以通過代碼的方式打造自己公司的接口自動化框架,上手有點難度,需要有Java 編程基礎,才可以使用。
三、python+ Request框架:
python+ Request 是使用代碼來實現接口的請求,封裝業務流程,對於公司的業務支持比較高,可以根據業務的靈活度來定制化開發接口框架,再加上Jenkins 就可以持續化集成。上手有點難度,需要有Python 編碼的基礎,才可以使用。
四、Robot Framework框架:
官網介紹機器人框架是一個通用的開放源碼自動化框架,用於驗收測試、驗收測試驅動開發(ATDD)和機器人過程自動化(RPA)。它具有易於使用的表格測試數據語法,並利用關鍵字驅動的測試方法.它的測試功能可以通過用Python或Java實現的測試庫來擴展,用戶可以使用與創建測試用例相同的語法從現有的測試庫中創建新的更高級別的關鍵字。
1、它的優點:
(1)關鍵字驅動,自定義用戶關鍵字。
(2)支持測試日志和報告生成。
(3)支持系統關鍵字開發,可擴展性好。
(4)支持數據庫操作。
2、它的缺點:
接口測試用例寫起來不簡潔。
需要掌握特定語法。
*** Settings ***
Library RequestsLibrary
Library Collections
*** Test Cases ***
test_get_event_list # 查詢發布會(GET請求)
${payload}= Create Dictionary eid=1
Create Session event http://127.0.0.1:8000/api
${r}= Get Request event /get_event_list/ params=${payload}
Should Be Equal As Strings ${r.status_code} 200
log ${r.json()}
${dict} Set variable ${r.json()}
#斷言結果
${msg} Get From Dictionary ${dict} message
Should Be Equal ${msg} success
${sta} Get From Dictionary ${dict} status
${status} Evaluate int(200)
Should Be Equal ${sta} ${status}
總結:不考慮,沒人願意這么寫接口用例。
五、HttpRunner框架:
HttpRunner 是一款面向 HTTP(S) 協議的通用測試框架,只需編寫維護一份 YAML/JSON 腳本,即可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求, 網址:https://cn.httprunner.org/ 官網已經有很詳細的介紹。
1、它的優點:
基於YAML/JSON格式,專注於接口本身的編寫。
接口編寫簡單
生成測試報告
接口錄制功能。
2、它的缺點:
沒有編輯器插件對語法校驗,容易出錯。
官方文檔沒有詳細的說明。
擴展不方便。
[
{
"config": {
"name": "testcase description",
"variables": [],
"request": {
"base_url": "http://127.0.0.1:5000",
"headers": {
"User-Agent": "python-requests/2.18.4"
}
}
}
},
{
"test": {
"name": "test case name",
"request": {
"url": "/api/get-token",
"headers": {
"device_sn": "FwgRiO7CNA50DSU",
"user_agent": "iOS/10.3",
"os_platform": "ios",
"app_version": "2.8.6",
"Content-Type": "application/json"
},
"method": "POST",
"date": {"sign": "958a05393efef0ac7c0fb80a7eac45e24fd40c27"}
},
"validate": [
{"eq": ["status_code", 200]},
{"eq": ["headers.Content-Type", "application/json"]},
{"eq": ["content.success", true]},
{"eq": ["content.token", "baNLX1zhFYP11Seb"]}
]
}
}]
總結:可以考慮,至於接口數據的初始化可能需要單獨處理。
六、Postman+Newman框架:
postman + Newman + Jenkins 實現接口自動化框架,postman 方便日常的調試,非常的方便,測試的斷言,設置前置條件,環境變量,response 參數提取 非常方便,我在日常工作中經常使用 postman進行接口的調試。postman高級的功能可以付費進行定制化,官網文檔地址: https://learning.getpostman.com/docs/
七、Jmeter+Ant框架:
1、它的優點:
支持參數化
不需要寫代碼
2、它的缺點:
創建接口用例效率不高。
不能生成查看每一個接口執行情況的測試報告。
總結:不考慮,接口編寫不方便,最主要是不能生成測試報告,如果做接口性能的話可以考慮。
1、它的優點:
足夠靈活強大: 分層測試、數據驅動、測試報告,集成CI...
2、它的缺點:
有一定的學習成本
數據文件:
{
"test_case1": {
"key": "value1",
"status_code": 200
},
"test_case2": {
"key": "value2",
"status_code": 200
},
"test_case3": {
"key": "value3",
"status_code": 200
},
"test_case4": {
"key": "value4",
"status_code": 200
}}
測試用例:
import requests
import unittest
from ddt import ddt, file_data
@ddtclass InterfaceTest(unittest.TestCase):
def setUp(self):
self.url = "http://httpbin.org/post"
def tearDown(self):
print(self.result)
@file_data("./data/test_data_dict.json")
def test_post_request(self, key, status_code):
r = requests.post(self.url, data={"key": key})
self.result = r.json()
self.assertEqual(r.status_code, status_code)
總結:推薦使用,代碼相對簡單,功能足夠靈活。
十、總結: