unittest简介
unittest是python里面的单元测试框架
1 unittest 简介
1).先导入 unittest
2).用 help 函数查看源码解析
3).查看描述:
Python unit testing framework, based on Erich Gamma's JUnit and KentBeck's Smalltalk testing framework.
翻译:python 的单元测试框架,是基于 java 的 junit 测试框架
2 unittest使用
1).第一行是导入 unittest 这个模块
2).class 这一行是定义一个测试的类,并继承 unittest.TestCase 这个类
3).接下来是定义了四个测试 case 名称:testAdd 、 testMul、testMinus、testDiv
4).注释里面有句话很重要,这个要敲下黑板记笔记了: ## test method namesb b egin 'test*' -- 翻译:测试用例的名称要以 t test 开头
5).然后是断言 assert,这里的断言方法是 assertEqual-判断两个是否相等,这个断言可以是一个也可以是多个
6).if 下面的这个 unittest.main()是运行主函数,运行后会看到测试结果:
参考源码:
# coding:utf-8 import unittest class IntegerArithmeticTestCase(unittest.TestCase): # test method namesb b egin 'test*' def testAdd(self): self.assertEquals((1+2), 3) self.assertEquals((0+1), 1) def testMul(self): self.assertEquals((0*5), 0) self.assertEquals((10*5), 50) def testMinus(self): result = 6-5 hope = 1 self.assertEquals(result, hope) def testDiv(self): result = 7/2 hope = 3 self.assertEquals(result, hope) if __name__ == '__main__': unittest.main()
* 注意:
当断言没有通过时,就会报错,例如将上面最后一个用例的期望结果改为hope=3.5,执行结果就会报错
最后运行结果,第四个是失败的,失败原因:AssertionError: 3 != 3.5
F.
=====================================================================
=
FAIL: testDivide (__main__.Test)
这里是测试除法
---------------------------------------------------------------------
-
Traceback (most recent call last):
File "D:/test/web-project/p.py", line 14, in testDivide
self.assertEqual(result, hope)
AssertionError: 3 != 3.5
---------------------------------------------------------------------
-
Ran 4 tests in 0.004s
FAILED (failures=1)
3 前置和后置
1).setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件。
2).tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个数据还原的过程,这就是执行用例的后置条件。
3).很多人执行完用例,都不去做数据还原,以致于下一个用例执行失败习惯不好。
4).前置和后置都是非必要的条件,如果没有也可以写 pass
完整案例:
# coding:utf-8 from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC import time import unittest class Blog(unittest.TestCase): # 前置操作 def setUp(self): self.driver = webdriver.Firefox() self.driver.get("http://www.cnblogs.com/101718qiong/") self.driver.maximize_window() # 测试用例 def test_blog(self): time.sleep(3) result = EC.title_is(u'Silence&QH - 博客园')(self.driver) print result self.assertTrue(result) # 后置操作 def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()