zoukankan      html  css  js  c++  java
  • python的单元测试框架unittest之TestCase

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




  • 相关阅读:
    DataGridView 鼠标双击获得行列索引
    浅谈MVC、MVP、MVVM架构模式的区别和联系
    Codeforces 336D Dima and Trap Graph 并查集
    Codeforces 601C Kleofáš and the n-thlon 概率dp
    Codeforces 311B Cats Transport 斜率优化dp
    Codeforces 908F New Year and Rainbow Roads
    Codeforces 12D Ball cdq分治
    Codeforces 291 E Tree-String Problem AC自动机
    Codeforces 932E Team Work 数学
    Codeforces 463E Caisa and Tree
  • 原文地址:https://www.cnblogs.com/weihanhan/p/14592149.html
Copyright © 2011-2022 走看看