单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误。unittest 框架(又名PyUnit 框架)为python 语言的单元测试框架,从Python 2.1 及其以后的版本都将PyUnit 作为一个标准模块放入python 开发包中。
被测试的类
Python基础知识补充:
__init__()
__init__()方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化。
getSize()
在面向对象的编程语言中都会有类的概念,类具有封装性;在C++ 、java 等语言中通过private(私有)、protected(保护)、public(公有)等修饰符来限定访问权限。在Python 中没有显式的private 和public限定符,如果要将一个方法声明为private 的,只要在方法名前面加上“ __ ”即可。
所以,我们前面定义的__init__() 方法是一个私有的方法,不能直接被外部使用。那么如何才能使用类中私有的成员函数着,就通过getXX 和setXX 方法来访问。一个赋值函数(getXX),一个取值函数(setXX )。
从上面的例子中看到,__init__()方法中默认参数是size=(40, 40) 在函数体中定义self._size = size。通过变量传递,self._size=(40, 40) ,但self._size 是私有的,不可被类以外的方法和函数调用。(self 表示类本身,后面章节中会进一步解释。)
所以,在getSize()方法中定义返回self._size,那么就可以调用getSize()方法来使用__init__()方法中self._size。
测试类
框架分析
软件测试中最基本的组成是单元测试用例(test case),我们在实际测试过程中,不可能真对一个功能(类)只写一个用例。TestCase 在PyUnit 测试框架中被视为测试单元的运行实体,Python 程序员可以通过它派生自定义的测试过程与方法(测试单元),利用Command 和Composite 设计模式,多个TestCase 还可以组合成测试用例集合。
1、编写测试用例
采用PyUnit 提供的动态方法,只编写一个测试类来完成对整个软件模块的测试,这样对象的初始化工作可以在setUp()方法中完成,而资源的释放则可以在tearDown()方法中完成。
一个测试用例就是测试类中的一个test方法
2、组织用例集
在PyUnit中使用TestSuite类来组织用例集,在单元测试代码中定义一个名为suite的全局函数,并将其作为整个单元测试的入口,PyUnit通过调用它来完成整个测试过程
如果测试类中所有的测试方法都以test开头,则可以通过makeSuite()方法来构造测试集
3、运行测试集
PyUnit 使用TestRunner 类作为测试用例的基本执行环境,来驱动整个单元测试过程。Python 开发人员在进行单元测试时一般不直接使用TestRunner 类,而是使用其子类TextTestRunner 来完成测试,并将测试结果以文本方式显示出来:
完整
PyUnit 模块中定义了一个名为main 的全局方法,使用它可以很方便地将一个单元测试模块变成可以直接运行的测试脚本,main()方法使用TestLoader 类来搜索所有包含在该模块中的测试方法,并自动执行它们。如果Python 程序员能够按照约定(以test 开头)来命名所有的测试方法,那就只需要在测试模块的最后加入如下几行代码即可
Python基础知识
if __name__ == “__main__”:语句说明
,if 就是如果的意思,在句子开始处加上if,就说明,这个句子是一个条件语句。接着是__name__,__name__作为模块的内置属性,简单点说呢,就是.py 文件的调用方式。最后是_main__,.py 文件有两种使用方式:作为模块被调用和直接使用。如果它等于"__main__"就表示是直接执行。
那么一旦这个用例文件(.py)稳定之后,就需要将这个用例文件添加到用例集中,这个用例文件就被做为一个模块被调用;这个时候if __name__ == “__main__”:后面的内容将不会被执行。
本文参考《selenium自动化测试实战--虫师》