99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時代python 如何使用HttpRunner做接口自動化測試
python 如何使用HttpRunner做接口自動化測試
2020-09-18
收藏

作者:星安果 

來源:AirPython

1. 前言

原始測試金子塔包含 3 層,分別是:UI 自動化測試、接口服務(wù)測試、單元測試

其中,

單元測試是對軟件的最小可測試單元進(jìn)行檢查和驗(yàn)證,也是產(chǎn)生效率最大的一項(xiàng)測試

接口服務(wù)測試分為模塊接口測試和協(xié)議接口測試

UI 測試主要是為了取代人力操作,通過 UI 自動化去模擬操作,降低回歸測試的成本

考慮到投入產(chǎn)出率,大部分企業(yè)都會將測試重點(diǎn)放在接口自動化測試這一項(xiàng)上

接口自動化主流方案包含:python + Pytest/Unittest、Java + TestNG、Postman、HttpRunner、Postman、Jmeter、RobotFramework 等

本篇文章將和大家一起聊聊 HttpRunner 做接口自動化的流程

2.介紹及安裝

HttpRunner 是一款完全由 Python 語言編寫的測試框架,并且簡單、優(yōu)雅、功能強(qiáng)大,同時支持 HTTP 和 HTTPS

HttpRunner 主要包含下列特征

  • 繼承 Requests 庫的全部特性,輕松實(shí)現(xiàn) HTTP(S) 的各種測試需求
  • 以 YAML 和 JSON 定義測試用例,通過 pytest 去運(yùn)行
  • 基于 HAR 文件,實(shí)現(xiàn)接口的錄制及用例的生成功能
  • 支持 variables、extract、validate、hook 等關(guān)鍵字,可以創(chuàng)建復(fù)雜的測試場景
  • 借助輔助插件 debugtalk.py,在測試腳本中輕松實(shí)現(xiàn)復(fù)雜的動態(tài)計(jì)算邏輯
  • 集成 jmespath,方便提取變量、驗(yàn)證 JSON 響應(yīng)
  • 集成 pytest,支持大量的插件
  • 集成 allure 生成強(qiáng)大的測試報告
  • 集成 locust,非常方便做性能測試
  • 執(zhí)行方式采用 CLI 調(diào)用形式,可以和 Jenkins 等持續(xù)集成工具完美結(jié)合

使用 pip 安裝 HttpRunner 穩(wěn)定版本

# 安裝 HttpRunner 穩(wěn)定版本
pip3 install httprunner

需要指出的是,HttpRunner V3 版本對比 V2 版本進(jìn)行了大量優(yōu)化,特別是測試用例的表現(xiàn)形式,強(qiáng)烈建議安裝 V3 版本

3.常見命令

安裝完 HttpRunner 之后,就可以使用下面幾個命令了

1、hrun

HttpRunner 最主要的命令,主要作用是運(yùn)行 Py/YAML/JSON 格式的測試用例

2、hmake

將 YAML/JSON 格式的測試用例轉(zhuǎn)換為 Python 文件

ps:HttpRunner V3 以 Python 文件保存測試用例,V2 之前是以 JSON/YAML 格式保存測試用例

3、har2case

har2case 作用是將 HAR 格式的請求文件轉(zhuǎn)為 YAML/JSON/Py 格式的測試用例

ps:一般網(wǎng)絡(luò)請求都可以直接以 AHR 格式保存到本地

4、locusts

HttpRunner 集成了 locusts 命令,可以利用它直接進(jìn)行性能測試

5、其他命令

另外,通過 httprunner -h 命令可以查看幫助;使用 httprunner -V 命令可以查看 HttpRunner 的版本信息

4.小試牛刀

先通過一個簡單的接口聊聊 HttpRunner 的使用步驟

目標(biāo)接口 - GET:

https://postman-echo.com/get?foo1=bar1

第一步:抓包,保存為 HAR 文件

打開 Charles 或 Fiddler,配置 Chrome 瀏覽器的代理, 使Charles 可以對瀏覽器進(jìn)行抓包

使用 Chrome 訪問這個接口地址,模擬一次請求,然后在 Charles 中找到對應(yīng)的請求,右鍵保存為 HAR 文件

第二步:轉(zhuǎn)為測試用例

使用 har2case 命令將 HAR 文件轉(zhuǎn)換為測試用例,V3 版本默認(rèn)生成測試用例格式為 Py 文件

查看測試用例后發(fā)現(xiàn),HttpRunner 自動生成的測試用例結(jié)構(gòu)十分清晰,二次修改也非常方便

第三步,運(yùn)行測試用例

使用 hrun 命令運(yùn)行測試用例,另外,加上 --html 參數(shù),可以在本地生成測試報告

# 生成測試報告
hrun demo_test.py --html=report.html

打開測試報告,可以查看測試用例的執(zhí)行結(jié)果及日志

5.腳手架

HttpRunner 同樣提供了腳手架,方便我們快速創(chuàng)建標(biāo)準(zhǔn)化項(xiàng)目

# 使用腳手架創(chuàng)建一個項(xiàng)目
httprunner startproject demo

生成項(xiàng)目的目錄結(jié)果如下:

其中,

1、debugtalk.py

一般用于自定義 Python 函數(shù),方便測試用例調(diào)用

比如:某個請求參數(shù)需要通過一段加密邏輯生成,這時可以自定義一個函數(shù)寫在 debugtalk.py 文件中

2、har

從抓包工具、Postman、瀏覽器保存的網(wǎng)絡(luò)請求

3、reports

生成測試報告的目錄

需要指出的是,除了使用自帶的 pytest-html 插件生成測試報告,HttpRunner 還可以通過 allure 生成功能更加強(qiáng)大的測試報告

4、testcases

用于放置測試用例

使用 hrun 命令可以直接運(yùn)行腳手架項(xiàng)目

# 運(yùn)行腳手架項(xiàng)目
# hrun 項(xiàng)目名稱
hrun demo

6.最后

受限于篇幅,上面僅僅介紹了 HttpRunner 最基本的使用方法

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }