1. 程式人生 > >selenium單元測試框架unittest

selenium單元測試框架unittest

單元測試框架的優勢:

  • 用例規範,組織明瞭,方便後續維護
  • 提供多種比較方法
  • 日誌清晰,能夠快速定位bug

 四個概念:

  • test case:測試用例,即一個包括setUp--run--tearDown的測試流程
  • test suite:測試套件,可以執行一個或多個測試用例
  • test runner:執行用例,測試結果儲存到TextTeestResult例項中
  • test fixture:對一個測試用例環境的搭建和銷燬,通過setUp和tearDown視線

 

在count.py檔案中定義Count類

#coding=utf-8
class Count: """docstring for Count""" def __init__(self,a,b): #初始化引數 self.a=a self.b=b def add(self): return self.a+self.b

un_test.py檔案

#coding=utf-8
from count import Count
import unittest

class TestCount(unittest.TestCase):
    """docstring for TestCount
""" def setUp(self): #測試開始前的前置性工作 self.c = Count(4,6) def test_count(self): #測試案例必須以test開頭 self.add = self.c.add() self.assertEqual(self.add,10) def tearDown(self): #完成測試後的後置工作 pass if __name__ == '__main__': unittest.main() #main方法預設執行所有的用例

將assertEqual(self.add,10)改為assertEqual(self.add,8),再執行一次,則有詳細的報錯資訊

 

main()方法中封裝了TestSuite()和TextTestRunner(),註釋掉main()方法後如下:

    #unittest.main()

    #構造測試集
    suite = unittest.TestSuite()
    suite.addTest(TestCount('test_count'))  #addTest裝載測試用例,只執行裝載的用例

    #執行測試
    runner = unittest.TextTestRunner()
    runner.run(suite)

 

unittest中提供的比較方法:

 

discover更多測試用例

太多用例寫在一個檔案中不便於後續的維護工作,discover方法後續新增 un_*.py 檔案時,不需要對 alltest.py 檔案進行修改

如果discover中執行的檔案涉及到多層級目錄,需要在每個目錄中新增__init__.py檔案

#alltest.py


#coding=utf-8
import unittest

def creatsuite():
    testunit = unittest.TestSuite()
    test_address = 'C:\\Users\\user\\Desktop\\python_study\\script'  #測試指令碼所在目錄

    #定義discover方法的引數
    discover = unittest.defaultTestLoader.discover(test_address,pattern='un_*.py',top_level_dir=None)

    for test_suite in discover:
        for test_case in test_suite:
            testunit.addTests(test_case)
    return testunit

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(creatsuite())

兩個測試類檔案un_test.py  un_test2.py

#un_test.py


#coding=utf-8
from count import Count
import prime
import unittest

class TestCount(unittest.TestCase):
    """docstring for TestCount"""
    def setUp(self): 
        self.c = Count(4,6)

    def test_count(self):  
        self.add = self.c.add()
        self.assertEqual(self.add,10)

    def test_prime(self):
        self.pr = prime.is_Prime(3)
        self.assertTrue(self.pr,msg='is not prime')

    def tearDown(self):  
        pass
#un_test2.py


#coding=utf-8
from count import Count
import prime
import unittest

class TestCount2(unittest.TestCase):
    """docstring for TestCount"""
    def setUp(self): 
        self.c = Count(4,6)

    def test_count2(self): 
        self.add = self.c.add()
        self.assertEqual(self.add,10)

    def test_prime2(self):
        self.pr = prime.is_Prime(3)
        self.assertTrue(self.pr,msg='is not prime')

    def tearDown(self): 
        pass

 

對於目錄、檔案、用例來說,預設根據ASCII碼順序執行:0~9,A~Z,a~z

如果對用例執行有順序要求,可以通過調整目錄、檔案、用例的名稱或者用 TestSuite 類的 addTest() 方法按照一定的順序來載入