最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python單元測(cè)試框架unittest基本用法案例

 更新時(shí)間:2022年09月15日 10:53:08   作者:sky-開發(fā)  
unittest庫unittest庫是python的內(nèi)置庫,用來對(duì)程序進(jìn)行測(cè)試,下面這篇文章主要給大家介紹了關(guān)于python中單元測(cè)試框架unittest基本用法的相關(guān)資料,需要的朋友可以參考下

unittest是python單元測(cè)試框架,類似于JUnit框架

意義:

  • 靈活的組織ui接口測(cè)試自動(dòng)化用例
  • 讓用例高效的執(zhí)行
  • 方便驗(yàn)證測(cè)試用例的結(jié)果
  • 集成html形式測(cè)試報(bào)告
  1. 一個(gè)class繼承unittest.TestCase類,即是一個(gè)個(gè)具體的TestCase(類方法名稱必須以test開頭,否則不能被unittest識(shí)別)
  2. 每一個(gè)用例執(zhí)行的結(jié)果的標(biāo)識(shí),成功是. ,失敗為F,出錯(cuò)是E
  3. 每一個(gè)測(cè)試以test01、test02…依次寫下去,unittest才可按照編號(hào)執(zhí)行
  4. versity參數(shù)控制輸出結(jié)果,0是簡(jiǎn)單報(bào)告、1是一般報(bào)告、2是詳情報(bào)告。
  5. 用setUp()、terUpClass()以及tearDownClass()可以在用例執(zhí)行前布置環(huán)境,以及在用例執(zhí)行后清理環(huán)境。
  6. 參數(shù)中加stream,可以講報(bào)告輸出到文件:可以用HTMLTestRunner輸出html報(bào)告。
  7. 多個(gè)單元的測(cè)試用例集合在一起,就是TestSuite。

案例1

from selenium import webdriver
import requests

def test01():
    '''
    用例1
    :return:
    '''
    url = "http://www.ynhousedata.cn/house/assessment/assess_public?token=9a5008072cfd7336350306fdd9ea9485&timestamp=2022-04-22 09:20:33&layer=1&total_layer=8&total_area=120&pre_id=4450"
    re = requests.get(url)
    print(re.status_code, re.text, re.headers, re.encoding)

def test02():
    '''
    用例1
    :return:
    '''
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    search = input('輸入搜索內(nèi)容\n')
    driver.find_element_by_xpath('//*[@id="kw"]').send_keys(search)
    driver.find_element_by_xpath('//*[@id="su"]').click()

test01()
test02()

以上測(cè)試,一旦test01出錯(cuò),后邊的代碼無法執(zhí)行,而且測(cè)試報(bào)告,不便于查閱。

import unittest

class TestCases(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例的前置')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例的后置')

    def setUp(self) -> None:
        print('每個(gè)用例前置')

    def tearDown(self) -> None:
        print('每個(gè)用例的后置')

    def test01(self):
        print('執(zhí)行用例1')

    def test02(self):
        print('執(zhí)行用例2')

if __name__ == '__main__':
    unittest.main()

運(yùn)行結(jié)果

Ran 2 tests in 0.001s

OK
所有用例的前置
每個(gè)用例前置
執(zhí)行用例1
每個(gè)用例的后置
每個(gè)用例前置
執(zhí)行用例2
每個(gè)用例的后置
所有用例的后置

Process finished with exit code 0

若某個(gè)類下用例非常多,但又只想執(zhí)行某一個(gè),可以用以下方法

if __name__ == '__main__':
    # 創(chuàng)建套件對(duì)象
    suit = unittest.TestSuite()
    # 添加指定用例
    suit.addTest(TestCases("test02"))

    run = unittest.TextTestRunner()
    run.run(suit)

運(yùn)行結(jié)果

所有用例的前置
每個(gè)用例前置
執(zhí)行用例2
每個(gè)用例的后置
.所有用例的后置

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
<unittest.runner.TextTestResult run=1 errors=0 failures=0>

若某個(gè)類下用例非常多,以下運(yùn)行方式可以執(zhí)行多個(gè)用例

if __name__ == '__main__':
    # 創(chuàng)建套件對(duì)象
    suit = unittest.TestSuite()
    # 添加指定用例,多條
    suit.addTests([TestCases("test01"), TestCases("test02")]) 
    run = unittest.TextTestRunner()
    run.run(suit)

運(yùn)行結(jié)果

所有用例的前置
每個(gè)用例前置
執(zhí)行用例1
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例2
每個(gè)用例的后置
.所有用例的后置

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
<unittest.runner.TextTestResult run=2 errors=0 failures=0>

當(dāng)一個(gè)py文件下有多個(gè)類,需要執(zhí)行某個(gè)類的時(shí)候,可以用以下方法執(zhí)行

if __name__ == '__main__':
    # 創(chuàng)建套件對(duì)象
    suit = unittest.TestSuite()
    # 加載類
    load = unittest.TestLoader()
    suit.addTest(load.loadTestsFromTestCase(TestCases)) #TestCases為
    run = unittest.TextTestRunner()
    run.run(suit)

運(yùn)行結(jié)果

所有用例的前置
每個(gè)用例前置
執(zhí)行用例1
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例2
每個(gè)用例的后置
.所有用例的后置

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
<unittest.runner.TextTestResult run=2 errors=0 failures=0>

當(dāng)有多個(gè)測(cè)試類的時(shí)候,可以用以下方法執(zhí)行

from selenium import webdriver
import requests
import unittest

class TestCases1(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例的前置')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例的后置')

    def setUp(self) -> None:
        print('每個(gè)用例前置')

    def tearDown(self) -> None:
        print('每個(gè)用例的后置')

    def test01(self):
        print('執(zhí)行用例1')

    def test02(self):
        print('執(zhí)行用例2')

class TestCases2(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例的前置')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例的后置')

    def setUp(self) -> None:
        print('每個(gè)用例前置')

    def tearDown(self) -> None:
        print('每個(gè)用例的后置')

    def test04(self):
        print('執(zhí)行用例4')

    def test03(self):
        print('執(zhí)行用例3')

if __name__ == '__main__':
    # 創(chuàng)建類加載對(duì)象
    load = unittest.TestLoader()
    # 分別加載兩個(gè)類
    suit1 = load.loadTestsFromTestCase(TestCases1)
    suit2 = load.loadTestsFromTestCase(TestCases2)
    # 放在套件里
    suits = unittest.TestSuite([suit1, suit2])

    run = unittest.TextTestRunner()
    run.run(suits)

運(yùn)行結(jié)果

所有用例的前置
每個(gè)用例前置
執(zhí)行用例1
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例2
每個(gè)用例的后置
.所有用例的后置
所有用例的前置
每個(gè)用例前置
執(zhí)行用例3
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例4
每個(gè)用例的后置
.所有用例的后置

----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK
<unittest.runner.TextTestResult run=4 errors=0 failures=0>

當(dāng)需要執(zhí)行多個(gè)py文件下的類的用例的時(shí)候可以用以下方法

文件結(jié)構(gòu)

?  unitTest pwd 
/Users/lidong/Desktop/zhouyu/BILIBILI/筆記/unitTest,假設(shè)main.py執(zhí)行testCase文件夾下的test*.py里的類
?  unitTest tree
.
├── unitTest.md
├── __init__.py
├── main.py
└── testCase
    ├── test01.py
    └── test02.py

1 directory, 5 files

test01.py

import unittest

class TestCases1(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例的前置')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例的后置')

    def setUp(self) -> None:
        print('每個(gè)用例前置')

    def tearDown(self) -> None:
        print('每個(gè)用例的后置')

    def test01(self):
        print('執(zhí)行用例1')

    def test02(self):
        print('執(zhí)行用例2')

test02.py

import unittest

class TestCases2(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例的前置')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例的后置')

    def setUp(self) -> None:
        print('每個(gè)用例前置')

    def tearDown(self) -> None:
        print('每個(gè)用例的后置')

    def test04(self):
        print('執(zhí)行用例4')

    def test03(self):
        print('執(zhí)行用例3')

main.py

# -*- coding: utf-8 -*-
# @File : main.py
# @Author : 李東
# @Time : 2022/04/25 10:42:20

import unittest

test_dir = "/Users/lidong/Desktop/zhouyu/BILIBILI/筆記/unitTest"

report_path = 
dis = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")

# 創(chuàng)建套件
suit = unittest.TestSuite()
# 添加套件用例
suit.addTest(dis)

run = unittest.TextTestRunner()
run.run(suit)

運(yùn)行如下:

所有用例的前置
每個(gè)用例前置
執(zhí)行用例1
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例2
每個(gè)用例的后置
.所有用例的后置
所有用例的前置
每個(gè)用例前置
執(zhí)行用例3
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例4
每個(gè)用例的后置
.所有用例的后置

----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK
<unittest.runner.TextTestResult run=4 errors=0 failures=0>

2、生成測(cè)試報(bào)告

進(jìn)入網(wǎng)站,下載HTMLTestRunner文件

下載HTMLTestRunner鏈接

下載HTMLTestRunner鏈接

下載后修改文件,建議全部修改,如果報(bào)錯(cuò),將不需要修改的地方還原即可。

 94行,import StringI0 ||| import io
 118行,self.fp.write(s) ||| self.fp.write(bytes(s,'UTF-8'))
 539行,self.outputBuffer = StringI0.StringI0() ||| self.outputBuffer = io.BytesI0()
 631行,print >>sys .stderr, '\nTime ELapsed: %s' % (self.stopTime-seLf.startTime) ||| print('\nTime Elapsed: %s' % (self.stopTime-self.startTime))
 642行,if not rmap.has_key(cls): ||| if not cls in rmap:
 766行,uo = o.decode('latin-1') ||| uo = o
 768行,uo = o ||| Uo = o.decode('utf-8')
 772行,ue = e.decode('latin-1') ||| ue=e
 774行,ue = e ||| ue = e.decode('utf-8')

修改完成之后,將文件放入到python環(huán)境的lib目錄下(windows)。mac 用戶可以放在****/lib/python3.9/site-packages目錄下。

創(chuàng)建報(bào)告存放的文件夾report,報(bào)告目錄結(jié)構(gòu)如下

main.py定義如下

import unittest
import HTMLTestRunner
test_dir = "/Users/lidong/Desktop/zhouyu/BILIBILI/筆記/unitTest/testCase"
# 報(bào)告存放的位置
report_path = "/Users/lidong/Desktop/zhouyu/BILIBILI/筆記/unitTest/report/"
# 打開目錄,生成html文件
file = open(report_path+'result.html', 'wb')
# 文件格式生成
run = HTMLTestRunner.HTMLTestRunner(stream=file, title='這是報(bào)告標(biāo)題', description='這是報(bào)告描述')
# 加載用
dis = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")
# 運(yùn)行用例
run.run(dis)

6、運(yùn)行main.py之后,會(huì)在report目錄下生成html報(bào)告

7、 使用瀏覽器打開,可以看到如下報(bào)告

斷言基本操作

import unittest
import requests

class Tess(unittest.TestCase):
    def setUp(self):
        res = requests.get('http://www.baidi.com')
        return res.status_code

    def test1(self):
        # 判斷獲取的狀態(tài)是否等于200
        self.assertEqual(self.setUp(), 200)


if __name__ == '__main__':
    unittest.main()

數(shù)據(jù)驅(qū)動(dòng) ddt data

import unittest
from ddt import ddt, data

@ddt
class TestCases2(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例的前置')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例的后置')

    def setUp(self) -> None:
        print('每個(gè)用例前置')

    def tearDown(self) -> None:
        print('每個(gè)用例的后置')

    @data('username01', 'username02')
    def test04(self, username):
        """冒煙用例"""
        print('執(zhí)行用例4,',username,'登陸成功')

    def test03(self):
        """爆炸用例"""
        print('執(zhí)行用例3')

if __name__ == '__main__':
    # 創(chuàng)建類加載對(duì)象
    load = unittest.TestLoader()
    # 分別加載兩個(gè)類
    suit2 = load.loadTestsFromTestCase(TestCases2)
    # 放在套件里
    suits = unittest.TestSuite([suit2])

    run = unittest.TextTestRunner()
    run.run(suits)

運(yùn)行結(jié)果

所有用例的前置
每個(gè)用例前置
執(zhí)行用例3
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例4, username01 登陸成功
每個(gè)用例的后置
.每個(gè)用例前置
執(zhí)行用例4, username02 登陸成功
每個(gè)用例的后置
.所有用例的后置

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK
<unittest.runner.TextTestResult run=3 errors=0 failures=0>

鞏固

# -*- coding: utf-8 -*-,
# @File : test_module.py,
# @Author : lidong,
# @IDEA: PyCharm
# @Time :  2022/4/25 16:57

import unittest

class TestStringMethods(unittest.TestCase):

    a = 67

    # 跳過被此裝飾器裝飾的測(cè)試。 reason 為測(cè)試被跳過的原因。
    @unittest.skip('取消測(cè)試')
    def test_upper(self):
        print('test_upper')

   # 當(dāng)condition為真時(shí),跳過被裝飾的測(cè)試。
    @unittest.skipIf(a>5, '取消測(cè)試')
    def test_upper2(self):
        print('test_upper2')

    #  跳過被裝飾的測(cè)試,condition 為假
    @unittest.skipUnless(a > 88, '跳過被裝飾的測(cè)試')
    def test_upper3(self):
        print('test_upper3')

    def test_upper5(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()

運(yùn)行

===============================================================================
[SKIPPED]
取消測(cè)試

unitTest.testCase.test_module.TestStringMethods.test_upper
unitTest.testCase.test_module.TestStringMethods.test_upper2
===============================================================================
[SKIPPED]
跳過被裝飾的測(cè)試

unitTest.testCase.test_module.TestStringMethods.test_upper3
-------------------------------------------------------------------------------
Ran 6 tests in 0.093s

PASSED (skips=3, successes=3)

Process finished with exit code 0

Skipped: 取消測(cè)試

Skipped: 取消測(cè)試

Skipped: 跳過被裝飾的測(cè)試

總結(jié)

到此這篇關(guān)于python單元測(cè)試框架unittest基本用法的文章就介紹到這了,更多相關(guān)python unittest用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python第三方庫xlrd/xlwt的安裝與讀寫Excel表格

    Python第三方庫xlrd/xlwt的安裝與讀寫Excel表格

    最近開始學(xué)習(xí)python,想做做簡(jiǎn)單的自動(dòng)化測(cè)試,需要讀寫excel,于是就接觸到了Python的第三方庫xlrd和xlwt,下面這篇文章就給大家主要介紹了Python中第三方庫xlrd/xlwt的安裝與讀寫Excel表格的方法,需要的朋友可以參考借鑒。
    2017-01-01
  • Python操作SQLite簡(jiǎn)明教程

    Python操作SQLite簡(jiǎn)明教程

    這篇文章主要介紹了Python操作SQLite簡(jiǎn)明教程,簡(jiǎn)單明了的入門教程,包含連接、建表、增刪修查等例子,需要的朋友可以參考下
    2014-07-07
  • Python3中.whl文件創(chuàng)建及使用

    Python3中.whl文件創(chuàng)建及使用

    本文主要介紹了Python3中.whl文件創(chuàng)建及使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • python讀取Excel表格文件的方法

    python讀取Excel表格文件的方法

    這篇文章主要介紹了python讀取Excel表格文件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python psutil監(jiān)控進(jìn)程實(shí)例

    python psutil監(jiān)控進(jìn)程實(shí)例

    今天小編就為大家分享一篇python psutil監(jiān)控進(jìn)程實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python爬蟲scrapy框架之增量式爬蟲的示例代碼

    python爬蟲scrapy框架之增量式爬蟲的示例代碼

    這篇文章主要介紹了python爬蟲scrapy框架之增量式爬蟲的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • opencv模板匹配相同位置去除重復(fù)的框

    opencv模板匹配相同位置去除重復(fù)的框

    這篇文章主要介紹了opencv模板匹配相同位置去除重復(fù)的框,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python開發(fā)之Docker入門安裝部署教程

    python開發(fā)之Docker入門安裝部署教程

    這篇文章是一篇入門篇,主要給大家介紹了關(guān)于python開發(fā)中的Docker安裝部署,圖文方式展示了安裝的過程步驟,有需要的朋友可以參考下
    2021-09-09
  • python單例模式獲取IP代理的方法詳解

    python單例模式獲取IP代理的方法詳解

    在使用python對(duì)網(wǎng)頁進(jìn)程訪問時(shí),以防被禁止,可用使用代理IP的方法減少被禁的可能,下面這篇文章主要給大家介紹了關(guān)于python單例模式獲取IP代理的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-09-09
  • pandas如何刪除沒有列名的列淺析

    pandas如何刪除沒有列名的列淺析

    這篇文章主要給大家介紹了關(guān)于pandas如何刪除沒有列名的列的相關(guān)資料,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

乌拉特中旗| 肥西县| 柞水县| 谷城县| 北碚区| 贺州市| 农安县| 荔波县| 固安县| 平度市| 彰化县| 嘉荫县| 泽州县| 麻栗坡县| 岳西县| 景德镇市| 丰都县| 壤塘县| 长宁县| 屯昌县| 九龙坡区| 正宁县| 乌恰县| 永靖县| 安乡县| 宜城市| 乌拉特中旗| 桦南县| 衡阳市| 宁都县| 牟定县| 方正县| 永清县| 池州市| 嘉禾县| 花莲县| 大安市| 日照市| 健康| 洞头县| 盈江县|