但凡有點經驗的python自動化測試工程師或是測試開發(fā)工程師,或多或少都用過unittest。當使用unittest實現(xiàn)測試代碼,首先必須定義一個測試類并繼承unittest.TestCase, 然后在類中實現(xiàn)測試方法。然而在pytest中,卻無需強制使用類聲明,只要一個測試函數即可,就像這樣:

就這樣,兩行就是實現(xiàn)了自動化測試,是不是很簡單。
接下來我們看看,這段代碼是如何在pytest中執(zhí)行的。
首先我們定義了一個測試函數,函數名則以test開頭。這很重要,當你用pytest 運行一個腳本時,它會收集test為前綴的函數名的函數作為測試方法去執(zhí)行。如果我們把test_add改成tes_add,那么pytest就找不到任何測試用例了。
pytest有一套自己發(fā)現(xiàn)測試方法的規(guī)則,后面會細說哦。
之后我們在test_add函數中使用了斷言去判斷測試的檢查點。如果你用過unittest,你知道unittest本身提供了很多斷言函數比如assertEqual等等。而pytest則直接使用assert,少去了還要查找斷言函數的麻煩,讓代碼更加簡單和自由。同時你會發(fā)現(xiàn)斷言如果出錯,錯誤信息如此詳細…當然pytest還提供了異常信息定制化功能。

講到這里,大家是不是覺得這段測試代碼里還缺點什么呢?沒錯,那就是大家熟悉的setup和teardown。pytest測試提供了幾個級別的setup/teardown——模塊,函數,類,方法。

我們定義了方法級別的setup/teardown, 運行結果就是你們看到的,熟悉的配方啊。然而除了傳統(tǒng)的setup/teardown, pytest還提供了一個更強大的功能fixture——使用fixture簡化了初始和清理代碼的工作流程, fixture就像函數,有明確的名稱,測試函數、模塊、類或整個項目中都可以聲明和激活它們。雖然pytest支持傳統(tǒng)的setup/teardown, 但fixture是更加值得去使用的。
現(xiàn)在食材都已經搭配好了,那怎么開燒呢,說白了就是如何運行你的測試代碼如何編寫啦。pytest提供兩種方法,一種就像unittest一樣直接在code里指明,就像這樣

至此,小艾已經為大家展示了測試框架中最重要的幾個特性,測試方法、斷言,異常信息,初始/清理,運行,測試報告。從下章開始小艾將會一一展開這些特性,詳細介紹它們的用法。