1.unittest單元測試框架文件結構
unittest是python單元測試框架之一,unittest測試框架的主要文件結構:
File
>report
>all_case.py
>test_case
>__init__.py
>test_case1.....
>public
>__init__.py
>login.py
>loginout.py
test_case文件夾主要存放測試用例,且測試用例命名以test_開頭
public文件夾是test_case文件夾的子文件夾,主要存放公共模塊,例如登錄退出模塊
report文件夾主要存放在測試用例執行完成后生成的測試報告
all_case腳本文件是主要的執行腳本,該腳本集合所有測試用例,執行所有的測試用例
2.unittest框架的最簡單結構
在selenium + python自動化測試unittest框架學習(一)selenium原理及應用這篇中說道可以將錄制的瀏覽器行為導出成指定的編程語言,如果我們先是通過Selenium ide錄制后導出的python腳本,那么可以發現每一個腳本的都會有這樣一個簡單的結構,先忽略那些判斷元素是否存在的函數。其基本的結構如下所示:
setUp()
tearDown()
test_case1()
unittest.main()
setUp:初始化函數,每一個測試用例執行之前都會執行一遍
tearDown:測試用例執行完成后的瀏覽器退出等清理操作
test_case1():編寫的測試用例腳本
unittest.main():自動執行方法名為test_開頭的方法
3.unittest測試框架優化結構2
單單一個腳本不可能包含所有的測試用例,所以不同的測試用例可以寫成不同的測試用例腳本放置在test_case文件夾中,那么執行測試用例的時候我們需要一個測試套件TestSuite來加載所有的測試用例腳本,添加測試用例的方法addTest(),並且使用TextTestRunner運行測試腳本。
- 先構造測試集
- 實例化測試套件
- suite=unittest.TestSuite()
- 將測試用例加載到測試套件中。
- suite.addTest(Test('test_case2'))
- suite.addTest(Test('test_case1'))
- 實例化測試套件
- 執行測試用例
- 實例化TextTestRunner類
- runner=unittest.TextTestRunner()
- 使用run()方法運行測試套件(即運行測試套件中的所有用例)
- runner.run(suite)
- 實例化TextTestRunner類
該結構的缺點是每一個測試用例的增加都要添加一條addTest()方法,這就增加自動化腳本上的繁瑣,所以我們可以想辦法自動加載符合條件的測試用例
4.unittest測試框架優化結構3
該結構簡化了一些步驟,即不用先創建測試套件,然后通過添加測試用例的方式,將測試用例逐條加載,TestLoader下的discover方法可以遞歸查詢其指定路徑下的子目錄下符合條件的測試用例加載。
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
執行測試用例
實例化TextTestRunner類
runner=unittest.TextTestRunner()
使用run()方法運行測試套件(即運行測試套件中的所有用例)
runner.run(discover)
5.unittest執行文件all_case.py代碼結構如下:
# coding=utf-8
import unittest
import HTMLTestRunner
import time
from test_case.public import login
def createsuit():
#創建測試用例集
testunit = unittest.TestSuite()
#判斷是否為測試用例,自動加載測試用例到測試套件中
cslist = "D:\\fcj\\study\\seleniumtest\\test_case"
#discover方法定義
discover = unittest.defaultTestLoader.discover(
#測試用例放置的文件夾名
cslist,
pattern = 'test_*.py',
top_level_dir = None
)
#discover方法篩選出來的用例,循環添加到測試套件中
for test_suite in discover:
testunit.addTests(test_suite)
print(testunit)
return testunit
alltestnames = createsuit()
if __name__ == "__main__":
now = time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time()))
#定義報告存放路徑
filename = 'D:\\fcj\\study\\seleniumtest\\report\\'+now+'result.html'
fp = open(filename,'wb')
#定義測試報告
runner = HTMLTestRunner.HTMLTestRunner(
stream = fp,
title = u'A項目后台測試報告',
description = u'用例執行情況:'
)
#執行測試
runner.run(alltestnames)
fp.close()
