首页 > 技术文章 > unittest简介

101718qiong 2017-12-06 15:11 原文

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()

 

推荐阅读