但凡有點經驗的python自動化測試工程師或是測試開發(fā)工程師,或多或少都用過unittest翰意。當使用unittest實現(xiàn)測試代碼,首先必須定義一個測試類并繼承unittest.TestCase, 然后在類中實現(xiàn)測試方法。然而在pytest中条辟,卻無需強制使用類聲明,只要一個測試函數(shù)即可宏胯,就像這樣:
就這樣羽嫡,兩行就是實現(xiàn)了自動化測試,是不是很簡單肩袍。
接下來我們看看杭棵,這段代碼是如何在pytest中執(zhí)行的。
首先我們定義了一個測試函數(shù)氛赐,函數(shù)名則以test開頭魂爪。這很重要,當你用pytest 運行一個腳本時艰管,它會收集test為前綴的函數(shù)名的函數(shù)作為測試方法去執(zhí)行滓侍。如果我們把test_add改成tes_add,那么pytest就找不到任何測試用例了。
pytest有一套自己發(fā)現(xiàn)測試方法的規(guī)則牲芋,后面會細說哦粗井。
之后我們在test_add函數(shù)中使用了斷言去判斷測試的檢查點。如果你用過unittest街图,你知道unittest本身提供了很多斷言函數(shù)比如assertEqual等等浇衬。而pytest則直接使用assert,少去了還要查找斷言函數(shù)的麻煩餐济,讓代碼更加簡單和自由耘擂。同時你會發(fā)現(xiàn)斷言如果出錯,錯誤信息如此詳細…當然pytest還提供了異常信息定制化功能絮姆。
講到這里醉冤,大家是不是覺得這段測試代碼里還缺點什么呢秩霍?沒錯,那就是大家熟悉的setup和teardown蚁阳。pytest測試提供了幾個級別的setup/teardown——模塊铃绒,函數(shù),類螺捐,方法颠悬。
我們定義了方法級別的setup/teardown, 運行結果就是你們看到的,熟悉的配方啊定血。然而除了傳統(tǒng)的setup/teardown, pytest還提供了一個更強大的功能fixture——使用fixture簡化了初始和清理代碼的工作流程赔癌, fixture就像函數(shù),有明確的名稱澜沟,測試函數(shù)灾票、模塊、類或整個項目中都可以聲明和激活它們茫虽。雖然pytest支持傳統(tǒng)的setup/teardown, 但fixture是更加值得去使用的刊苍。
現(xiàn)在食材都已經搭配好了,那怎么開燒呢濒析,說白了就是如何運行你的測試代碼如何編寫啦班缰。pytest提供兩種方法,一種就像unittest一樣直接在code里指明悼枢,就像這樣
至此埠忘,小艾已經為大家展示了測試框架中最重要的幾個特性,測試方法馒索、斷言莹妒,異常信息,初始/清理绰上,運行旨怠,測試報告。從下章開始小艾將會一一展開這些特性蜈块,詳細介紹它們的用法鉴腻。