unittest單元測試框架總結

unittest單元測試框架不只能夠適用於單元測試,還能夠適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,而且提供了豐富的斷言方法,判斷測試用例是否經過,最終生成測試結果。今天筆者就總結下如何使用unittest單元測試框架來進行WEB自動化測試
1、unittest模塊的各個屬性說明
先來聊一聊unittest模塊的各個屬性,所謂知己知彼方能百戰百勝,瞭解unittest的各個屬性,對於後續編寫用例有很大的幫助。
1.unittest的屬性以下:web

[‘BaseTestSuite’, ‘FunctionTestCase’, ‘SkipTest’, ‘TestCase’, ‘TestLoader’, ‘TestProgram’, ‘TestResult’, ‘TestSuite’, ‘TextTestResult’, ‘TextTestRunner’, ‘_TextTestResult’, ‘all’, ‘builtins’, ‘doc’, ‘file’, ‘name’, ‘package’, ‘path’, ‘__unittest’, ‘case’, ‘defaultTestLoader’, ‘expectedFailure’, ‘findTestCases’, ‘getTestCaseNames’, ‘installHandler’, ‘loader’, ‘main’, ‘makeSuite’, ‘registerResult’, ‘removeHandler’, ‘removeResult’, ‘result’, ‘runner’, ‘signals’, ‘skip’, ‘skipIf’, ‘skipUnless’, ‘suite’, ‘util’]數據庫

說明:瀏覽器

unittest.TestCase:TestCase類,全部測試用例類繼承的基本類。markdown

class BaiduTest(unittest.TestCase):

unittest.main():使用她能夠方便的將一個單元測試模塊變爲可直接運行的測試腳本,main()方法使用TestLoader類來搜索全部包含在該模塊中以「test」命名開頭的測試方法,並自動執行他們。執行方法的默認順序是:根據ASCII碼的順序加載測試用例,數字與字母的順序爲:0-9,A-Z,a-z。因此以A開頭的測試用例方法會優先執行,以a開頭會後執行。框架

unittest.TestSuite():unittest框架的TestSuite()類是用來建立測試套件的。less

unittest.TextTextRunner():unittest框架的TextTextRunner()類,經過該類下面的run()方法來運行suite所組裝的測試用例,入參爲suite測試套件。ssh

unittest.defaultTestLoader(): defaultTestLoader()類,經過該類下面的discover()方法可自動更具測試目錄start_dir匹配查找測試用例文件(test*.py),並將查找到的測試用例組裝到測試套件,所以能夠直接經過run()方法執行discover。用法以下:ide

discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

unittest.skip():裝飾器,當運行用例時,有些用例可能不想執行等,可用裝飾器暫時屏蔽該條測試用例。一種常見的用法就是好比說想調試某一個測試用例,想先屏蔽其餘用例就能夠用裝飾器屏蔽。單元測試

@unittest.skip(reason): skip(reason)裝飾器:無條件跳過裝飾的測試,並說明跳過測試的緣由。測試

@unittest.skipIf(reason): skipIf(condition,reason)裝飾器:條件爲真時,跳過裝飾的測試,並說明跳過測試的緣由。

@unittest.skipUnless(reason): skipUnless(condition,reason)裝飾器:條件爲假時,跳過裝飾的測試,並說明跳過測試的緣由。

@unittest.expectedFailure(): expectedFailure()測試標記爲失敗。

2.TestCase類的屬性以下:

[‘call’, ‘class’, ‘delattr’, ‘dict’, ‘doc’, ‘eq’, ‘format’, ‘getattribute’, ‘hash’, ‘init’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘_addSkip’, ‘_baseAssertEqual’, ‘_classSetupFailed’, ‘_deprecate’, ‘_diffThreshold’, ‘_formatMessage’, ‘_getAssertEqualityFunc’, ‘truncateMessage’, ‘addCleanup’, ‘addTypeEqualityFunc’, ‘assertAlmostEqual’, ‘assertAlmostEquals’, ‘assertDictContainsSubset’, ‘assertDictEqual’, ‘assertEqual’, ‘assertEquals’, ‘assertFalse’, ‘assertGreater’, ‘assertGreaterEqual’, ‘assertIn’, ‘assertIs’, ‘assertIsInstance’, ‘assertIsNone’, ‘assertIsNot’, ‘assertIsNotNone’, ‘assertItemsEqual’, ‘assertLess’, ‘assertLessEqual’, ‘assertListEqual’, ‘assertMultiLineEqual’, ‘assertNotAlmostEqual’, ‘assertNotAlmostEquals’, ‘assertNotEqual’, ‘assertNotEquals’, ‘assertNotIn’, ‘assertNotIsInstance’, ‘assertNotRegexpMatches’, ‘assertRaises’, ‘assertRaisesRegexp’, ‘assertRegexpMatches’, ‘assertSequenceEqual’, ‘assertSetEqual’, ‘assertTrue’, ‘assertTupleEqual’, 'assert’, ‘countTestCases’, ‘debug’, ‘defaultTestResult’, ‘doCleanups’, ‘fail’, ‘failIf’, ‘failIfAlmostEqual’, ‘failIfEqual’, ‘failUnless’, ‘failUnlessAlmostEqual’, ‘failUnlessEqual’, ‘failUnle***aises’, ‘failureException’, ‘id’, ‘longMessage’, ‘maxDiff’, ‘run’, ‘setUp’, ‘setUpClass’, ‘shortDescription’, ‘skipTest’, ‘tearDown’, ‘tearDownClass’]

說明:

setUp():setUp()方法用於測試用例執行前的初始化工做。如測試用例中須要訪問數據庫,能夠在setUp中創建數據庫鏈接並進行初始化。如測試用例須要登陸web,能夠先實例化瀏覽器。

tearDown():tearDown()方法用於測試用例執行以後的善後工做。如關閉數據庫鏈接。關閉瀏覽器。

assert*():一些斷言方法:在執行測試用例的過程當中,最終用例是否執行經過,是經過判斷測試獲得的實際結果和預期結果是否相等決定的。

assertEqual(a,b,[msg=‘測試失敗時打印的信息’]):斷言a和b是否相等,相等則測試用例經過。

assertNotEqual(a,b,[msg=‘測試失敗時打印的信息’]):斷言a和b是否相等,不相等則測試用例經過。

assertTrue(x,[msg=‘測試失敗時打印的信息’]):斷言x是否True,是True則測試用例經過。

assertFalse(x,[msg=‘測試失敗時打印的信息’]):斷言x是否False,是False則測試用例經過。

assertIs(a,b,[msg=‘測試失敗時打印的信息’]):斷言a是不是b,是則測試用例經過。

assertNotIs(a,b,[msg=‘測試失敗時打印的信息’]):斷言a是不是b,不是則測試用例經過。

assertIsNone(x,[msg=‘測試失敗時打印的信息’]):斷言x是否None,是None則測試用例經過。

assertIsNotNone(x,[msg=‘測試失敗時打印的信息’]):斷言x是否None,不是None則測試用例經過。

assertIn(a,b,[msg=‘測試失敗時打印的信息’]):斷言a是否在b中,在b中則測試用例經過。

assertNotIn(a,b,[msg=‘測試失敗時打印的信息’]):斷言a是否在b中,不在b中則測試用例經過。

assertIsInstance(a,b,[msg=‘測試失敗時打印的信息’]):斷言a是是b的一個實例,是則測試用例經過。

assertNotIsInstance(a,b,[msg=‘測試失敗時打印的信息’]):斷言a是是b的一個實例,不是則測試用例經過。

3.TestSuite類的屬性以下:(組織用例時須要用到)

[‘call’, ‘class’, ‘delattr’, ‘dict’, ‘doc’, ‘eq’, ‘format’, ‘getattribute’, ‘hash’, ‘init’, ‘iter’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘_addClassOrModuleLevelException’, ‘_get_previous_module’, ‘_handleClassSetUp’, ‘_handleModuleFixture’, ‘_handleModuleTearDown’, ‘_tearDownPreviousClass’, ‘_tests’, ‘addTest’, ‘addTests’, ‘countTestCases’, ‘debug’, ‘run’]

說明:

addTest(): addTest()方法是將測試用例添加到測試套件中,以下方,是將test_baidu模塊下的BaiduTest類下的test_baidu測試用例添加到測試套件。

suite = unittest.TestSuite()
suite.addTest(test_baidu.BaiduTest('test_baidu'))

4.TextTextRunner的屬性以下:(組織用例時須要用到)

[‘class’, ‘delattr’, ‘dict’, ‘doc’, ‘format’, ‘getattribute’, ‘hash’, ‘init’, ‘module’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘_makeResult’, ‘buffer’, ‘descriptions’, ‘failfast’, ‘resultclass’, ‘run’, ‘stream’, ‘verbosity’]

說明:

run(): run()方法是運行測試套件的測試用例,入參爲suite測試套件。

runner = unittest.TextTestRunner()
runner.run(suite)

例子:
(1)

from selenium import webdriver
import unittest, time

class YoudaoTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30) #隱性等待時間爲30秒
        self.base_url = "http://www.youdao.com"
    
    def test_youdao(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("translateContent").clear()
        driver.find_element_by_id("translateContent").send_keys(u"你好")
        driver.find_element_by_id("translateContent").submit()
        time.sleep(3)
        page_source=driver.page_source
        self.assertIn( "hello",page_source) 

    def tearDown(self):
        self.driver.quit()

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

(2)

import unittest
from test_case import test_baidu
from test_case import test_youdao

#構造測試集
suite = unittest.TestSuite()
suite.addTest(test_baidu.BaiduTest('test_baidu'))
suite.addTest(test_youdao.YoudaoTest('test_youdao'))

if __name__=='__main__':
    #執行測試
    runner = unittest.TextTestRunner()
    runner.run(suite)
相關文章
相關標籤/搜索