unittest 简介(一)
相信接触过 Java 语言的朋友一定对 Junit 单元测试框架不陌生,对于 Python 语言,同样有类似的单元测试框架 Unittest。
Unittest 是 Python 内部自带的一个单元测试的模块,它设计的灵感来源于 Junit,具有和 Junit 类似的结构。
Unittest 具备完整的测试结构,支持自动化测试的执行,对测试用例集进行组织,并且提供了丰富的断言方法,最后生成测试报告。Unittest 框架的初衷是用于单元测试,但也不限于此,在实际工作中,由于它强大的功能,提供的完整的测试流程,我们往往将其用于自动化测试的各个方面。
UnitTest 是检查一个函数执行后它的返回结果或者它对系统数据造成的影响是否和我们所期望的一致。
将用例 转换为 脚本
一条用例 == 一个函数脚本
最终的目的:将一条用例转换为一个函数
unittest 用法:
基本用法如下:
1.用 import unittest 导入 unittest 模块
2.定义一个继承自 unittest.TestCase 的测试用例类,如 class
xxx(unittest.TestCase):
3.定义 setUp 和 tearDown,这两个方法与 junit 相同,即如果定义了则会在每个测试
case 执行前先执行 setUp 方法,执行完毕后执行 tearDown 方法。
4.定义测试用例,名字以 test 开头,unittest 会自动将 test 开头的方法放入测试用
例集中。
5.一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用
assertEqual、assertIn 等断言方法判断程序执行结果和预期值是否相符。
6.调用 unittest.main()启动测试
7.如果测试未通过,则会显示 e,并给出具体的错误(此处为程序问题导致)。如果
测试失败则显示为 f,测试通过为.,如有多个 testcase,则结果依次显示。
前置和后置:
1.setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些
操作,这个就是执行用例的前置条件。还比如连接打开数据库,也可以放在 setUp。
2.tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个数据还原的过
程,这就是执行用例的后置条件。还比如关闭数据库连接可以放在 tearDown。
3.很多人执行完用例,都不去做数据还原,以致于下一个用例执行失败,这就是不喜
欢擦屁股的事情,习惯不好。
4.前置和后置都是非必要的条件,如果没有也可以写 pass
Unittest 的执行顺序:
举例: 新增三个方法:
```python
def test01(self):
print "执行测试用例 01"
def test03(self):
print "执行测试用例 03"
def test02(self):
print "执行测试用例 02"
def addtest(self):
print "add 方法"
分析执行后的结果:
–先执行的前置 setUp,
然后执行的用例(test*),
最后执行的后置 tearDown
–测试用例(test*)的执行顺序是根据 01-02-03 执行的,也就是说根据用例名称来
顺序执行的–addtest(self)这个方法没执行,说明只执行 test 开头的用例
Unittest 框架里面在执行函数时会遍历所有以 test 开头的函数,不带 test 的函数不
会被执行,并且执行的优先级为: 根据 ASCII 码的顺序加载测试用例,数字与字母的
顺序为:0-9,A-Z,a-z。
如果你希望按照特定的顺序来执行测试用例
----给测试用例命名时,按照ASCII顺序去组织
—使用addTest()方法去加载,就会按照测试用例的加载顺序去执行
小结
unittest的使用,目的不是为了编写单元测试用例,而是为了用它来组织web自动化测试用例。利用单元测试框架来组织测试用例、断言预期结果以及批量执行测试用例等功能,可以很好的辅助我们进行web自动化测试的开发。