自動化測試框架爲什麼選擇 Pytest,而不是 Robot Framework?

Python 自動化測試框架 的優缺點對比,歡迎留言一起交流,進階學習文末加羣。
原文鏈接:https://testerhome.com/topics/17566

之前曾提問請教過 Pytest 和 Robot Framework
的優缺點對比,由於網上關於這方面的信息比較少,收到大家的反饋建議,十分感謝,現在是該總結一下了,歡迎大家一起交流探討。

在對比框架優缺點之前,先清楚框架的意義是什麼?什麼是“好的測試框架”必備的特性?

什麼是框架?

框架 ( Framework ) 是整個或部分系統的可重用設計,框架是用來解決代碼的組織及運行控制問題的。

在我們編寫自動化腳本的時候,經常需要讀取配置文件,讀取數據文件,發送請求,記錄日誌,連接並對比數據庫數據。每個腳本里都重寫一遍各種方法不僅工作量大而且易錯。所以我們需要把公共的方法提取出來,封裝成單獨的模塊,放到公用方法包裏。另外配置文件,數據文件,日誌等我們也需要分類存到不同的文件夾下。
這種對公共方法的封裝及對腳本及配置文件怎麼組織的設計就叫做框架。

同時,一般框架除了完成對代碼及配置文件的組織之外還要提供運行的控制功能。比如批量執行,分模塊執行,生成報告,異常處理等等。

總結爲以下 3 點:

  • 封裝公共方法

  • 代碼及配置文件的組織

  • 執行控制

什麼是測試框架?

一個完整的測試腳本(用例)一般包含以下幾個步驟:

  • 環境準備或檢查

  • 執行業務操作

  • 斷言結果

  • 清理環境

而測試框架一般還要完成用例加載,批量執行,異常控制,結果輸出等功能。基礎的測試框架一般只提供執行控制方面的功能。

測試框架應具有的特點

  • 易用性:編寫用例,執行用例,生成報告及定位問題方便;

  • 健壯性:穩定,比如 timeout 機制等;

  • 擴展性:插件;

  • 靈活性:用例組織或執行的靈活性,Fixture 功能(不同範圍的 setUp 和 tearDown)等;

  • 定製性:二次開發方便;

Pytest 與 Robot Framework 對比

Pytest 框架特性

Pytest 是一款強大的 Python 測試工具,它具有易於上手,功能強大,第三方插件豐富,效率高,可擴展性好,兼容性強等特點,實際上,
越來越多的項目開始放棄 Unittest 和 Nose 以及 Robot Framework ,轉而使用 Pytest,比如 Mozilla 和
Dropbox
. 因爲 Pytest 可以提供更豐富功能,包括 assert 重寫,第三方插件,以及其他測試工具無法比擬的 fixture 模型。

Pytest
可以自動找到測試用例執行,並彙報測試結果。它有豐富的基礎庫,可以大幅度提高用戶編寫測試用例的效率。它具備非常強的可擴展性,用戶可以自己編寫插件,或者安裝第三方插件。Pytest
可以很方便地與其他工具一起使用,比如持續集成、web 自動化測試等。

Pytest 也具有 Robot Framework 所聞名的驗收測試能力。Pytest
最好的特性之一是,它提供了測試用例的詳細失敗信息,使開發者可以快速準確地改正問題。它兼容最新版本的 Python,還兼容 unittest、doctest
和 nose,開箱即用。Pytest 還有各種可用插件來給現有測試技術和測試用例增加更多功能和多樣性。事實上,在其活躍社區中有 300
多個可用的插件。該平臺設計用於編寫更簡單,錯誤率更小的代碼。你可以將 Pytest 與諸如 Selenium 和 Splinter
之類的圖形用戶界面一起使用,來使測試工作更輕鬆

Pytest 優於其他測試框架的地方:

  • 簡單測試可以很簡單的編寫

  • 複雜測試也可以很簡單編寫

  • 簡單靈活,容易上手

  • 支持參數化

  • 能夠支持簡單的單元測試和複雜的功能測試,還可以用來做 selenium/appnium 等自動化測試、接口自動化測試(Pytest+requests)

  • Pytest 具有很多第三方插件,並且可以自定義擴展,比較好用的如 Pytest-selenium(集成 selenium)、Pytest-allure-adaptor(生成漂亮的 allure 報告)、Pytest-rerunfailures(失敗 case 重複執行)、Pytest-xdist(多 CPU 分發分佈式執行)等

  • 測試用例的 skip 和 xfail 處理

  • 可以很好的和 jenkins 集成

  • 測試代碼可讀性強

  • 易於上手

  • 斷言失敗僅使用原生關鍵字 assert,而不是 self.assertEqual(),或者 self.assertLessThan()

  • Pytest 可以運行 unittest 和 nose 編寫的測試用例

  • 不依賴特定的 Python 版本,Python2 和 Python3 都可以使用最新版本

  • 正在快速壯大的社區開發和維護

Robot Framework 框架(簡稱 rf)

優點

  • 關鍵字驅動,自定義用戶關鍵字。

  • 支持測試日誌和報告生成。

  • 支持系統關鍵字開發,可擴展性好。

  • 支持數據庫操作。

缺點

  • 測試用例寫起來不簡潔。

  • 需要掌握特定語法,學習成本高

  • 只支持 Python2,不支持 Python3,容易導致測試團隊 Python 版本不統一

  • 界面反應速度慢,經常卡死

  • 導入測試庫有時會異常

  • 對於測試團隊限制過多,不利於結合具體業務定製功能

  • 問題調試困難

  • 輸出的日誌結構複雜,多爲英文,不容易看懂

  • 維護困難,超過 2000 條用例就是噩夢

  • 接口測試,rf 一般是順序執行的,但在接口測試中需要併發測試,這種測試需要加入寫入的併發關鍵字

    *** 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}

評判結果:不考慮,沒人願意這麼寫接口用例。

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

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