27. Python脚本学习笔记二十七 测试及测试工具

27. Python脚本学习笔记二十七 测试及测试工具

本篇名言:“累了请将心靠岸;错了请不要后悔;苦了才懂得满足;受伤了才明白坚强;醉了才知道难忘;笑了才体会美丽;闲了想想我吧!”

                  程序员总是在做着3样事情“编辑,编译,运行”。

                  当然Python程序员不要进行编译操作了,就是编辑和运行。

                  对程序的各个部分建立测试是非常重要的,称为单元测试。

                  极限编程的,先测试后编码方法也被称为测试驱动编程。

1.  精确的需求说明

开发软件的某部分时,必须知道软件要解决什么问题,写一份需求说明来明确程序的目标。需求说明是描述程序必须满足的需求文档。

程序设计的理念是以编写测试程序开始,便后编写可以通过测试的程序。测试程序是你的需求说明,帮助在开发程序时候不偏离需求。

测试程序类似如下:

from area import rect_area

height = 3

width = 4

correct_answer = 12

answer = rect_area(height, width)

if answer == correct_answer:

    print 'Test passed '

else:

    print 'Test failed '

我们输入一个长和宽,期望得到12.

 

2.  为改变而计划

程序员要随时做好修改代码的准备,而不是固守程序。当然如果程序设计的足够好,改变产生的影响应该是局部的,并且只影响代码的一小部分。

 

3.  驱动测试过程

l  指出需要的新特性,记录下来,并编写一个测试

l  编写特性的概要代码,没有语法错误即可。在试图测试成功前,先要看到它失败。

l  为特性的概要编写虚设代码,满足测试要求即可。

l  重写或重构代码,保证测试一直成功。

4.  测试工具

标准库中的模块可以帮助我们一臂之力,有两个很棒的模块

                  unites:通用测试框架。

                  doctest:简单一些的模块,是检查文档用的,对于编写单元测试也很在行。

4.1      doctest

例如定义一个文件如下test.py:

def square(x):

   '''

    Squares a number and returns the result.

   

    >>> square(2)

    4

    >>> square(3)

    9

    '''

   return x*x

 

 

if__name__=='__main__':

   importdoctest,Chapter1

   doctest.testmod(Chapter1)

执行python test.py -v

输出如下:

E:\ >python test.py -v

Trying:

   square(2)

Expecting:

    4

ok

Trying:

   square(3)

Expecting:

    9

ok

1 items had no tests:

   Chapter1

1 items passed all tests:

   2tests in Chapter1.square

2 tests in 2 items.

2 passed and 0 failed.

Test passed.

 

可见,testmod函数检查模块的文档字符串以及函数的文档字符串。

4.2      unittest

doctest简单易用,unittest是基于Java的流行测试框架JUnit,更灵活和强大。利用unittest能更加结构化的方式编写大型且周祥的测试组。

示例:

importunittest, my_math

 

class ProductTestCase(unittest.TestCase):

 

   def testIntegers(self):

        for x in xrange(-10, 10):

            for y in xrange(-10, 10):

                p = my_math.product(x, y)

                self.failUnless(p ==x*y, 'Integer multiplication failed')

 

   def testFloats(self):

        for x in xrange(-10, 10):

            for y in xrange(-10, 10):

                x = x/10.0

                y = y/10.0

                p = my_math.product(x, y)

                self.failUnless(p ==x*y, 'Float multiplication failed')

 

if__name__ == '__main__': unittest.main()

def product(x,y):

    return x*y

运行输出如下:

..

----------------------------------------------------------------------

Ran 2tests in 0.003s

 

OK

 

 

 

 

 

 

 

unittest.main函数负责运行测试。它会实例化所有TestCase的子集,运行所有名字以test开头的方法。如果定义了setUp和setDown的方法,就会在所有测试提供一般的初始化和清理代码,这被称为测试夹具。

一些有用的TestCase方法

                  关于unittest的GUI,可以参看PyUnit

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值