測試行業兩大經典難題,是怎麼被HttpRunner解決掉的?

測試行業面臨兩個經典問題。

一是工具多。每個工具只能滿足特定的一個部分,接口工具只能做接口,性能工具的只能做性能,而實際工作往往需要多個工具配合。

二是需要加大投入產出比,用最少的投入獲得最大的回報。

舉個例子:編寫接口測試開發代碼需要使用:Requests。但只使用Requests工具未免有些小缺陷,必須配合單測Unitest和Charles才能好用。代碼編寫通過後,又得使用jenkins進行項目部署。

於是,我們想:“是不是有一款工具,集合了上面所有功能?這樣我就可以輕裝上陣!”

1 HttpRunner是什麼?

HttpRunner是什麼?它就是讓你輕裝上陣的工具,這是一款面向 HTTP(S) 協議的通用測試框架。

只需編寫維護一份YAML/JSON腳本,即可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求。

HttpRunner基於Python,可以運行在 macOS、Linux、Windows
系統平臺上。讀到這裏,你是否有疑問,HttpRunner真是個全能手,既然它可以像Requests那樣便利的操作HTTP,又可以做到jenkins的持續集成,那它的內部一定藏着大量乾貨!

圖片來自網絡,侵權即刪

2 HttpRunner的設計理念

不,你想錯了,HttpRunner並沒有實現這麼多工具!說到這裏,不得不介紹一下HttpRunner的設計理念

  • 充分複用優秀的開源項目,不追求重複造輪子,而是將強大的輪子組裝成戰車

  • 遵循約定大於配置的準則,在框架功能中融入最佳工程實踐

  • 追求投入產出比,一份投入即可實現多種測試需求

於是可以得出這個結論: HttpRunner=requests+jenkins+locust+...
哦!好像明白了,它並不是閉門造輪子,而是通過整合許多工具,實現了很多功能。比如我們發HTTP請求,它會調用Request。HttpRunner只是更多的去做整合類似的工具。同時他們也在強調,希望投入非常少,回報非常豐厚,由於整合的緣故,學習HttpRunner的成本會非常低,如果你之前用過Requests,現在使用HttpRunner的HTTP協議,學習成本幾乎爲零。下圖清晰的展示了HttpRunner的工具集。

它們的圖標也蘊含着整合的概念,從外部視角來看,拼圖代表它是整體中的一個部分。從內部視角呢,它實現了一個模塊化的拆分,比如用例的時候分爲準備,初始化,加載,運行。其實它遵循了unix哲學,如果你上過shell課程,你會發現shell也是簡單的命令組合,但結果卻非常強大。

ps:圖標的含義不是我憑空想象,而是HttpRunner作者親口相傳,具體內容請關注霍格沃茲測試學院:
HttpRunner作者與您分享開發經驗!

3 性能指標

可是它有這麼多的功能,好用嗎?HttpRunner有自己的性能體系,它們關注三個指標:測試用例數,執行頻率和運行成功率。很多人對指標沒有概念,認爲這是比較虛的東西,於是堅持三好原則:
好用就行,好看就行,好評就行
。其實並不是這樣,指標是測試必須要考慮和麪對的問題,因爲這是數據上的鐵證。HttpRunner用指標衡量自己,規範自身,下面介紹HttpRunner是如何落實三個指標的。

圖片來自網絡,侵權即刪

  • 測試用例數和覆蓋率有關係。大家所知的覆蓋率通常是指單元測試上的代碼覆蓋率,它是用來衡量測試好壞的指標,甚至,用代碼覆蓋率來考覈測試任務完成情況。就拿條件覆蓋舉例,它判定每個if表達式的結果是否被測試到了。測試用例數同理,是指測試用例的覆蓋率,它由用例的編寫,維護效率和學習成本決定。

  • 執行頻率能反應項目使用情況,於是對效率有足夠的要求,比如HttpRunner的分佈式執行高度,後面會有所涉及。

  • 最後的成功率很好理解,代表整個項目的穩定性。

三個指標相輔相成相互制約,HttpRunner靠什麼來提升這些指標?HttpRunner究竟有哪些特色?請繼續觀看。

4 能力檢閱

上面我們提到許多概念性的東西:設計理念,文化和指標等等。本小節會詳細講解HttpRunner的工作原理,帶你檢閱它的能力,去感受它的強大。首先,HttpRunner以YAML/JSON文件爲核心。你會驚訝,它僅用一份文件就實現了性能測試,持續集成,線上監控,生成測試數據等等,你必須要知道YAML/JSON文件的前世今生。

生成YAML/JSON文件有兩種方式:人工編寫和自動生成。人工編寫的代碼與Requests很像,比如下面是requests代碼:

HttpRunner的YAML/JSON文件對Requests進行精簡,提取出了主要部分。下面是HttpRunner的文件內容,它對Requests改動並不是很大,實現了一個功能最小描述。可以讓HttpRunner既簡潔又規範,讓你從Requests無縫轉換到HttpRunner。

HttpRunner爲什麼不直接採用requests格式,而是取功能最小描述呢?你會發現,每一個接口測試都包含三個部分:構造請求,發起請求,校驗。

雖然內容一樣,但每個人都有自己的代碼風格,如果風格不一樣,理解起來會很困難,HttpRunner採取精策略,做到了簡單易懂。

以上就是人工編寫的實例,實際工作中,手動編寫費時費力,於是自動生成YAML/JSON文件深入人心。你可以利用抓包工具:Charles,Fiddler,postman,用這些軟件抓取數據,然後生成har文件,HttpRunner可以把這har文件轉換成自己的YAML/JSON,後面會有簡單例子。整個過程就像下面這幅圖:

現在,你知道了如何產生YAML/JSON文件。HttpRunner可以利用YAML/JSON進行自動化測試,性能測試,持續集成,線上監控等……這麼多功能得益於複用原理,你跟着下面的圖片進行理解,HttpRunner使用Requests進行自動化測試,他們驚喜的發現LOCUST居然和Requests原理相同。

所謂性能測試,不過是多個設備,多個請求,於是與Requests同步進行性能測試。其次,Jenkins有着獨特的優點:持續集成和線上監控,HttpRunner利用Jenkins勾子,自動觸發這兩個操作。而測試數據生成則依賴於自動化測試代碼,編寫一段代碼,可以將指定輸入轉化爲測試數據。

以上是對HttpRunner功能的簡介,很多人有個疑問,HttpRunner不就是個整合工具嘛,他整合了Jenkins、Requests、LOCUST,它沒有自己的乾貨嗎?其實,除了整合,HttpRunner還做了一些非常優秀的借鑑,比如說下面幾個工具。

5 借鑑

整合是HttpRunner理念的一部分:我們不憑空造輪子。整合帶來了很多優點,包括無縫切換,零成本學習,工具穩定等等,但只會整合未免有點尷尬。

HttpRunner也有自己的核心功能。比如pytest有一個conftest.py文件,這是一個本地的per-
directory插件,在這裏你可以定義本目錄特定的鉤子和配置,它有什麼用呢?我們在編寫測試用的時候,會遇到登陸問題。這就要求每個用例先登錄後操作,conftest.py實現了這個功能,下面是項目結構:

ConftestFile  
    |conftest.py  
    |test1.py  
    |test2.py  
    |__init__.py  

代碼如下:

# conftest.py  
import pytest  
@pytest.fixture()  
def login():    
  print('login in')  
# test1.py  
def test_01(login):  
  print('\n----用例文件1測試用例1開始執行----')  
  print('login after : in test1->case test_01')  
  
# test2.py  
def test_02(login):  
  print('\n---用例文件2測試用例2開始執行---')  
  print('login after : in test1->case test_01')  

pytest -vs運行後,你會看到它的作用:每個文件下的測試用例都執行了login()方法,於是,我們使用conftest.py方便的解決了登陸問題。

test.py  
login in  
.  
------用例文件1測試用例1開始執行------  
login after : in test1->case test_01  
                                                        [ 50%]  
test2.py  
------conftest文件login方法開始執行------  
login in  
------conftest.py文件login方法執行結束------  
.  
------用例文件2測試用例2開始執行------  
login after : in test1->case test_01  
                                                        [100%]  
  
====== 2 passed in 0.04 seconds ======

HttpRunner用同樣的原理開發出了debugtalk.py。還不止於此,HttpRunner還吸收了load
runner的參數化機制,以及katalon的測試用例分層管理,katalon大家可能用的少,通常用它來做webUI的自動化測試,HttpRunner2.0版本才把它吸收進來,從這裏你可以看出,HttpRunner是集百家之能,做到了百花齊放,百家爭鳴。

HttpRunner的主要功能大概如此,當這些功能集合在一起,會產生一個體系,整個體系如下圖,個人開發只會涉及腳本開發用戶,它表示在本地實現本地運行,當我們需要更高要求,比如說上面三個指標,就到了相互協作和分佈式這一層,首先利用Gitlab進行推送,然後利用任務調動,把任務分發到幾個執行機,最後由多個執行機完成工作。

下面用一個demo快速上手,讓大家對HttpRunner有個簡單認識。

6 快速上手

這裏會演示一個簡單的項目,帶你快速上手HttpRunner,本項目以登陸幕布爲目標,你需要利用pip安裝下面的開發環境:

pip install httprunner

幕布是一個類似於思維導圖的工具,通過編寫文字可以自動生成導圖。

使用命令生成一個新的項目:

hrun --startproject demo

生成的目錄結構很清晰,還包括debugtalk.py,前面提過,它採用yaml或者jason,接下來利用Charles抓取登陸的數據包。

利用Charlse的filter過濾功能可以方便快速的找出想要的內容。

點擊登陸後,排除靜態資源,只關注動態的既可,切回幕布,點擊登陸。

找到需要的數據包,右鍵將它導出成har格式:

這裏注意,一定要選har格式,這是HttpRunner可識別的格式:

隨後,我們使用命令將har格式轉換爲YAML/JSON

har2case login.har

以ymal作演示,使用命令後,會生成下面的yaml文件:

但是很不幸,運行時,發生錯誤。報錯是因爲charles正在開啓,我們的數據包經過了charles,這裏兩種解決辦法:

第一種,在代碼中加入verify:false,讓他不檢測,另一個方法是關閉charles:

運行成功,下面是運行過程和生成的報告。

7 寫在最後

本篇文章討論了HttpRunner的文化,指標,核心技術,它做到了工具集成,也有自己的核心技術,最讓我們驚喜的是HttpRunner簡單易用。就像requests代碼和HttpRunner的YAML文件,你可以無縫切換,它是一款面向
HTTP(S)
協議的通用測試框架,你確實只需編寫維護一份YAML/JSON腳本,即可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求。本文章並沒有詳細講使用方法,更多的使用方法請關注
霍格沃茲測試學院 的視頻課程。會有更多驚喜等着你~

- 今日互動 -


歡迎文章下方留言並分享給其他測試小夥伴哦~

(別忘了 長按 加小助手微信: **jasmine07222 **

回覆“ 名企定向 ”即可入羣交流哦~)

往期好文推薦:內推 |
八月測試開發工程師內推職位列表

接口管理工具YApi怎麼用?顏值高、易管理、超好用
接口測試該怎麼做?持證上崗的Charles,可以幫你做什麼?

來霍格沃茲測試開發學社,學習更多軟件測試與測試開發的進階技術,知識點涵蓋web自動化測試 app自動化測試、接口自動化測試、測試框架、性能測試、安全測試、持續集成/持續交付/DevOps,測試左移、測試右移、精準測試、測試平臺開發、測試管理等內容,課程技術涵蓋bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相關技術,全面提升測試開發工程師的技術實力
QQ交流羣:484590337
公衆號 TestingStudio
點擊獲取更多信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章