全面評(píng)測(cè)哪個(gè)接口自動(dòng)化測(cè)試框架最好用?

大家都知道接口測(cè)試框架有很多,到底哪個(gè)最好用呢?他們都有哪些優(yōu)缺點(diǎn)?今天我們就來(lái)評(píng)測(cè)一下這些框架。

 Java Rest-assured:是使用代碼來(lái)實(shí)現(xiàn)接口的請(qǐng)求,封裝業(yè)務(wù)流程,對(duì)于公司的業(yè)務(wù)支持比較高,靈活度很強(qiáng),可以通過(guò)代碼的方式打造自己公司的接口自動(dòng)化框架,上手有點(diǎn)難度,需要有Java 編程基礎(chǔ),才可以使用。

 Python?+ Request 框架:是使用代碼來(lái)實(shí)現(xiàn)接口的請(qǐng)求,封裝業(yè)務(wù)流程,對(duì)于公司的業(yè)務(wù)支持比較高,可以根據(jù)業(yè)務(wù)的靈活度來(lái)定制化開(kāi)發(fā)接口框架,再加上Jenkins 就可以持續(xù)化集成。上手有點(diǎn)難度,需要有Python 編碼的基礎(chǔ),才可以使用。

Robot Framework

機(jī)器人框架是一個(gè)通用的開(kāi)放源碼自動(dòng)化框架,用于驗(yàn)收測(cè)試、驗(yàn)收測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(ATDD)和機(jī)器人過(guò)程自動(dòng)化(RPA)。它具有易于使用的表格測(cè)試數(shù)據(jù)語(yǔ)法,并利用關(guān)鍵字驅(qū)動(dòng)的測(cè)試方法.它的測(cè)試功能可以通過(guò)用Python或Java實(shí)現(xiàn)的測(cè)試庫(kù)來(lái)擴(kuò)展,用戶(hù)可以使用與創(chuàng)建測(cè)試用例相同的語(yǔ)法從現(xiàn)有的測(cè)試庫(kù)中創(chuàng)建新的更高級(jí)別的關(guān)鍵字? 。

  HttpRunner 是一款面向 HTTP(S) 協(xié)議的通用測(cè)試框架,只需編寫(xiě)維護(hù)一份 YAML/JSON 腳本,即可實(shí)現(xiàn)自動(dòng)化測(cè)試、性能測(cè)試、線上監(jiān)控、持續(xù)集成等多種測(cè)試需求,中文地址? https://cn.httprunner.org/ 官網(wǎng)已經(jīng)有很詳細(xì)的介紹。

 robot framework

  優(yōu)點(diǎn)

關(guān)鍵字驅(qū)動(dòng),自定義用戶(hù)關(guān)鍵字。

支持測(cè)試日志和報(bào)告生成。

支持系統(tǒng)關(guān)鍵字開(kāi)發(fā),可擴(kuò)展性好。

支持?jǐn)?shù)據(jù)庫(kù)操作。

  缺點(diǎn)

接口測(cè)試用例寫(xiě)起來(lái)不簡(jiǎn)潔。

需要掌握特定語(yǔ)法。

*** Settings ***

Library? ? RequestsLibrary

Library? ? Collections

*** Test Cases ***

test_get_event_list? ? # 查詢(xún)發(fā)布會(huì)(GET請(qǐng)求)

${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()}

#斷言結(jié)果

${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}

  結(jié)果:不考慮,沒(méi)人愿意這么寫(xiě)接口用例。

postman + Newman? + Jenkins?

  postman + Newman? + Jenkins 實(shí)現(xiàn)接口自動(dòng)化框架,postman 方便日常的調(diào)試,非常的方便,測(cè)試的斷言,設(shè)置前置條件,環(huán)境變量,response 參數(shù)提取 非常方便,我在日常工作中經(jīng)常使用 postman進(jìn)行接口的調(diào)試。postman高級(jí)的功能可以付費(fèi)進(jìn)行定制化(我還沒(méi)有試驗(yàn)過(guò)付費(fèi)的功能,在日常工作中 免費(fèi)版本就已經(jīng)夠使用的了)。官網(wǎng)文檔 https://learning.getpostman.com/docs/

JMeter

Jmeter?可以做于接口自動(dòng)化工具,也可以用于性能測(cè)試,在性能測(cè)方面很強(qiáng)大,我在工作中用的不多,Vue+Flask 搭建自己公司的接口測(cè)試平臺(tái),可以自由定制化自己公司的業(yè)務(wù),實(shí)現(xiàn)公司特殊的需求,接口測(cè)試平臺(tái),對(duì)于測(cè)試的開(kāi)發(fā)能力有要求,前端 Vue ,后端 Flask & Django 框架,代碼能力要求高,前后端的技術(shù)都需要懂。

????JMeter

優(yōu)點(diǎn)

支持參數(shù)化

不需要寫(xiě)代碼

  缺點(diǎn)

創(chuàng)建接口用例效率不高。

不能生成查看每一個(gè)接口執(zhí)行情況的測(cè)試報(bào)告。

  總結(jié):不考慮,接口編寫(xiě)不方便,最主要是不能生成測(cè)試報(bào)告,如果做接口性能的話(huà)可以考慮。

HttpRunner

優(yōu)點(diǎn):

基于YAML/JSON格式,專(zhuān)注于接口本身的編寫(xiě)。

接口編寫(xiě)簡(jiǎn)單

生成測(cè)試報(bào)告

接口錄制功能。

  缺點(diǎn):

沒(méi)有編輯器插件對(duì)語(yǔ)法校驗(yàn),容易出錯(cuò)。

官方文檔沒(méi)有詳細(xì)的說(shuō)明。

擴(kuò)展不方便。

[

{

"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"]}

]

}

}]

  總結(jié):可以考慮,至于接口數(shù)據(jù)的初始化可能需要單獨(dú)處理。

gauge

  BDD行為驅(qū)動(dòng)測(cè)試框架——gauge

  優(yōu)點(diǎn):

行為文件與腳本文件分離,本質(zhì)上實(shí)現(xiàn)了數(shù)據(jù)驅(qū)動(dòng)。

功能強(qiáng)大靈活,本質(zhì)上還用Python寫(xiě)接口用例。

自動(dòng)生成測(cè)試報(bào)告。

VS Code有支持插件

  缺點(diǎn)

門(mén)檻略高,需要了解BDD的用法。

需要會(huì)markdworn語(yǔ)法

  行為描述文件:

 ## test post request

  * post "http://httpbin.org/post" interface

  |key? | status_code|

  |------|-----------|

  |value1|200? ? ? ? |

  |value2|200? ? ? ? |

  |value3|200? ? ? ? |

  測(cè)試腳本:

  ……

  @step("post <url> interface <table>")

  def test_get_request(url, table):

  values = []

  status_codes = []

  for word in table.get_column_values_with_name("key"):

  values.append(word)

  for word in table.get_column_values_with_name("status_code"):

  status_codes.append(word)

  for i in range(len(values)):

  r = requests.post(url, data={"key": values[i]})

  result = r.json()

  assert r.status_code == int(status_codes[i])

 總結(jié):推薦使用,BDD有一定門(mén)檻,看測(cè)試人員的學(xué)些能力和接受速度。

?Unittest+Request+HTMLRunner

利用現(xiàn)有的框架和庫(kù)自己定制:Unittest+Request+HTMLRunner

  優(yōu)點(diǎn):

足夠靈活強(qiáng)大: 分層測(cè)試、數(shù)據(jù)驅(qū)動(dòng)、測(cè)試報(bào)告,集成CI...

  缺點(diǎn):

有一定的學(xué)習(xí)成本

  數(shù)據(jù)文件:

{

"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

}}

  測(cè)試用例:

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)

 總結(jié):推薦使用,代碼相對(duì)簡(jiǎn)單,功能足夠靈活。

  我花了兩天時(shí)間整理這些框架,其實(shí)重點(diǎn)就是了解HttpRunner 和 gauge 。

  HttpRunner 沒(méi)有編輯器插件,本身就是一個(gè)YAML/JSON配置文件,所以配置寫(xiě)錯(cuò)了,但只要是合法的YAML/JSON格式,也看不出來(lái),只有運(yùn)行的過(guò)后才知道。就像你用記事本寫(xiě)代碼一樣,只有運(yùn)行了才知道代碼有沒(méi)有寫(xiě)錯(cuò)。

  另外,擴(kuò)展起來(lái)也不是特別方便,單獨(dú)用python實(shí)現(xiàn)一些函數(shù):在json文件中

  {"device_sn": "${gen_random_string(15)}"}

  以這樣的方式引用gen_random_string() 函數(shù)。

  gauge我已經(jīng)分享過(guò)兩篇基礎(chǔ)文章了,雖然用BDD拿來(lái)做接口理念不搭,但并不是不可以,唯一的缺點(diǎn)是用BDD來(lái)描述接口行為不合適,其他的都沒(méi)毛病,可以參數(shù)化,斷言寫(xiě)起來(lái)也簡(jiǎn)單,測(cè)試報(bào)告也漂亮,本質(zhì)上還是用Python實(shí)現(xiàn)一些功能,所以非常靈活。

  unittest + requests + HTMLTestRunner是我最熟悉的方案,幾乎沒(méi)什么短板。以前通過(guò)這種方案寫(xiě)過(guò)很多測(cè)試用例,這次把ddt加上似乎更完美了。

總結(jié)

  對(duì)于單接口,變化不多的可以使用? Postman、 Jmeter、HttpRunner框架就可以滿(mǎn)足了,需要多個(gè)接口組合滿(mǎn)足于一些場(chǎng)景的,需要自己編寫(xiě)代碼來(lái)實(shí)現(xiàn)了 比如:

  登錄,提取token,查詢(xún)商品ID 訂單ID 進(jìn)行購(gòu)買(mǎi)商品,支付,以及查詢(xún)用戶(hù)購(gòu)買(mǎi)訂單狀態(tài)

對(duì)于一些業(yè)務(wù)場(chǎng)景涉及多個(gè)接口的,需要使用代碼的方式來(lái)查詢(xún)接口需要的前置信息,如 token, 商品ID,訂單ID,訂單狀態(tài),以實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景的接口功能測(cè)試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容