「python」nosetests的一些代碼

聲明

工作中需要用到nosetests,網上的信息比較雜亂,自己整理一份,分享給朋友、同事和其他有需要的人。

本人不是大牛,不喜勿噴。

需求

針對於某雲端系統api的測試,請求中主要為文字的query(主要是漢字),輸出report。測試失敗後需要打印query內容到report中。

test_generation

「python」nosetests的一些代碼

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__=...運行過程中顯示的內容

「python」nosetests的一些代碼

本人用的nose版本為1.3.7,nose源代碼中收集error/failure信息的代碼有bug,不能支持上述改寫中有中文的情況,需要修改。改動部分主要是下圖

  1. 去掉原errorlist字符串的u(不要unicode)

  2. 把message、tb的值encode到utf8

「python」nosetests的一些代碼

裝飾器的使用

對於需要自己寫多個assert函數的情況,可以通過裝飾器統一處理返回值的格式化和異常捕獲。

  • 裝飾器的代碼概要

「python」nosetests的一些代碼

  • 裝飾器的使用

「python」nosetests的一些代碼

nosetests的參數輸入

推薦使用nose-testconfig

獲取地址:https://pypi.python.org/pypi/nose-testconfig#command-line-options


分享到:


相關文章: