单元测试框架unittest

unittest是Python语言的单元测试框架,在Python的官方文档中,对unitest单元测试框架进行了详细的介绍。 https://docs.python.org/3/library/unittest.html

unittest单元测试框架提供了创建测试用例、测试套件和批量执行测试用例的方案。在python安装成功后,unittest单元测试框架就可以直接导入使用,它属于标准库。作为单元测试的框架,unittest单元测试框架也是对程序的最小模块进行的一种敏捷化测试。

利用单元测试框架,可以创建一个类,该类继承unittest的TestCase,这样可以把每个TestCase看成是一个最小单元,由测试套件组织起来,运行时直接执行即可,同时可引入测试报告。

  • 测试固件

在unittest单元测试框架中,测试固件用于处理初始化的操作,例如,在对百度的搜索进行测试之前,首先需要打开浏览器并且进入百度首页;测试结束后,需要关闭浏览器。测试固件提供了两种执行方式,一种是每次执行一个测试用例,测试固件都会被执行到;另外一种是不管有多少个测试用例,测试固件只执行一次。

测试固件每次都执行

import unittest
 class DemoTest(unittest.TestCase):
   def setUp(self):    #1
         print('start')
   def tearDown(self): #3     
     print('end') 
   def test_add_story(self):   #2     
     print('测试用例1执行') 
   def test_edit_story(self):     
     print('测试用例2执行')
 if name == 'main':
     unittest.main(verbosity=2)

执行结果:

执行顺序是先执行setUp方法,再执行具体的测试用例test_add_story, 最后执行tearDown方法,这个过程执行两次,如果在一个测试类中有N个测试用例,那么也就意味着着打开N次浏览器,关闭N次浏览器,而关闭和打开浏览器都会占用一定的资源和时间,很显然,性能不好,执行时间长

from selenium import webdriver
import unittest
import time as t
class DemoTest(unittest.TestCase):
def setUp(self):    #1     
    self.driver = webdriver.Chrome()     
    self.driver.maximize_window() 
    self.driver.implicitly_wait(30) 

def tearDown(self): #3     
    t.sleep(5)     
    self.driver.quit() 

def test_add_story(self):   #2     
    print('执行新增需求测试用例')
  …………

def test_delete_story(self):     
    print("执行删除需求测试用例")     
  …………

def _add_data_to_name_and_description(self, name, description):
    …………
 
if name == 'main':
     # unittest.main(verbosity=2)
     suite = unittest.TestSuite()
     suite.addTest(DemoTest("test_add_story"))
     suite.addTest(DemoTest("test_edit_story"))
     suite.addTest(DemoTest("test_delete_story"))
     #执行测试
     runner = unittest.TextTestRunner()
     runner.run(suite)   

unittest的main()方法执行用例的顺序是按照测试类、测试方法的名字的ASCII顺序来执行测试方法。如果想要控制执行顺序,有以下两种方式:

  • 通过TestSuite按照顺序添加想要执行的方法,上面的代码用的就是此方法
  • 顺应testunit的执行顺序,就是通过控制方法名字来实现

测试固件只执行一次

钩子方法setUp和tearDown虽然经常使用,但是在UI自动化测试中,一个系统的测试用例一般多达五百多条,打开和关闭五百次浏览器,会消耗大量的资源和时间。在unittest单元测试框架中可以使用另外一个测试固件来解决这一问题,它就是setUpClass和tearDownClass方法。该测试固件方法是类方法,需要在方法上面加装饰器@classmethod。使用该测试固件,不管多少个测试用例,测试固件只执行一次,也就是说不管多少个测试用例,执行的时候,浏览器只被打开一次和关闭一次。