介紹
unittest原名為PyUnit,是由Java的JUnit衍生而來.它支持自動化測試,在測試中使用setup(初始化)和shutdown(關閉銷毀)操作,組織測試用例為套件(批量運行),以及把測試和報告獨立開來。為了實現這些,unittest以一種面向對象的方式產生了一些很重要的概念:
- test fixture:fixture表示tests運行前需要做的準備工作以及結束后的清理工作。比如,創建臨時/代理數據庫、目錄或啟動一個服務器進程。
- test case:test case是單元測試中的最小個體。它檢查特定輸入的響應信息。unittest提供了一個基礎類:TestCase,用來創建test case。
- test suite:test suite是test case的合集,通常用test suite將test case匯總然后一起執行。
- test runner:test runner是一個執行器,它可以執行case并提供結果給用戶。它可以提供圖形界面、文本界面或者返回一個值表示測試結果。
工作原理
unittest中最核心的五個概念是:test case, test suite,?testLoader,test runner, test fixture。
下面我們分別來解釋這四個概念的意思,先來看一張unittest的靜態類圖(下面的類圖以及解釋均來源于網絡,原文鏈接):
- 一個TestCase的實例就是一個測試用例。什么是測試用例呢?就是一個完整的測試流程,包括測試前準備環境的搭建(setUp),執行測試代碼(run),以及測試后環境的還原(tearDown)。單元測試(unit test)的本質也就在這里,一個測試用例是一個完整的測試單元,通過運行這個測試單元,可以對某一個問題進行驗證。
- 而多個測試用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
- TestLoader是用來加載TestCase到TestSuite中的,其中有幾個loadTestsFrom__()方法,就是從各個地方尋找TestCase,創建它們的實例,然后add到TestSuite中,再返回一個TestSuite實例。
- TextTestRunner是來執行測試用例的,其中的run(test)會執行TestSuite/TestCase中的run(result)方法。?
- 測試的結果會保存到TextTestResult實例中,包括運行了多少測試用例,成功了多少,失敗了多少等信息。
- 而對一個測試用例環境的搭建和銷毀,是一個fixture。
簡單示例
# coding=utf-8
__author__ = "小小漁夫"
from appium import webdriver
from common.HTMLTestRunner import HTMLTestRunner
import unittest
class LoginTest(unittest.TestCase):
def setUp(self):
desired_caps = {
'platformName': 'Android',
'deviceName': 'SGEEGEHIQ8I7CI90',
'platformVersion': '7.0',
'appPackage': 'com.XXX.mall',
'appActivity': '.business.main.MainActivity'
}
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
def testCase(self):
self.driver.find_element_by_id("bottom_nav").click()
self.driver.find_element_by_name('使用其他方式登錄').click()
self.driver.find_element_by_name('手機登錄').click()
self.driver.find_element_by_id("username").send_keys("18300000000")
self.driver.find_element_by_name('獲取驗證碼').send_keys("123456")
self.driver.find_element_by_id("btn").click()
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
filename = "E:\\report.html"
# stream測試報告寫入文件的存儲區域,verbosity參數可以控制輸出的錯誤報告的詳細程度,默認為1如果設為0,則不輸出每一用例的執行結果,如果設為 2,則輸出詳細的執行結果
runner = HTMLTestRunner.HTMLTestRunner(title="測試報告標題", description="這是測試報告的描述", stream=open(filename, "wb"),verbosity=2, retry=0)
runner.run()
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
