1)doctest
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、雅安服务器托管、营销软件、网站建设、十堰网站维护、网站推广。
使用doctest是一种类似于命令行尝试的方式,用法很简单,如下
复制代码代码如下:
def f(n):
"""
f(1)
1
f(2)
2
"""
print(n)
if __name__ == '__main__':
import doctest
doctest.testmod()
应该来说是足够简单了,另外还有一种方式doctest.testfile(filename),就是把命令行的方式放在文件里进行测试。
2)unittest
unittest历史悠久,最早可以追溯到上世纪七八十年代了,C++,Java里也都有类似的实现,Python里的实现很简单。
unittest在python里主要的实现方式是TestCase,TestSuite。用法还是例子起步。
复制代码代码如下:
from widget import Widget
import unittest
# 执行测试的类
class WidgetTestCase(unittest.TestCase):
def setUp(self):
self.widget = Widget()
def tearDown(self):
self.widget.dispose()
self.widget = None
def testSize(self):
self.assertEqual(self.widget.getSize(), (40, 40))
def testResize(self):
self.widget.resize(100, 100)
self.assertEqual(self.widget.getSize(), (100, 100))
# 测试
if __name__ == "__main__":
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(WidgetTestCase("testSize"))
suite.addTest(WidgetTestCase("testResize"))
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
简单的说,1构造TestCase(测试用例),其中的setup和teardown负责预处理和善后工作。2构造测试集,添加用例3执行测试需要说明的是测试方法,在Python中有N多测试函数,主要的有:
TestCase.assert_(expr[, msg])
TestCase.failUnless(expr[, msg])
TestCase.assertTrue(expr[, msg])
TestCase.assertEqual(first, second[, msg])
TestCase.failUnlessEqual(first, second[, msg])
TestCase.assertNotEqual(first, second[, msg])
TestCase.failIfEqual(first, second[, msg])
TestCase.assertAlmostEqual(first, second[, places[, msg]])
TestCase.failUnlessAlmostEqual(first, second[, places[, msg]])
TestCase.assertNotAlmostEqual(first, second[, places[, msg]])
TestCase.failIfAlmostEqual(first, second[, places[, msg]])
TestCase.assertRaises(exception, callable, ...)
TestCase.failUnlessRaises(exception, callable, ...)
TestCase.failIf(expr[, msg])
TestCase.assertFalse(expr[, msg])
TestCase.fail([msg])
你的上面的代码有问题啊,附件有两个文件MyTest.py为测试下面代码的例子
def sum_items(a_list):
n = len(a_list)
sum = 0
if n == 0:
return 0
else:
for i in range (0,n-1):
sum = sum + a_list[i]
return sum
TestResult方法介绍
1. printErrors
作用:被TestRunner在执行玩测试内容的时候调用,打印错误信息,默认不输出任何信息
输入参数:无
输出参数:无
返回值:无
2. startTest(self, test)
作用:在每个测试条目执行测试之前被调用,将测试条目个数加一,设置_mirrorOutput为False ,最后根据buffer参数,设置 sys.stderr 和sys.stdout,
输入参数:test 测试用例类的实例化对象
输出参数:
返回值:
3. startTestRun
作用: 在runner开始执行测试用例之前被调用,默认不执行内容,和startTest不同,startTest是在Testcase子类调用。
输入参数:无
输出参数:无
返回值:无
4. stopTest (self, test)
作用: 在测试用例执行测试条目之后被调用,如果处于buffer状态,并且mirrorOutput为真,即测试条目执行失败或异常,则将原来缓存的数据进行输出。然后将缓存数据清空,并_mirrorOutput置为False
输入参数:test 测试用例类的实例化对象
输出参数:无
返回值:无
5 stopTestRun
作用: 在runner执行完所有的测试用例后被调用,默认不执行内容,和stopTest不同,stopTest是在Testcase子类调用。
输入参数:无
输出参数:无
返回值:无
6. addError(self, test, err)
作用: 在测试用例类执行完测试条目错误或异常后被调用,
输入参数:test 测试用例类的实例化对象
Err 是根据sys.exc_info()返回的对象, 是一个三元组,(exctype, value, tb) exctype是异常类型,value 是具体的异常数据,tb 是traceback的内容
输出参数:无
返回值:无
7. addFailure(self, test, err)
作用:在测试用例类执行完测试条目失败后被调用,,默认不执行内容,和stopTest不同,stopTest是在Testcase子类调用。
输入参数:test 测试用例类的实例化对象
Err 是根据sys.exc_info()返回的对象, 是一个三元组,(exctype, value, tb)
exctype是异常类型,value 是具体的异常数据,tb 是traceback的内容,如果处在buffer
为真的情况下,还还会将当前的sys.stdout 和sys.stderr的内容也一并合并保存在failture的成员变量列表中的字符串内容中。
输出参数:无
返回值:无
8. addError (self, test, err)
作用:在测试用例类执行完测试条目失败后被调用,,默认不执行内容,和stopTest不同,stopTest是在Testcase子类调用。
输入参数:test 测试用例类的实例化对象
Err 是根据sys.exc_info()返回的对象, 是一个三元组,(exctype, value, tb)
exctype是异常类型,value 是具体的异常数据,tb 是traceback的内容,如果处在buffer
为真的情况下,还还会将当前的sys.stdout 和sys.stderr的内容也一并合并保存在error的成员变量列表中的字符串内容中。
输出参数:无
返回值:无
9. addSuccess (self, test)
作用:在测试用例类执行完测试条目成功后被调用,,默认不执行内容
输入参数:test 测试用例类的实例化对象
输出参数:无
返回值:无
10. addSkip( self, test, reason):
作用:在测试用例类执行的测试条目被skip后被调用,将该条目添加到 skipped 列表中
输入参数:test 测试用例类的实例化对象 reson 是skip的原因
输出参数:无
返回值:无
11. addExpectedFailure (self, test, err):
作用:在测试用例类执行的测试条目期望的失败发生后被调用,将该条目添加到expectedFailures列表中
输入参数:test 测试用例类的实例化对象 err是 该失败的情况
输出参数:无
返回值:无
12. addUnexpectedSuccess (self, test):
作用:在测试用例类执行的测试条目期望的失败发生后被调用,将该条目添加到expectedFailures列表中
输入参数:test 测试用例类的实例化对象 err是 该失败的情况
输出参数:无
返回值:无
13. wasSuccessful
作用:通过判断failures和errors列表是否为空,判断所有测试条目是否执行成功
输入参数: 无
输出参数:无
返回值:无
14. stop
作用: shouldStop设置为True,用于终止测试
输入参数: 无
输出参数:无
返回值:无
15. _exc_info_to_string (self, err, test):
作用: 将err 异常数据整理成字符串,并且如果有buffer为真,将sys.stdout 和sys.stderr的数据也添加到返回的字符串中
输入参数: 无
输出参数:无
返回值:字符串
16. _is_relevant_tb_level(self, tb):
作用: 将err 异常数据整理成字符串,并且如果有buffer为真,将sys.stdout 和sys.stderr的数据也添加到返回的字符串中
输入参数: 无
输出参数:无
返回值:字符串
17. _count_relevant_tb_levels(self, tb):
作用: 获取traceback的层次数
输入参数: 无
输出参数:无
返回值:traceback的层次数
18, __repr__
作用: 返回一个显示测试项执行的数目以及测试失败的条目和异常的条目的个数。
输入参数: 无
输出参数:无
返回值:字符串
注释:
addError和addFailure 以及
addUnexpectedSuccess 函数 都有装饰器@failfast,有了该装饰器,则在实际调用 上述三个函数的时候,都会被封装一层 ,额外添加的功能就是会被用在发生错误或失败的时候停止测试。
def failfast(method):
@wraps(method)
def inner(self, *args, **kw):
if getattr(self, 'failfast', False):
self.stop()
return method(self, *args, **kw)
return inner
大家讲的都差不多
1. if 语句用来检验一个条件, 如果 条件为真,我们运行一块语句(称为 if-块 ), 否则 我们处理
另外一块语句(称为 else-块 )。 else 从句是可选的。---python简明教程
2.test() 真 not test()假 , if not test() 不执行
test()假 not test()真 ,此时 if not test()后面的就可以被执行了
因为你引用了其他模块的函数,但是该模块里面有不是包含在函数中的代码,你在引用该模块中的函数时候会先执行被引用模块的代码。例如:
a.py里面有 a = 10
print(a)
def test():
print(a)
然后你在b.py 文件中引入了test函数 :from a import test
test() 执行的顺序就是 先执行 a = 10 ,print(a) ,test() 执行b.py中的代码的时候从from 那一句开始所以a 中的代码也被执行了