一、unittest工作原理

unittest最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture

TestFixture:简单来说就是做一些测试过程中需要准备的东西,比如创建临时的数据库,文件和目录等,其中setUp()和setDown()是最常用的方法;这里举例以下,例如要测试百度搜索selenium这个场景,我们的测试固件可以这样写,setUp()里写打开浏览器,浏览器最大化,和打开百度首页等脚本代码;在tearDown()里写结束搜索后,退出并关闭浏览器的代码。

test case(测试用例):unittest中管理的最小单元是测试用例,一个测试用例,包括测试固件,和具体测试业务的函数或者方法。一个测试用例中,测试固件可以不写,但是至少有一个已test开头的函数。unittest会自动化识别test开头的函数是测试代码,如果你写的函数不是test开头,unittest是不会执行这个函数里面的脚本的,这个千万要记住,所有的测试函数都要test开头,记住是小写的哦

test suite:很简单,就是很多测试用例的集合,叫测试套件,一个测试套件可以随意管理多个测试用例。如果测试用例比作单个学生,测试套件就是好像是班级的概念。

test runner(测试执行器 ):test runner是一个用来执行加载测试用例,并执行用例,且提供测试输出的一个组建。test runner可以加载test case或者test suite进行执行测试任务。

  整个的流程就是首先要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TestTestRunner来运行TestSuite,运行的结果保存在TextTestReusult中,整个过程集成在unittest.main模块中。

二、例子如下:

#导入unittest模块,这是python自带的单元测试框架,
import unittest
#必须继承unittest.TestCase类
class test_unit(unittest.TestCase):
#必须有前置条件,不要为为什么,固定格式
def setUp(self):
print('这是前置条件')

#必须有后置条件,不要为为什么,固定格式
  def tearDown(self) :
print('这是后置条件')
#开始了测试用例,必须时test_开头

  def test_case01(self):
        # print(self.add(4,9))
print('这是测试用例01')
def test_case02(self):
# print(self.add(5, 10))
print('这是测试用例02')
# def add(a,b):
# c=a+b;
# return c;
#运行方法必须用main()方法
if __name__=='__main__':
unittest.main()

学习unittest的简单用法实例:
1. 新建一个testbaidu.py的文件
2. 导入unittest模块
3. 当前测试类继承unittest.TestCase,相当于当前利用unittest创建了一个test case,这个test case是能够被unittest直接识别。
4. 写setUP(),主要是打开浏览器和打开站点
5. 写一个test_search()用例写搜索的代码
6. 写tearDown(),主要是浏览器退出操作

脚本代码:

import time

import unittest

from selenium import webdriver

class BaiduSearch(unittest.TestCase):

  def setUp(self):
  """
  测试固件的setUp()的代码,主要是测试的前提准备工作
  return:
  """
    self.driver = webdriver.Chrome()
    self.driver.maximize_window()
    self.driver.implicitly_wait(8)
    self.driver.get("https://www.baidu.com")

  def test_baidu_search(self):
  """
  这里一定要test开头,把测试逻辑代码封装到一个test开头的方法里。
  :return:
  """
    self.driver.find_element_by_id('kw').send_keys('selenium')
    time.sleep(1)
    try:
      assert 'selenium' in self.driver.title
      print ('Test Pass.')
    except Exception as e:
      print ('Test Fail.', format(e))


  def tearDown(self):
  """
  测试结束后的操作,这里基本上都是关闭浏览器
  :return:
  """
    self.driver.quit()

if __name__ == '__main__':
  unittest.main()