声明
工作中需要用到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