詳解python單元測(cè)試框架unittest
一:unittest是python自帶的一個(gè)單元測(cè)試框架,類似于java的junit,基本結(jié)構(gòu)是類似的。
基本用法如下:
1.用import unittest導(dǎo)入unittest模塊
2.定義一個(gè)繼承自u(píng)nittest.TestCase的測(cè)試用例類,如
class abcd(unittest.TestCase):
3.定義setUp和tearDown,這兩個(gè)方法與junit相同,即如果定義了則會(huì)在每個(gè)測(cè)試case執(zhí)行前先執(zhí)行setUp方法,執(zhí)行完畢后執(zhí)行tearDown方法。
4.定義測(cè)試用例,名字以test開(kāi)頭,unittest會(huì)自動(dòng)將test開(kāi)頭的方法放入測(cè)試用例集中。
5.一個(gè)測(cè)試用例應(yīng)該只測(cè)試一個(gè)方面,測(cè)試目的和測(cè)試內(nèi)容應(yīng)很明確。主要是調(diào)用assertEqual、assertRaises等斷言方法判斷程序執(zhí)行結(jié)果和預(yù)期值是否相符。
6.調(diào)用unittest.main()啟動(dòng)測(cè)試
7.如果測(cè)試未通過(guò),則會(huì)顯示e,并給出具體的錯(cuò)誤(此處為程序問(wèn)題導(dǎo)致)。如果測(cè)試失敗則顯示為f,測(cè)試通過(guò)為.,如有多個(gè)testcase,則結(jié)果依次顯示。
一個(gè)單testcase的簡(jiǎn)單的例子:
# -*- coding:UTF-8 -*-
'''
Created on 2015年3月24日
@author: Administrator
'''
import unittest
from selenium import webdriver
import time
class TestCase1(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.base_url="http://www.baidu.com"
def tearDown(self):
self.driver.quit()
def testCase1(self):
driver=self.driver
driver.get(self.base_url)
print "將窗口最大化"
driver.maximize_window()
time.sleep(10)
if __name__ == "__main__":
unittest.main()
一個(gè)多testcase的例子:
# -*- coding:UTF-8 -*-
'''
Created on
@author: Administrator
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException,\
NoAlertPresentException
import HTMLTestRunner
#form selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
class Baidu(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://www.baidu.com/?tn=98012088_4_dg&ch=3"
self.verificationErrors = []
self.accept_next_alert = True
self.driver.get(self.base_url)
def test_baidu_search(self):
'''百度搜索'''
driver = self.driver
# driver.get(self.base_url + "/")
try:
driver.find_element_by_id("kw").send_keys("selenium webdriver")
driver.find_element_by_id("su").click()
except:
driver.get_screenshot_as_file('D:\\workspace\\python_prictise\\src\\error.png')
time.sleep(2)
driver.close()
def test_baidu_set(self):
'''百度新聞'''
driver = self.driver
driver.find_element_by_name("tj_trnews").click()
self.assertEqual(driver.title,u'百度新聞搜索——全球最大的中文新聞平臺(tái)',"switch to baidu news faile!")
# time.sleep(2)
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException: return False
return True
def is_alert_present(self):
try: self.driver.switch_to_alert()
except NoAlertPresentException: return False
return True
def close_alert_and_get_its_text(self):
try:
alert = self.driver.switch_to_alert()
alert_text = alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally: self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
二:跳過(guò)單個(gè)testcase和testclass的方法
在unittest中也支持類似junit中的跳過(guò)單個(gè)測(cè)試case或者測(cè)試class的方法,如下:
@unittest.skip(reason)
無(wú)條件的跳過(guò)被修飾的testcase或者testclass,reason描述為何跳過(guò)該測(cè)試,為一個(gè)字符串;
@unittest.skipIf(condition,reason)
如果條件condition為真,則跳過(guò)該testcase或者testclass;
@unittest.skipUnless(condition,reason)
除非條件condition為真,否則跳過(guò)被修飾的testcase或者testclass;
@unittest.expectedFailure
標(biāo)記測(cè)試為一個(gè)預(yù)期失敗的測(cè)試,但不會(huì)作為失敗測(cè)試統(tǒng)計(jì)在結(jié)果中;
三:斷言
在unittest中用斷言來(lái)判斷是pass還是fail,常見(jiàn)的斷言方法如下:
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b 2.7
assertGreaterEqual(a, b) a >= b 2.7
assertLess(a, b) a < b 2.7
assertLessEqual(a, b) a <= b 2.7
assertRegexpMatches(s, re) regex.search(s) 2.7
assertNotRegexpMatches(s, re) not regex.search(s) 2.7
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs 2.7
assertDictContainsSubset(a, b) all the key/value pairs in a exist in b 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
其他斷言方法請(qǐng)查閱官方文檔
四:組成測(cè)試套件
1.添加數(shù)量較少的測(cè)試case,可以用如下方法:
suite=unittest.Testsuite()
suite.addTest(testclass(testcase))
這里testclass為測(cè)試類的名稱,testcase為該測(cè)試類下的測(cè)試case的名稱,為字符串。
2.對(duì)于有多個(gè)測(cè)試類的情況,可以用如下方法:
def createsuite():
testunit=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(testdir,pattern='test_*.py', top_level_dir=None)
print discover
for test_suite in discover:
for testsuit in test_suite:
testunit.addTest(testsuit)
return testunit
alltestnames = createsuite()
如此便可以將一個(gè)目錄下多個(gè)測(cè)試文件中的testcase導(dǎo)入。
- Python單元測(cè)試工具doctest和unittest使用解析
- Django使用unittest模塊進(jìn)行單元測(cè)試過(guò)程解析
- Python單元測(cè)試unittest的具體使用示例
- Python unittest單元測(cè)試框架總結(jié)
- Python unittest單元測(cè)試框架的使用
- unittest+coverage單元測(cè)試代碼覆蓋操作實(shí)例詳解
- Python Unittest自動(dòng)化單元測(cè)試框架詳解
- 利用Python中unittest實(shí)現(xiàn)簡(jiǎn)單的單元測(cè)試實(shí)例詳解
- python單元測(cè)試unittest實(shí)例詳解
- 分享unittest單元測(cè)試框架中幾種常用的用例加載方法
相關(guān)文章
Pandas執(zhí)行SQL操作的實(shí)現(xiàn)
使用SQL語(yǔ)句能夠完成對(duì)table的增刪改查操作,Pandas同樣也可以實(shí)現(xiàn)SQL語(yǔ)句的基本功能,本文就來(lái)介紹一下,具有一檔的參考價(jià)值,感興趣的可以了解一下2024-07-07
python標(biāo)準(zhǔn)庫(kù)turtle海龜繪圖實(shí)現(xiàn)簡(jiǎn)單奧運(yùn)五環(huán)
這篇文章主要為大家介紹了python使用turtle實(shí)現(xiàn)最簡(jiǎn)單簡(jiǎn)單奧運(yùn)五環(huán)繪圖,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python的flask接收前臺(tái)的ajax的post數(shù)據(jù)和get數(shù)據(jù)的方法
這篇文章主要介紹了Python的flask接收前臺(tái)的ajax的post數(shù)據(jù)和get數(shù)據(jù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
pytorch 把圖片數(shù)據(jù)轉(zhuǎn)化成tensor的操作
這篇文章主要介紹了pytorch 把圖片數(shù)據(jù)轉(zhuǎn)化成tensor的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Django與pyecharts結(jié)合的實(shí)例代碼
這篇文章主要介紹了Django與pyecharts結(jié)合的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
對(duì)Python之gzip文件讀寫(xiě)的方法詳解
今天小編就為大家分享一篇對(duì)Python之gzip文件讀寫(xiě)的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
pyqt5教程QGraphicsScene及QGraphicsView使用基礎(chǔ)
這篇文章主要為大家介紹了pyqt5教程中QGraphicsScene及QGraphicsView使用基礎(chǔ),有序要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
scrapy框架中用ssh連接遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)
本文主要介紹了scrapy?框架中用ssh連接遠(yuǎn)程服務(wù)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01

