介紹
unittest原名為PyUnit,是由Java的JUnit衍生而來(lái).它支持自動(dòng)化測(cè)試,在測(cè)試中使用setup(初始化)和shutdown(關(guān)閉銷毀)操作,組織測(cè)試用例為套件(批量運(yùn)行),以及把測(cè)試和報(bào)告獨(dú)立開來(lái)。為了實(shí)現(xiàn)這些,unittest以一種面向?qū)ο蟮姆绞疆a(chǎn)生了一些很重要的概念:
- test fixture:fixture表示tests運(yùn)行前需要做的準(zhǔn)備工作以及結(jié)束后的清理工作。比如,創(chuàng)建臨時(shí)/代理數(shù)據(jù)庫(kù)、目錄或啟動(dòng)一個(gè)服務(wù)器進(jìn)程。
- test case:test case是單元測(cè)試中的最小個(gè)體。它檢查特定輸入的響應(yīng)信息。unittest提供了一個(gè)基礎(chǔ)類:TestCase,用來(lái)創(chuàng)建test case。
- test suite:test suite是test case的合集,通常用test suite將test case匯總?cè)缓笠黄饒?zhí)行。
- test runner:test runner是一個(gè)執(zhí)行器,它可以執(zhí)行case并提供結(jié)果給用戶。它可以提供圖形界面、文本界面或者返回一個(gè)值表示測(cè)試結(jié)果。
工作原理
unittest中最核心的五個(gè)概念是:test case, test suite,?testLoader,test runner, test fixture。
下面我們分別來(lái)解釋這四個(gè)概念的意思,先來(lái)看一張unittest的靜態(tài)類圖(下面的類圖以及解釋均來(lái)源于網(wǎng)絡(luò),原文鏈接):
- 一個(gè)TestCase的實(shí)例就是一個(gè)測(cè)試用例。什么是測(cè)試用例呢?就是一個(gè)完整的測(cè)試流程,包括測(cè)試前準(zhǔn)備環(huán)境的搭建(setUp),執(zhí)行測(cè)試代碼(run),以及測(cè)試后環(huán)境的還原(tearDown)。單元測(cè)試(unit test)的本質(zhì)也就在這里,一個(gè)測(cè)試用例是一個(gè)完整的測(cè)試單元,通過(guò)運(yùn)行這個(gè)測(cè)試單元,可以對(duì)某一個(gè)問(wèn)題進(jìn)行驗(yàn)證。
- 而多個(gè)測(cè)試用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
- TestLoader是用來(lái)加載TestCase到TestSuite中的,其中有幾個(gè)loadTestsFrom__()方法,就是從各個(gè)地方尋找TestCase,創(chuàng)建它們的實(shí)例,然后add到TestSuite中,再返回一個(gè)TestSuite實(shí)例。
- TextTestRunner是來(lái)執(zhí)行測(cè)試用例的,其中的run(test)會(huì)執(zhí)行TestSuite/TestCase中的run(result)方法。?
- 測(cè)試的結(jié)果會(huì)保存到TextTestResult實(shí)例中,包括運(yùn)行了多少測(cè)試用例,成功了多少,失敗了多少等信息。
- 而對(duì)一個(gè)測(cè)試用例環(huán)境的搭建和銷毀,是一個(gè)fixture。
簡(jiǎn)單示例
# 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('手機(jī)登錄').click()
self.driver.find_element_by_id("username").send_keys("18300000000")
self.driver.find_element_by_name('獲取驗(yàn)證碼').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測(cè)試報(bào)告寫入文件的存儲(chǔ)區(qū)域,verbosity參數(shù)可以控制輸出的錯(cuò)誤報(bào)告的詳細(xì)程度,默認(rèn)為1如果設(shè)為0,則不輸出每一用例的執(zhí)行結(jié)果,如果設(shè)為 2,則輸出詳細(xì)的執(zhí)行結(jié)果
runner = HTMLTestRunner.HTMLTestRunner(title="測(cè)試報(bào)告標(biāo)題", description="這是測(cè)試報(bào)告的描述", stream=open(filename, "wb"),verbosity=2, retry=0)
runner.run()
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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