基于HttpRunner4.0的接口自動化測試實(shí)踐[內(nèi)含用例設(shè)計(jì)和編寫]

前言
前幾天逛測試論壇,發(fā)現(xiàn)HttpRunner竟然推出v4.0版本,感到非常的激動和歡喜。對于HttpRunner工具,在我上家公司是使用HttpRunner1.0版本為基礎(chǔ)二次開發(fā)成公司通用接口自動化框架并且集成到測試管理平臺,直到現(xiàn)在也一直服務(wù)公司內(nèi)部業(yè)務(wù)測試,不僅可以快速進(jìn)行需求自動化測試、還可以進(jìn)行回歸測試驗(yàn)證服務(wù)框架升級等需求。
回想前幾年,當(dāng)時好用的接口自動化框架和平臺并不多,接口自動化框架大多數(shù)都是基于pytest寫的純代碼的形式的,還是需要測試人員有代碼能力,當(dāng)時我們急需要一款不用寫代碼,并且可以集成到CICD上。
雖然現(xiàn)在這家公司內(nèi)部已經(jīng)有一套統(tǒng)一的接口自動化工具,但是我還是希望讓更多的人看到HttpRunner這么優(yōu)秀的工具存在。
版本對比
這個圖包含HttpRunner1到4的功能對比:

在功能升級上,如下幾個功能是我比較期待的功能:
多協(xié)議支持: 現(xiàn)在公司內(nèi)部一般都存在多個協(xié)議,支持了多協(xié)議測試,這個功能完全可以使用一套接口測試工具解決,不用再切換其他工具了。
腳本轉(zhuǎn)換工具: 支持了其他接口周邊工具,比如可以從swagger就能轉(zhuǎn)換成接口測試用力,極大的提高了工作效率。
性能測試: 在早期的HttpRunner是使用Locust作為性能引擎發(fā)壓,性能上還有些不足。HttpRunner4.0使用boomer作為性能引擎發(fā)壓,boomer是golang編寫的,性能強(qiáng)勁。
安裝
HttpRunner v4 采用 Golang 開發(fā),已針對主流操作系統(tǒng)預(yù)編譯了二進(jìn)制文件,只需在系統(tǒng)終端中執(zhí)行一條命令即可完成安裝部署。
安裝命令如下:
bash?-c?"$(curl?-ksSL?https://httprunner.com/script/install.sh)"

驗(yàn)證是否安裝成功:
hrp?--help

查看版本命令:
hrp?-v
hrp?version?v4.0.0
體驗(yàn)
創(chuàng)建項(xiàng)目
有了HttpRunner工具以后,需要本地創(chuàng)建一個工程項(xiàng)目。
恰好HttpRunner支持使用腳手架創(chuàng)建工程項(xiàng)目,會自動生成需要的工程結(jié)構(gòu)。
執(zhí)行命令如下:
hrp?startproject?apiDemo

執(zhí)行命令完成后,在本地會創(chuàng)建一個"apiDemo"文件夾。
如下是項(xiàng)目工程的目錄結(jié)構(gòu):

會自動創(chuàng)建一個python虛擬環(huán)境、debugtalk、testcase、report等結(jié)構(gòu)。
用例組織
其中,testcases文件夾中包含了多個示例測試用例。主要包含基本配置、請求配置兩部分。
config(基本配置): 主要配置用例的公共參數(shù)、請求host等參數(shù)。
teststeps(用例配置: 主要配置用例的接口path、請求參數(shù)、斷言參數(shù)等。teststeps可以包含多個測試用例,執(zhí)行順序是從上到下順序執(zhí)行。

用例Case中,可以引用變量和調(diào)用函數(shù)
變量引用: 約定通過?的形式來引用變量,例如 fool1或{foo1},變量定義需要在config的variables定義。
函數(shù)調(diào)用:約定通過調(diào)用插件函數(shù){sum_two(1, 2)},函數(shù)調(diào)用需要在debugtalk.py代碼中編寫。
比如需要用例需要執(zhí)行兩個參數(shù)求合,這種符合業(yè)務(wù)場景的方法,在debugtalk.py編寫。

debugtalk.py需要通過 funppy 進(jìn)行 register 和 serve() 即可。
把sum_two_int函數(shù)映射成sum_two函數(shù),便于在用例中調(diào)用執(zhí)行。
if?__name__?==?'__main__':
????funppy.register("sum_two",?sum_two_int)
????funppy.serve()
實(shí)戰(zhàn)
到此為止,我們對HttpRunner4.0有了基本認(rèn)識,接下使用項(xiàng)目實(shí)戰(zhàn)一把。
開源的電商項(xiàng)目mall作為本次項(xiàng)目案例.本文主要介紹,從項(xiàng)目部署 => 需求分析 => 用例設(shè)計(jì) API測試,微服務(wù)API測試的整個過程。
項(xiàng)目部署
后臺管理系統(tǒng),如下圖:

GitHub地址:
https://github.com/macrozheng/mall
部署教程:
https://macrozheng.github.io/mall-learning/#/README
下載代碼
git?clone?https://github.com/macrozheng/mall.git
打包代碼
mvn?install

部署命令
nohup?java?-jar?mall-admin-1.0-SNAPSHOT.jar?&
mall后端服務(wù)集成swagger,可以自動生成接口文檔,swagger地址如下:
http://localhost:8080/swagger-ui.html#/

打開上面地址,出現(xiàn)下圖說明訪問正常。
需求分析
mall是一個完整的電商管理系統(tǒng),包含:商品管理、訂單管理、營銷模塊等。

本次需求模塊是"廣告列表"功能。

梳理如下功能點(diǎn):

測試用例
首先我們需要對測試的場景進(jìn)行抽離,明確場景的接口、參數(shù)等。

接口測試用例編寫

編寫登錄測試接口
我們測試的項(xiàng)目,需要先執(zhí)行登錄接口。
這里考慮到把登錄接口獨(dú)立出來成mall_login_testcase.yml,為了能方便其他接口用例方便復(fù)用。

從登錄接口返回?cái)?shù)據(jù)結(jié)果中得到鑒權(quán)參數(shù),傳遞給其他接口放到請求頭中。
其他接口測試用例在teststeps中引入登錄用例即可。

編寫廣告測試接口
創(chuàng)建廣告接口為例子,根據(jù)接口請求參數(shù)定義好參數(shù)。由于為了讓每次創(chuàng)建的廣告是唯一的,需要讓name參數(shù)每次不一樣,比如使用固定前綴 + 時間戳的方式,就能做到唯一。

在debugtalk.py文件中創(chuàng)建get_time函數(shù)返回當(dāng)前時間戳,然后在變量中引入即可。
變量引入:
variables:
????ad_name:?ad_name_${get_time()}
驗(yàn)證結(jié)果這塊,支持判斷結(jié)果等于、不等于、大于等于等常見判斷方法,在這里是使用eq這種縮寫關(guān)鍵字替代。
validate:
????-?eq:?["status_code",?200]
????-?ge:?["body.data",?1]
在刪除廣告接口的入?yún)⑿枰?strong style="outline: 0px;max-width: 100%;font-size: inherit;color: inherit;line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;">廣告id,這里需要動態(tài)的從查詢列表中獲取,使用extract關(guān)鍵字得到創(chuàng)建接口成功后的廣告id。

執(zhí)行測試
根據(jù)需要測試的接口用例完成接口用例的編寫設(shè)計(jì),嘗試執(zhí)行一下接口測試用例腳本。
執(zhí)行命令如下:
hrp?run?testcases/mall_ad_testcase.yml?l?--gen-html-report
在執(zhí)行過程中,會打印請求參數(shù)、響應(yīng)參數(shù),便于調(diào)試用例。

執(zhí)行成功后,會在reports目錄下生成報告,是html格式使用瀏覽器打開即可。

Summary部分執(zhí)行情況等信息、執(zhí)行時間、執(zhí)行平臺等參數(shù)。
Details部分是按照用例執(zhí)行順序展示,點(diǎn)擊log日志,可以看到Request和Response兩部分詳細(xì)信息。

結(jié)語
本文介紹了,HttpRunner4.0安裝到使用上的一些實(shí)戰(zhàn)效果,可以證明的是HttpRunner4.0可以滿足絕大工作場景并且在使用過程中也沒什么bug,希望大家能上手使用。
github地址: https://github.com/httprunner/httprunner
