zoukankan      html  css  js  c++  java
  • unittest 单元测试框架

    引入 unittest 框架

     

     

    相想使用unittest 框架,首先要引入unittest

    import unittest

     

    class Baidu(unittest.TestCase):

    Baidu 类继承 unittest.TestCase 类,从TestCase 类继承是告诉unittest 模块的方式,这是一个测试案例。

     

    def setUp(self):

         self.driver = webdriver.Firefox()

         self.base_url = "http://www.baidu.com/"

    setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL 的访问放到初始化部分。

     

    self. verificationErrors = []

    脚本运行时,错误的信息将被打印到这个列表中。

     

    self.accept_next_alert = True

    是否继续接受下一下警告

     

    def test_baidu(self):

         driver = self.driver

         driver.get(self.base_url + "/" )

    test_baidu 中放置的就是我们的测试脚本。

     

    def is_element_present(self, how, what):

         try : self.driver.find_element(by=how, value=what)

         except NoSuchElementException, e: return False

         return True

    is_element_present 函数用来查找页面元素是否存在,在这里用处不大,通常删除。因为判断页面元素是否存在一般都加在testcase 中。

     

    def is_alert_present(self):

         try : self.driver.switch_to_alert()

         except NoAlertPresentException, e: return False

         return True

    对弹窗异常的处理

     

    def close_alert_and_get_its_text(self):

         try :

              alert = self.driver.switch_to_alert()

              alert_text = alert.text

              if self.accept_next_alert:

                   alert.accept()

              else :

                   alert.dismiss()

              return alert_text

    finally : self.accept_next_alert = True

    关闭警告和对得到文本框的处理。

     

    def tearDown(self):

         self.driver.quit()

         self.assertEqual([], self.verificationErrors)

    tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出

    浏览器等。

     

    if __name__ == "__main__":

         unittest.main()

    unitest.main()函数用来测试类中以test 开头的测试用例。

     

    unittest 单元测试框架解析


    • import 语句引入unittest 模块
    • 让所有执行测试的类都继承于TestCase 类,可以将TestCase 看成是对特定类进行测试的方法的集合
    • setUp()方法中进行测试前的初始化工作,tearDown()方法中执行测试后的清除工作。setUp()tearDown()都是TestCase 类中定义的方法
    • testSize()中调用assertEqual()方法,对Widget 类中getSize()方法的返回值和预期值进行比较,确保两者是相等的,assertEqual()也是TestCase 类中定义的方法。
    • 提供名为suite()的全局方法,PyUnit 在执行测试的过程调用suit()方法来确定有多少个测试用例需要被执行,可以将TestSuite 看成是包含所有测试用例的一个容器。

    采用PyUnit 提供的动态方法,只编写一个测试类来完成对整个软件模块的测试,这样对象的初始化工作可以在setUp()方法中完成,而资源的释放则可以在tearDown()方法中完成。

     

    我们可以在一个测试类中,写多个测试用例对被测试类的方法进行测试。

     

    完整的单元测试很少只执行一个测试用例,开发人员通常都需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,在PyUnit 中是用TestSuite 类来表示的。可以在单元测试代码中定义一个名为suite()的全局函数,并将其作为整个单元测试的入口,PyUnit 通过调用它来完成整个测试过程。

    def suite():

         suite = unittest.TestSuite()

         suite.addTest(WidgetTestCase( "testSize"))

         suite.addTest(WidgetTestCase( "testResize"))

         return suite

     

    如果用于测试的类中所有的测试方法都以test 开头,Python 程序员甚至可以用PyUnit 模块提供的makeSuite()方法来构造一个。

    def suite():

         return unittest.makeSuite(WidgetTestCase, "test")

     

    TestSuite 类可以看成是TestCase 类的一个容器,用来对多个测试用例进行组织,这样多个测试用例可以自动在一次测试中全部完成。

     

    PyUnit 使用TestRunner 类作为测试用例的基本执行环境,来驱动整个单元测试过程。

    runner = unittest.TextTestRunner()

    runner.run(suite)

     

    # 测试

    if __name__ == "__main__" :

         # 构造测试集

         suite = unittest.TestSuite()

         suite.addTest(WidgetTestCase( "testSize"))

         suite.addTest(WidgetTestCase( "testResize"))

         # 执行测试

         runner = unittest.TextTestRunner()

         runner.run(suite)

     

    PyUnit 模块中定义了一个名为main 的全局方法,使用它可以很方便地将一个单元测试模块变成可以直接运行的测试脚本,main()方法使用TestLoader 类来搜索所有包含在该模块中的测试方法,并自动执行它们。如果Python 程序员能够按照约定(以test开头)来命名所有的测试方法,那就只需要在测试模块的最后加入如下几行代码即可:

     

    # 测试

    if __name__ == "__main__" :

         unittest.main()

     

    批量执行测试集


    合理的做法是一个例一个文件,把所文件放一个文件夹下,通过单独的脚本控制所有用例的执行,将脚本的执行结果输出到一个log 文件中。

     

    执行用例集的脚本:

    #-*-coding=utf-8 -*-

    import os

    #列出某个文件夹下的所有case,这里用的是python,所在py 文件运行一次后会生成一个pyc的副本

    caselist=os.listdir( 'D:\selenium_use_case\test_case')

    for a in caselist:

         s=a.split('.')[1:][0] #选取所要执行的用例

         if s== 'py':

              #此处执行dos 命令并将结果保存到log.txt

     

              os.system( 'D:\selenium_use_case\test_case\%s 1>>log.txt 2>&1'%a )

    引入

     

    unittest

     

    框架

     

     

    相想使用

    unittest 

    框架,首先要引入

    unittest 

     

    import unittest 

     

    class Baidu(unittest.TestCase): 

    Baidu 

    类继承

     

    unittest.TestCase 

    类,从

    TestCase 

    类继承是告诉

    unittest 

    模块的方式,这

    是一个测试案例。

     

     

    def setUp(self): 

      

      

     self.driver = webdriver.Firefox() 

      

      

     self.base_url = "http://www.baidu.com/" 

    setUp 

    用于设置初始化的部分,

    在测试用例执行前,

    这个方法中的函数将先被调用。

    这里将

    浏览器的调用和

    URL 

    的访问放到初始化部分。

     

     

    self. verificationErrors = [] 

    脚本运行时,错误的信息将被打印到这个列表中。

     

     

    self.accept_next_alert = True 

    是否继续接受下一下警告

     

     

    def test_baidu(self): 

      

      

     driver = self.driver 

      

      

     driver.get(self.base_url + "/" ) 

    test_baidu 

    中放置的就是我们的测试脚本。

     

     

    def is_element_present(self, how, what): 

      

      

     try : self.driver.find_element(by=how, value=what) 

      

      

     except NoSuchElementException, e: return False 

      

      

     return True 

    is_element_present 

    函数用来查找页面元素是否存在,在这里用处不大,通常删除。因为

    判断页面元素是否存在一般都加在

    testcase 

    中。

     

     

    def is_alert_present(self): 

      

      

     try : self.driver.switch_to_alert() 

     

      

      

     except NoAlertPresentException, e: return False 

      

      

     return True 

    对弹窗异常的处理

     

     

    def close_alert_and_get_its_text(self): 

      

      

     try : 

      

      

      

      

      

    alert = self.driver.switch_to_alert() 

      

      

      

      

      

    alert_text = alert.text 

      

      

      

      

      

    if self.accept_next_alert: 

      

      

      

      

      

      

      

     alert.accept() 

      

      

     

      

      

      

    else : 

      

      

      

      

      

      

      

     alert.dismiss() 

      

      

      

      

      

    return alert_text 

    finally : self.accept_next_alert = True 

    关闭警告和对得到文本框的处理。

     

     

    def tearDown(self): 

      

      

     self.driver.quit() 

      

      

     self.assertEqual([], self.verificationErrors) 

    tearDown 

    方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出

     

    浏览器等。

     

     

    if __name__ == "__main__": 

      

      

     unittest.main() 

    unitest.main()

    函数用来测试类中以

    test 

    开头的测试用例。

     

     

    unittest 

    单元测试框架解析

     

     

     

    import 

    语句引入

    unittest 

    模块

     

     

    让所有执行测试的类都继承于

    TestCase 

    类,

    可以将

    TestCase 

    看成是对特定类进行

    测试的方法的集合

     

     

    setUp()

    方法中进行测试前的初始化工作,

    tearDown()

    方法中执行测试后的清除工作。

    setUp()

    tearDown()

    都是

    TestCase 

    类中定义的方法

     

     

    testSize()

    中调用

    assertEqual()

    方法,

    Widget 

    类中

    getSize()

    方法的返回值和预

    期值进行比较,确保两者是相等的,

    assertEqual()

    也是

    TestCase 

    类中定义的方法。

     

     

     

    提供名为

    suite()

    的全局方法,

    PyUnit 

    在执行测试的过程调用

    suit()

    方法来确定有多

    少个测试用例需要被执行,

    可以将

    TestSuite 

    看成是包含所有测试用例的一个容器。

     

     

    采用

    PyUnit 

    提供的动态方法,只编写一个测试类来完成对整个软件模块的测试,这样对象

    的初始化工作可以在

    setUp()

    方法中完成,而资源的释放则可以在

    tearDown()

    方法中完成。

     

     

    我们可以在一个测试类中,写多个测试用例对被测试类的方法进行测试。

     

     

    完整的单元测试很少只执行一个测试用例,

    开发人员通常都需要编写多个测试用例才能对某

    一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,在

    PyUnit 

    是用

    TestSuite 

    类来表示的。

    可以在单元测试代码中定义一个名为

    suite()

    的全局函数,

    并将

    其作为整个单元测试的入口,

    PyUnit 

    通过调用它来完成整个测试过程。

     

    def suite(): 

      

      

     suite = unittest.TestSuite() 

      

      

     suite.addTest(WidgetTestCase( "testSize")) 

      

      

     suite.addTest(WidgetTestCase( "testResize")) 

      

      

     return suite 

     

    如果用于测试的类中所有的测试方法都以

    test 

    开头,

    Python 

    程序员甚至可以用

    PyUnit 

    块提供的

    makeSuite()

    方法来构造一个。

     

    def suite(): 

      

      

     return unittest.makeSuite(WidgetTestCase, "test") 

     

    TestSuite 

    类可以看成是

    TestCase 

    类的一个容器,用来对多个测试用例进行组织,这样多

    个测试用例可以自动在一次测试中全部完成。

     

     

    PyUnit 

    使用

    TestRunner 

    类作为测试用例的基本执行环境,来驱动整个单元测试过程。

     

    runner = unittest.TextTestRunner() 

    runner.run(suite) 

     

    测试

     

    if __name__ == "__main__" : 

      

      

     # 

    构造测试集

     

      

      

     suite = unittest.TestSuite() 

      

      

     suite.addTest(WidgetTestCase( "testSize")) 

      

      

     suite.addTest(WidgetTestCase( "testResize")) 

     

      

      

     # 

    执行测试

     

      

      

     runner = unittest.TextTestRunner() 

      

      

     runner.run(suite) 

     

    PyUnit 

    模块中定义了一个名为

    main 

    的全局方法,使用它可以很方便地将一个单元测试模

    块变成可以直接运行的测试脚本,

    main()

    方法使用

    TestLoader 

    类来搜索所有包含在该模块

    中的测试方法,并自动执行它们。如果

    Python 

    程序员能够按照约定(以

    test

    开头)来命名

    所有的测试方法,那就只需要在测试模块的最后加入如下几行代码即可:

     

     

    测试

     

    if __name__ == "__main__" : 

      

      

     unittest.main() 

     

    批量执行测试集

     

     

    合理的做法是一个例一个文件,

    把所文件放一个文件夹下,

    通过单独的脚本控制所有用例的

    执行,将脚本的执行结果输出到一个

    log 

    文件中。

     

     

    执行用例集的脚本:

     

    #-*-coding=utf-8 -*- 

    import os 

    #

    列出某个文件夹下的所有

    case,

    这里用的是

    python

    ,所在

    py 

    文件运行一次后会生成一个

    pyc

    的副本

     

    caselist=os.listdir( 'D:\selenium_use_case\test_case') 

    for a in caselist: 

      

      

     s=a.split('.')[1:][0] #

    选取所要执行的用例

     

      

      

     if s== 'py': 

      

      

      

      

      

    #

    此处执行

    dos 

    命令并将结果保存到

    log.txt 

      

      

      

      

      

    os.system( 'D:\selenium_use_case\test_case\%s 1>>log.txt 2>&1'%a ) 

  • 相关阅读:
    每周必写
    每周必写
    每周必写
    感想及阅读内容
    阅读内容及感想
    每周感想和阅读内容
    每周感想及阅读内容
    每周感想及阅读内容
    分答
    每周感想及阅读内容
  • 原文地址:https://www.cnblogs.com/daxiong2014/p/5704167.html
Copyright © 2011-2022 走看看