过程测试开发Pytest中文文档

python_unittest详解

2016-08-21  本文已影响11963人  古佛青灯度流年
python.png

一 整体结构概览

unittest原名为PyUnit,是由java的JUnit衍生而来。对于单元测试,需要设置预先条件,对比预期结果和实际结果。

所有的测试函数以test开头,test_XXX。
简单的示例:

import unittest
class TestStringMethods(unittest.TestCase):
   def test_upper(self):
       self.assertEqual('foo',upper(),'FOO')
   def test_isupper(self):
       self.assertEqualTure('FOO'.isupper())
       self.assertFalse('Foo'.isupper())
   def test_split(self):
       s = 'hello world' 
      self.assertEqual(s.split(),['hello','world']) with self.assertEqualRaise(TypeError): 
  
  s.slipt(2)
  if __name__ == '__main__':
  #unittest.main:为测试提供了入口。 unittest.main()   
  #运行结果:...----------------------------------------------------------------------
   Ran 3 tests in 0.064sOK

二 命令行

三 TestCase

TestCase的实例是最小的可测试单元。 testcase 是由unittest的TestCase类的实例表示的。要编写自己的测试用例必须继承TestCase类,或者使用FunctionTestCase。且Testcase类提供了各种assert的方法来检测预期结果和实际结果。
看下面的例子(创建一个测试类DefaultWidgetSizeTestCase):

  import unittest
  class DefaultWidgetSizeTestCase(unittest.TestCase): 
  #unittest.TestCase表示某个测试函数
      def runTest(self):
           widget = Widget('The widget')
           self.assertEqual(widget.size(), (50, 50), 'incorrect default size')

创建实例建立这样一个测试用例的一个实例,使用该类的构造函数,且不带参数(这样会执行所有的测试方法):
testCase = DefaultWidgetSizeTestCase()

我们也可以创建多个实例,且每个实例之间都是独立的。当我们需要对不同的实例执行不同的测试方法时,我们可以将要执行的测试用例方法在创建实例时通过类参数传入。
建了两个WidgetTestCase的实例,每个实例只运行WidgetTestCase类中的一个测试方法(通过参数传入)
defaultSizeTestCase = WidgetTestCase('test_default_size')
resizeTestCase = WidgetTestCase('test_resize')

如果给定的assertion通过了,那么测试会执行下一行代码。如果给定的assertion没有通过,测试会暂停并且生成错误信息。unittest库提供所有标准的xUnit assert方法。下面列出较重要方法的一部分:

四 Test fixtures

五 使用Text Suite组织测试代码

  unittest.TestSuite(tests=())

TestLoader 用来从clases和modules创建test suites,通常也需要创建一个该类的实例,unittest模块提供了一个实例,可以作为unittest.defaultTestLoader共享。使用一个子类或实例,允许定制可配置属性。该类有以下方法:loadTestsFromTestCase(testCaseClass):

你可以将测试用例和测试套件放在一个module中,最好是分开放置,方便重构管理,如果测试策略改变了,也方便维护。

六 跳过测试和预期的失败

执行的时候如果满足跳过条件,控制台会将后面的说明打印出来,并跳过该测试用例。跳过类也是相似的写法。也可以自定义skipping装饰器。

七 使用HTMLTestRunner生成报告

在cmd命令行中,进入python27的交互模式,导入后通过help查看帮助信息:

  >>> import helpin
  >>> help(helpin)
          Help on module helpin:
          NAME 
              helpin - 这是help能够显示的帮助信息
          FILE 
              e:\python27\lib\helpin.py
          FUNCTIONS 
              add(a)
                这个函数用来输入a的值

可以看到该类的注释说明,一个好的开源的框架应该有这样的规范。
这里在每个测试函数的下方添加上注释:
def test_equal(self):
u'''这里是测试a和b的两个值是否相等'''
a = 1
b = 2
self.assertEqual(a,b)

运行后,打开生成的html文件可以看到,每个测试用例函数的后面有该用例的注释。点击查看代码示例

修改之前的代码,将文件名字中添加上当前获取到的时间:
#获取当前时间
now = time.strftime("%Y-%m-%d %H_%M_%S")
#定义报告文件存放位置,这里将结果放在桌面
outfile = open('C:\Users\Administrator\Desktop\'+ now + '_result.html', "w")

生成的文件名称以2016-03-09_17_37_26_result.html格式出现。

转自

@ 晴---2016-08-21 19:12:37

上一篇 下一篇

猜你喜欢

热点阅读