天天看點

測試工具: 2019年測試自動化最佳Python架構

Pytest

pytest用于各種軟體測試,是測試自動化的頂級Python測試架構。 開源和易學,該工具可供QA團隊,開發團隊以及個人實踐團隊和開源項目使用。 如'斷言重寫'有用的功能,網際網路上的大多數項目,包括像Dropbox和Mozilla,已經從unittest(Pyunit)切換到pytest。 讓我們深入探讨一下這個Python架構的特殊之處。

  • 先決條件?

除了Pythonpytest不需要任何複雜的東西。

優點

  • 在Python測試社群中,在pytest到來之前,開發人員将他們的測試包含在大型類中。 然而,pytest帶來了革命,因為它使得以比以前更緊湊的方式編寫測試套件成為可能。
  • 其他測試工具要求開發人員或測試人員使用調試器或檢查日志并檢測特定值的來源。 Pytest可以幫助您編寫測試用例,使您能夠将所有值存儲在測試用例中,最後通知您哪個值失敗以及哪個值被斷言。
  • 測試更容易編寫和了解,因為代碼不需要那麼多。
  • Fixture是可以通過向測試函數添加參數來使用的函數。
  • pytest的開發人員釋出了一些有用的插件,使架構可擴充。 例如,pytest-xdist可用于執行并行測試,而無需使用不同的測試運作器。 單元測試也可以參數化,而無需複制任何代碼。
  • 為開發人員提供某些特殊routine,使測試用例編寫更簡單,更不容易出錯。 代碼也變得更短,易于了解。

缺點

pytest使用特殊routine這一事實意味着您必須在相容性方面做出妥協。 您将能夠友善地編寫測試用例,但是您将無法将這些測試用例與任何其他測試架構一起使用。

對于編寫功能測試用例和開發複雜架構,它比unittest更好,但如果你的目标是開發一個簡單的架構,它的優勢有點類似于Robot Framework。

  • 參考
https://china-testing.github.io/python_pytest_testing.html effective test cases

.

test automation using pytest and Selenium WebDriver

UnitTest,也稱為PyUnit

Unittest或PyUnit是Python附帶的單元測試的标準測試自動化架構。 它受到JUnit的高度啟發。 斷言方法和所有清理和設定例程由基類TestCase提供。 TestCase子類中每個方法的名稱以“test”開頭。 這允許它們作為測試用例運作。 您可以将load方法和TestSuite類用于組并加載測試。 您可以一起使用它們來建構自定義的測試運作器。 就像

Selenium testing with JUnit

一樣,unittest也能夠使用unittest-sml報告并生成XML報告。

作為Python标準庫的一部分,使用Unittest有幾個優點。

  • 開發人員不需要安裝任何其他子產品。
  • Unittest是xUnit的衍生産品,其工作原理與其他xUnit架構類似。 沒有強大Python背景的人也容易使用。
  • 您可以以更簡單的方式運作單個測試用例。 您需要做的就是在終端上指定名稱。 輸出也很簡潔,使得架構在執行測試用例時更加靈活。
  • 測試報告在幾毫秒内生成。
  • 通常,snake_case用于命名python代碼。 但是由于這個架構受到Junit的啟發,傳統的camelCase命名方法仍然存在。 這可能很混亂。
  • 測試代碼的目的有時變得不清楚,因為它過多地支援抽象。
  • 需要較多的代碼。

盡管unittest是預設的測試自動化架構,但其工作原理和命名約定與标準Python代碼略有不同,并且需要太多的代碼,這使得它成為一個不太優選的Python測試自動化架構。參考:

better automation code

例子:

PyUnit and Selenium

Behave

我們都了解行為驅動開發,這是最新的基于靈活的軟體開發方法,鼓勵開發人員,業務參與者和品質分析師互相協作。 Behave是另一個頂級Python測試架構,允許團隊執行BDD測試而不會出現任何複雜情況。 該架構的性質與SpecFlow和Cucumbe非常相似. 測試用例以簡單易讀的語言編寫,然後在執行期間粘貼到代碼中。 行為由行為規範設計,然後其他測試方案重用這些步驟。

  • 系統行為由半正式語言和域詞彙表表達,以保持組織中的行為一緻。
  • 正在協調處理具有類似功能的不同子產品的開發團隊。
    建構塊總是可以執行各種測試用例。           
  • 細節中有推理和思考,進而産生更好的産品規格。
  • 由于規範的格式相似,利益相關者或管理者對QAs和Devs的輸出有更好的清晰度。
  • 隻适用于黑盒測試。

Behave(Python架構)最适合黑盒測試。 Web測試是一個很好的例子,因為用例可以用簡單的語言描述。 但是,對于內建測試或單元測試,行為不是一個好的選擇,因為詳細程度隻會導緻複雜測試場景的複雜化。 開發人員以及測試人員推薦pytest-bdd。 它是行為的替代品,因為它使用pytest中的所有優點并實作它以測試行為驅動的場景。

參考:

Behave with Selenium

##

Lettuce

Lettuce是另一種基于Cucumber和Python的簡單易用的行為驅動自動化工具。 生菜的主要目标是專注于行為驅動開發的共同任務,使過程更簡單,更有趣。

  • 好吧,就像任何其他BDD測試架構一樣,Lettuce使開發人員能夠建立多個場景并用簡單的自然語言描述這些功能。
  • Dev和QA團隊得到了适當的協調,因為規格格式相似。
  • 對于黑盒測試,Lettuce對于運作行為驅動的測試用例非常有用。

使用Lettuce作為Python架構隻有一個缺點。 為了成功執行行為驅動的測試,開發團隊,QA和利益相關者之間需要進行溝通。 缺席或溝通差距将使流程模糊不清,并且可以從任何團隊提出問題。

沒有比pytest-bdd更好的替代品了。 pytest的所有強大功能,如緊湊,易于了解的代碼都在此架構中實作,并結合了行為驅動測試的詳細程度。

參考資料

Robot Framework

Robot Framework主要用于接受測試驅動和驗收測試的開發,是最重要的Python測試架構之一。 雖然它是使用Python開發的,但它也可以在基于.net的IronPython和基于Java的Jython上運作 。

  • 使用關鍵字驅動測試方法,通過幫助測試人員輕松建立可讀測試用例,使自動化過程更加簡單。
  • 可以輕松使用測試資料文法。
  • 它由通用工具和測試庫組成,擁有龐大的生态系統,可以在單獨的項目中使用各個元素。
  • 該架構具有高度可擴充性,因為它具有許多API。
  • Robot架構可幫助您通過 Selenium Grid 運作并行測試。 但是,此功能不是内置的。
  • 建立自定義HTML報告時卻很棘手。 但是,您仍然可以使用Robot架構呈現xUnit格式的簡短報告。
  • 并行測試的不足。
  • 對于python熟悉的人而言,因為不友善使用一些python的功能

    ,且開發測試庫把簡單的問題複雜化,維護成本較高。但是依舊适合初學者簡單使用。

如果您是自動化領域的初學者并且開發經驗較少,那麼使用Robot作為頂級Python測試架構比pytest或pyunit更容易使用,因為它具有豐富的建構庫并且涉及使用更容易的面向測試的DSL。 但是,如果要開發複雜的自動化架構,最好切換到pytest或任何其他涉及Python代碼的架構。

如果您是Robot架構的新手,這裡有一個文檔可以幫助您使用

Robot framework with Selenium

運作您的第一個自動化腳本。

小結

更多測試架構參見 

https://github.com/china-testing/python-api-tesing

在上面的文章中,我們基于不同的測試過程讨論了2019年測試自動化的前5個Python架構。 雖然pytest,Robot架構,unittest用于功能和單元測試,但Lettuce和Behave僅适用于行為驅動測試。 根據所述功能,我們可以得出結論,對于功能測試,pytest是最好的。 但是,如果您是基于python的自動化測試的新手,Robot Framework是一個很好的入門工具。 雖然功能有限,但它可以讓您輕松地在賽道上取得領先。 對于基于python的BDD測試,Lettuce和Behave都同樣好,但如果你已經有pytest的經驗,最好使用pytest-bdd。