用python搭建自動化測試框架,需要組織用例以及測試執行,大部分推薦的是unittest。現在搭建python介面框架用的也是這個,隨著了解,也有其他的框架,有時間再多去學習,保持持續學習哦~希望對大家有幫助
unittest是python自帶的單元測試框,可以用來作自動化測試框架的用例組織執行框架。
優點:提供用例組織與執行方法;提供比較方法;提供豐富的日誌、清晰的報告
流程:寫好testcase
由testloader載入testcase到testsuite
然後由texttestrunner來執行testsuite,執行的結果儲存在texttestresult中。
通過命令列或者unittest.main()執行時,main會呼叫texttestrunner中的run()來執行,或者可以直接通過texttestrunner來執行用例。
在runner執行時,預設將執行結果輸出到控制台,我們可以設定其輸出到檔案,在檔案中檢視結果
unittest中最核心的部分是:testfixture、testcase、testsuite、testrunner
1、test fixture
測試用例每次執行之前需要準備測試環境,每次測試完成後還原測試環境,例如連線資料庫,開啟瀏覽器動作執行完後需要還原關閉
setup():準備環境,執行每個測試用例的前置條件;
teardown():環境還原,執行每個測試用例的後置條件;
setupclass():必須使用@classmethod裝飾器,所有case執行的前置條件,只執行一次;
teardownclass():必須使用@classmethod裝飾器,所有case執行完後只執行一次;
例如:# 重寫testcase的setup() teardown()方法:在每個測試方法執行前以及執行後各執行一次
def setup(self):
print("開始")
def teardown(self):
print("結束")
2、testcase
類,unittest.testcase
乙個類class繼承 unittest.testcase,就是乙個測試用例。乙個testcase的例項就是乙個測試用例,就是乙個完整的測試流程。
包括測試前環境準備setup()|setupclass()、執行**run()、測試環境後的還原teardown()|teardownclass()。
繼承自unittest.testcase的類中,測試方法的名稱要以test開頭。且只會執行以test開頭定義的方法(測試用例)
例如:import unittest
class mytestcase(unittest.testcase):
# 繼承自unittest.testcase
# 重寫testcase的setup()、teardown()方法:在每個測試方法執行前以及執行後各執行一次
def setup(self):
print("開始")
def test_something(self):
self.assertequal(true, false)
def teardown(self):
print("結束")
# 如果想在所有case執行之前準備一次測試環境,並在所有case執行結束後再清理環境
#classmethod是用來指定乙個類的方法為類方法,沒有此引數指定的類的方法為例項方法
# @classmethod
# def setupclass(cls):
# print("開始")
# @classmethod
# def teardownclass(cls):
# print("結束")
if __name__ == '__main__':
# 在main()中加verbosity引數,可以控制輸出的錯誤報告的詳細程度
# verbosity=*:預設是1;設為0,則不輸出每乙個用例的執行結果;2-輸出詳細的執行結果
unittest.main(verbosity=2)
3、testsuite
把多個測試用例集合起來,一起執行,就需要testsuite。testsuite還可以包含testsuite
一般通過addtest()或者addtests()向suite中新增。case的執行順序與新增到suite中的順序是一致的
例如:if __name__ == '__main__':
# unittest.main() #使用main()直接執行時,將按case的名稱順序執行
suite = unittest.testsuite()
suite.addtest(mytestcase('test_01')) # 將需要執行的case新增到test suite中,沒有新增的不會被執行
suite.addtest(mytestcase('test_02'))
suite.addtest(mytestcase('test_03'))
unittest.texttestrunner().run(suite) # 將根據case新增的先後順序執行
4、testrunner
e:\python高階\inte***ceapi (htmltest.py)
import htmltestrunner
import unittest
from demo import testdemo
import os
#獲取路徑
abspath = os.path.abspath(os.path.realpath(os.path.dirname(__file__)))
if __name__ == '__main__':
suite = unittest.testsuite()
suite.addtest(testdemo.mytestcase("test_one"))
suite.addtest(testdemo.mytestcase("test_something"))
#如果沒指定路徑需要建立路徑
path=abspath
if not os.path.exists(path):
os.makedirs(path)
else:
pass
report_path = "report.html"
report_title = u"測試報告"
desc = u"介面自動化測試報告詳情"
fp = open(report_path, 'wb')
runner = htmltestrunner.htmltestrunner(fp, title=report_title, description=desc)
runner.run(suite)
python unittest基礎用法
unittest 執行例項 基礎用法 import unittest 匯入unittest模組 defcalc a,b 被測的方法 return a b class testcale unittest.testcase 必須要整合unittest的testcase方法 deftest1 self r...
Python unittest學習筆記
python標準庫中的模組unittest提供了 測試工具。單元測試用於核實函式的某個方面沒問題 測試用例是一組單元測試,這些單元測試一起核實函式在各種情形下的行為都符合要求。良好的測試用例考慮到了函式可能收到的各種輸入,包含針對所有這些情形的測試。全覆蓋式測試用例包含一整套單元測試,涵蓋了各種可能...
python unittest 之mock學習筆記
mock的詳細用法 英文介紹 本文先對函式的mock方法進行演示。假設有檔案fun1和fun2,fun2中的函式呼叫了fun1中的函式。利用mock方法生成fun1中函式的乙個fake返回值,在此基礎上,對fun2中的函式進行單元測試。如下 fun1檔案 usr bin env python cod...