聲明
工作中需要用到nosetests,網上的信息比較雜亂,自己整理一份,分享給朋友、同事和其他有需要的人。
本人不是大牛,不喜勿噴。
需求
針對於某雲端系統api的測試,請求中主要為文字的query(主要是漢字),輸出report。測試失敗後需要打印query內容到report中。
test_generation
nosetests默認會找目標目錄/.py文件中的test開頭的method(具體規則請自行百度或者google),對於不固定測試數據集合的情況,可以使用Generator的方式來進行測試。
官網的說明也很清楚:http://nose.readthedocs.io/en/latest/writing_tests.html#test-generators
說明一點,上圖最後一行,assert result,msg,result會用來做assert,失敗後會把msg轉碼成unicode寫入到report中。
run函數名的改寫
使用functools中的partial和update_wrapper
func=lambda: run(badcase) 作用把run(badcase)改寫成func
func.description=...如果使用with-xunit生成report的話,testcase的name會使用這個值來標記每個case
test_generation.__name__=...運行過程中顯示的內容
本人用的nose版本為1.3.7,nose源代碼中收集error/failure信息的代碼有bug,不能支持上述改寫中有中文的情況,需要修改。改動部分主要是下圖
去掉原errorlist字符串的u(不要unicode)
把message、tb的值encode到utf8
裝飾器的使用
對於需要自己寫多個assert函數的情況,可以通過裝飾器統一處理返回值的格式化和異常捕獲。
裝飾器的代碼概要
裝飾器的使用
nosetests的參數輸入
推薦使用nose-testconfig
獲取地址:https://pypi.python.org/pypi/nose-testconfig#command-line-options