unittest測試框架
1、導入包
from selenium import webdriver
from selenium webdriver.support.select import Select
from time import sleep
import unittest
2、創建類
2.1 全局變量
driver=None
定義驅動器
放在模塊(即文件中),不要放在類中
2.2 創建測試類
class 類名(unittest.TestCase)
括號內表示繼承
不能省略
2.3 創建初始化和還原環境的函數
setUpClass(cls)
必須使用@classmethod裝飾器
cls不能省略
所有測試函數運行前運行一次
tearDownClass(cls)
必須使用@classmethod裝飾器
cls不能省略
所有測試函數運行完後運行一次
setUp(self)
每個測試函數運行前運行
self不能省略
tearDown(self)
每個測試函數運行完後執行
self不能省略
說明
這些函數都放在類中。
2.4 測試函數
def 函數名(self):
u」測試描述」
global driver
其他測試代碼
函數名必須以test開頭
self不能省略
u」測試描述」
可以省略,省略時顯示函數名
global driver用於指定driver是全局變量,只放在setUpClass中即可
多個測試函數按照函數名的ASCII順序執行
2.5 運行測試
If__name__ == 「__main__」:
unittest.main(verbosity=2)
上述代碼放在模塊內,類之外
__是雙下劃線
if__name__ == 「__main__」表示當單獨運行模塊時才會被執行,import到其他腳本中是不會被執行的
verbosity=2
顯示每個用例的詳細信息
可以省略,但測試結果不詳細
測試結果
· 代表測試通過。
F 代表測試失敗,F代表failure。
E 代表測試錯誤,E代表error。
S 代表跳過該測試,S代表skip。
3、斷言
assert str1 in str2 ,斷言失敗時的消息文本
assert 表達式 1==表達式2
self.assertIn(ste1,str2)
斷言str1是否在str中
self.assertEqual(實際,預期)
4、參數化
4.1 安裝nose_parameterized
pip install ...
4.2 導入包parameterized
報名不是nose_parameterized
import parameterized
4.3 定義參數數據
data=[ [數據11,數據12],
[數據21,數據22]
]
參數放在列表中
4.4 引用參數
@parameterized.parameterized.expand(data)
def test...(self,參數1,參數2,...):
self不能省略
參數的個數應與列表中的個數一致
可以實現局部迭代
5、測試套件
批量運行測試套件中的測試用例。
5.1 指定運行一個模塊中的一個測試
suite=unittest.TestSuite()
創建測試套件(測試用例的集合,測試容器)
suite.addTest(類名(「測試函數名」))
將一個測試用例放到測試套件中
不能省略類名
runner = unnittest.TextTestRunner()
指定使用TextTestRunner運行測試用例
runner.run(suite)
運行測試套件
5.2 指定按順序運行一個模塊中的多個測試
suite=unittest.TestSuite()
tests=[類名(「測試函數名1」),類名(「測試函數名2」),...]
只執行指定的測試函數
按照編寫的順序執行測試
多個測試放到列表中
不能省略類名
若一個測試的執行依賴於其他測試,可以使用此方式解決
suite.addTests(tests)
將測試添加到測試套件中
runner = unnittest.TextTestRunner(verbosity=2)
可以指定測試結果的詳細程度
runner.run(suite)
5.3 自動發現多個測試
創建多個測試模塊
在模塊內編寫測試類和測試函數
最好創建運行測試套件的單獨的模塊
創建類與否,均可
創建測試套件
suite=unittest.TestSuite()
指定測試用例的識別規則
tests=unittest.defaultTestLoader.discover(「測試模塊所在目錄」,pattern=」test*.py」)
識別所有test開頭的py文件為測試用例
按模塊名稱順序執行
suite.addTests(tests)
runner=unittest.TextTestRunner(verbosity=2)
Runner.run(suite)
6、測試報告
測試報告可以生成多種形式,如txt、html、xml等。
最好創建運行測試套件的單獨的模塊
導入包
import HTMLTestRunner
可以自行修改此文件
創建測試套件
suite=unittest.TestSuite()
tests=unittest.defaultTestLoader.discover(「測試模塊所在目錄」,pattern=」test*.py」)
suite.addTests(tests)
運行測試,保存報告
Now=time.strftime(「%Y%m%d%H%M%S」,time.localtime())
*獲取當前時間並設置時間格式
reportFile=」./」+now+」_result.html」
*測試報告的存放路徑及文件名,文件名中加了當前時間以便
每次生成不同的測試報告
fp=open(reportFile,」web」)
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u」報告標題功能測試報告」,description=u」報告的說明與描述」,test=u」測試員姓名」)
runner.run(suite)
fp.close()
*關閉文件流,不關的話生成的報告是空的