精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python中的兩個(gè)測(cè)試工具

開發(fā) 后端 測(cè)試
本文介紹了兩個(gè)Python中的測(cè)試工具:doctest和unittest,并配以簡(jiǎn)單的例子來說明這兩個(gè)測(cè)試模塊的使用方法,希望能對(duì)讀者有所幫助。

 [[275103]]

當(dāng)我們?cè)趯懗绦虻臅r(shí)候,我們需要通過測(cè)試來驗(yàn)證程序是否出錯(cuò)或者存在問題,但是,編寫大量的測(cè)試來確保程序的每個(gè)細(xì)節(jié)都沒問題會(huì)顯得很繁瑣。在Python中,我們可以借助一些標(biāo)準(zhǔn)模塊來幫助我們自動(dòng)完成測(cè)試過程,比如:

  •  unittest: 一個(gè)通用的測(cè)試框架;
  •  doctest: 一個(gè)更簡(jiǎn)單的模塊,是為檢查文檔而設(shè)計(jì)的,但也非常適合用來編寫單元測(cè)試。

下面,筆者將會(huì)簡(jiǎn)單介紹這兩個(gè)模塊在測(cè)試中的應(yīng)用。

doctest

doctest模塊會(huì)搜索那些看起來像是python交互式會(huì)話中的代碼片段,然后嘗試執(zhí)行并驗(yàn)證結(jié)果。下面我們以doctest.testmod為例,函數(shù)doctest.testmod會(huì)讀取模塊中的所有文檔字符串,查找看起來像是從交互式解釋器中摘取的示例,再檢查這些示例是否反映了實(shí)際情況。

我們先創(chuàng)建示例代碼文件test_string_lower.py,完整代碼如下: 

  1. # -*- coding: utf-8 -*-  
  2. def string_lower(string):  
  3.     '''  
  4.     返回一個(gè)字符串的小寫  
  5.     :param string: type: str  
  6.     :return: the lower of input string  
  7.     >>> string_lower('AbC')  
  8.     'abc'  
  9.     >>> string_lower('ABC')  
  10.     'abc'  
  11.     >>> string_lower('abc')  
  12.     'abc'  
  13.     '''  
  14.     return string.lower()  
  15. if __name__ == '__main__':  
  16.     import doctest, test_string_lower  
  17.     doctest.testmod(test_string_lower) 

首先先對(duì)程序進(jìn)行說明,函數(shù)string_lower用于返回輸入字符串的小寫,函數(shù)中的注釋中,一共包含了3個(gè)測(cè)試實(shí)例,期望盡可能地包含各種測(cè)試情況,接著在主函數(shù)中導(dǎo)入doctest, test_string_lower,再運(yùn)行doctest中的testmod函數(shù)即可進(jìn)行測(cè)試。

接著,我們開始測(cè)試。首先,在命令行中輸入python test_string_lower.py,運(yùn)行后會(huì)發(fā)現(xiàn)什么都沒有輸出,但這其實(shí)是件好事,它表明程序中的所有測(cè)試都通過了!那么,如果我們想要獲得更多的輸出呢?可在運(yùn)行腳本的時(shí)候增加參數(shù)-v,這時(shí)候命令變成python test_string_lower.py -v,輸出的結(jié)果如下: 

  1. Trying:  
  2.     string_lower('AbC')  
  3. Expecting:  
  4.     'abc'  
  5. ok  
  6. Trying:  
  7.     string_lower('ABC')  
  8. Expecting:  
  9.     'abc'  
  10. ok  
  11. Trying:  
  12.     string_lower('abc')  
  13. Expecting:  
  14.     'abc'  
  15. ok  
  16. 1 items had no tests:  
  17.     test_string_lower  
  18. 1 items passed all tests:  
  19.    3 tests in test_string_lower.string_lower  
  20. 3 tests in 2 items.  
  21. 3 passed and 0 failed.  
  22. Test passed. 

可以看到,程序測(cè)試的背后還是發(fā)生了很多事。接著,我們嘗試著程序出錯(cuò)的情況,比如我們不小心把函數(shù)的返回寫成了: 

  1. return string.upper() 

這其實(shí)是返回輸入字符串的大寫了,而我們測(cè)試的實(shí)例卻返回了輸入字符串的小寫,再運(yùn)行該腳本(加上參數(shù)-v),輸出的結(jié)果如下: 

  1. Failed example:  
  2.     string_lower('abc')  
  3. Expected:  
  4.     'abc'  
  5. Got:  
  6.     'ABC'  
  7. 1 items had no tests:  
  8.     test_string_lower  
  9. **********************************************************************  
  10. 1 items had failures:  
  11.    3 of   3 in test_string_lower.string_lower  
  12. 3 tests in 2 items.  
  13. 0 passed and 3 failed.  
  14. ***Test Failed*** 3 failures. 

這時(shí)候,程序測(cè)試失敗,它不僅捕捉到了bug,還清楚地指出錯(cuò)誤出在什么地方。我們不難把這個(gè)程序修改過來。

關(guān)于doctest模塊的更詳細(xì)的使用說明,可以參考網(wǎng)址:https://docs.python.org/2/library/doctest.html 。

unittest

unittest類似于流行的Java測(cè)試框架JUnit,它比doctest更靈活,更強(qiáng)大,能夠幫助你以結(jié)構(gòu)化的方式來編寫龐大而詳盡的測(cè)試集。

我們以一個(gè)簡(jiǎn)單的示例入手,首先我們編寫my_math.py腳本,代碼如下: 

  1. # -*- coding: utf-8 -*-  
  2. def product(x, y):  
  3.     '''  
  4.     :param x: int, float  
  5.     :param y: int, float  
  6.     :return:  x * y  
  7.     '''  
  8.     return x * y 

該函數(shù)實(shí)現(xiàn)的功能為:輸入兩個(gè)數(shù)x, y, 返回這兩個(gè)數(shù)的乘積。接著是test_my_math.py腳本,完整的代碼如下: 

  1. import unittest, my_math  
  2. class ProductTestcase(unittest.TestCase):  
  3.     def setUp(self):  
  4.         print('begin test')  
  5.     def test_integers(self):  
  6.         for x in range(-10, 10):  
  7.             for y in range(-10, 10):  
  8.                 p = my_math.product(x, y)  
  9.                 self.assertEqual(p, x*y, 'integer multiplication failed')  
  10.     def test_floats(self):  
  11.         for x in range(-10, 10):  
  12.             for y in range(-10, 10):  
  13.                 xx = x/10  
  14.                 yy = y/10  
  15.                 p = my_math.product(x, y)  
  16.                 self.assertEqual(p, x * y, 'integer multiplication failed')  
  17. if __name__ == '__main__':  
  18.     unittest.main() 

函數(shù)unittest.main負(fù)責(zé)替你運(yùn)行測(cè)試:在測(cè)試方法前執(zhí)行setUp方法,示例化所有的TestCase子類,并運(yùn)行所有名稱以test打頭的方法。assertEqual方法檢車指定的條件(這里是相等),以判斷指定的測(cè)試是成功了還是失敗了。

接著,我們運(yùn)行前面的測(cè)試,輸出的結(jié)果如下: 

  1. begin test  
  2. .begin test  
  3.  
  4. ----------------------------------------------------------------------  
  5. Ran 2 tests in 0.001s  
  6. OK 

可以看到,該程序運(yùn)行了兩個(gè)測(cè)試,每個(gè)測(cè)試前都會(huì)輸出'begin test',.表示測(cè)試成功,若測(cè)試失敗,則返回的是F。

接著模擬測(cè)試出錯(cuò)的情形,將my_math函數(shù)中的product方法改成返回: 

  1. return x + y 

再運(yùn)行測(cè)試腳本,輸出的結(jié)果如下: 

  1. begin test  
  2. Fbegin test  
  3. F 
  4.  ======================================================================  
  5. FAIL: test_floats (__main__.ProductTestcase)  
  6. ----------------------------------------------------------------------  
  7. Traceback (most recent call last):  
  8.   File "test_my_math.py", line 20, in test_floats  
  9.     self.assertEqual(p, x * y, 'integer multiplication failed')  
  10. AssertionError: -2.0 != 1.0 : integer multiplication failed  
  11. ======================================================================  
  12. FAIL: test_integers (__main__.ProductTestcase)  
  13. ----------------------------------------------------------------------  
  14. Traceback (most recent call last):  
  15.   File "test_my_math.py", line 12, in test_integers  
  16.     self.assertEqual(p, x*y, 'integer multiplication failed')  
  17. AssertionError: -20 != 100 : integer multiplication failed  
  18. ----------------------------------------------------------------------  
  19. Ran 2 tests in 0.001s  
  20. FAILED (failures=2

兩條測(cè)試都未通過,返回的是F,并幫助你指出了錯(cuò)誤的地方,接下來,你應(yīng)該能快速地修復(fù)這個(gè)bug。

關(guān)于unittest模塊的更加詳細(xì)的說明,可以參考網(wǎng)址:https://docs.python.org/3/library/unittest.html 。

總結(jié)

本文介紹了兩個(gè)Python中的測(cè)試工具:doctest和unittest,并配以簡(jiǎn)單的例子來說明這兩個(gè)測(cè)試模塊的使用方法,希望能對(duì)讀者有所幫助~ 

 

責(zé)任編輯:龐桂玉 來源: Python中文社區(qū)
相關(guān)推薦

2009-09-17 10:11:50

Linux文件Linux系統(tǒng)性能測(cè)試

2024-05-24 09:57:34

2018-11-19 15:08:21

Python測(cè)試工具pytest插件

2019-08-20 08:00:00

JavaScript測(cè)試工具前端

2013-11-13 10:49:50

2017-09-26 08:51:25

2018-01-16 11:20:08

2009-06-26 10:22:58

JSF測(cè)試

2011-05-31 18:09:05

動(dòng)態(tài)測(cè)試

2009-03-31 09:49:40

Rational功能測(cè)試性能測(cè)試

2020-04-17 10:13:51

Python開發(fā)工具

2013-08-13 09:43:59

響應(yīng)式免費(fèi)測(cè)試工具響應(yīng)式設(shè)計(jì)

2019-03-15 09:17:22

Web測(cè)試工具

2013-07-26 09:51:12

網(wǎng)站性能網(wǎng)站測(cè)試性能測(cè)試

2012-06-25 14:30:48

Web

2022-11-28 11:31:37

2011-10-09 11:00:17

2023-10-10 18:20:22

開源API

2022-01-24 16:55:09

LinuxTCP工具

2017-12-22 05:18:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

99精品免费在线观看| 99国精产品一二二线| 亚洲av无码一区二区三区人| julia一区二区三区中文字幕| 中文字幕精品综合| 成人动漫视频在线观看完整版| 日韩欧美亚洲视频| 欧美肥老太太性生活| 精品国产露脸精彩对白| 黄色片在线免费| 成人免费看片| 91亚洲精品一区二区乱码| 国产精品久久久久av免费| 国产av无码专区亚洲av毛网站| 乱亲女h秽乱长久久久| 欧美视频中文字幕| 久久久久久人妻一区二区三区| 国产女人在线观看| 高清视频一区二区| 国产精品免费福利| 日韩福利片在线观看| se在线电影| 国产91丝袜在线18| 国产精品欧美日韩久久| 成年人免费看毛片| 欧美69wwwcom| www日韩欧美| aaaaaav| 欧美高清hd| 欧美视频一区二区| 欧美日本视频在线观看| 永久免费网站在线| 国产精品久久免费看| 91a在线视频| 欧洲熟妇的性久久久久久| 欧美国产日韩电影| 国产欧美久久久精品影院| 国产伦理一区二区三区| 夜夜嗨av禁果av粉嫩avhd| 精品少妇av| 亚洲黄色www| www.欧美com| 国产一精品一av一免费爽爽| 精品视频999| 粉嫩虎白女毛片人体| www.51av欧美视频| 亚洲午夜精品一区二区三区他趣| 天天爱天天做天天操| 午夜精品一区| 国产精品人成在线观看免费| 茄子视频成人在线观看| 免费观看日批视频| 性8sex亚洲区入口| 97视频在线观看亚洲| 欧美精品videos极品| 伊人情人综合网| 操人视频在线观看欧美| 成人免费精品动漫网站| 999国产精品| 久久精品国亚洲| 黄色片子在线观看| 午夜久久免费观看| 久久久精品美女| 日韩在线不卡av| 久久久精品久久久久久96| 日韩视频免费大全中文字幕| 欧美激情精品久久久久久免费| 午夜精品毛片| 欧美激情视频播放| 国产精品suv一区二区三区| 亚洲少妇一区| 国产成人在线一区二区| 亚洲图片小说视频| 国产在线播精品第三| 97国产精品久久| 懂色av.com| 久热国产精品| 91精品国产综合久久男男 | 在线免费观看av网址| 久久激情久久| 国产欧美一区二区三区久久| 国产美女三级无套内谢| 国产成人a级片| 久久爱av电影| 999国产在线视频| 亚洲欧美激情视频在线观看一区二区三区 | 国产乱码一区二区| 成人h版在线观看| 欧洲精品在线一区| 黄色网页在线观看| 午夜免费久久看| 精品少妇无遮挡毛片| 国产95亚洲| 日韩成人激情在线| 91插插插影院| 欧美韩国亚洲| 欧美精品一级二级三级| 人妻av一区二区| 激情五月色综合国产精品| 久久精品美女视频网站| 国产精品久久久免费视频| 免费成人你懂的| 国产伦精品一区二区三区| jizz亚洲| 婷婷亚洲久悠悠色悠在线播放| 免费看污污网站| 国产成人福利av| 亚洲欧洲国产伦综合| 91日韩中文字幕| 久久字幕精品一区| 国产一区在线观| 免费在线观看av片| 欧美性xxxxxxxxx| aaaaaaaa毛片| 欧美特黄一级大片| 69av在线播放| 亚洲国产一二三区| 国产精品国产成人国产三级 | 欧美成人性福生活免费看| 黄色aaa视频| 欧美日韩理论| 国产在线精品自拍| 国产在线你懂得| 亚洲h在线观看| 手机看片国产精品| 欧美岛国激情| 国产精品一区电影| 男人的天堂av高清在线| 午夜电影一区二区三区| 少妇性l交大片7724com| 999精品一区| 国产精品网站视频| 国产三区四区在线观看| 午夜a成v人精品| 在线精品视频播放| 午夜日韩福利| 91gao视频| 麻豆传媒视频在线观看| 欧美人妖巨大在线| 国产传媒视频在线 | 亚洲综合20p| 99精品视频精品精品视频| 国产91网红主播在线观看| 特黄aaaaaaaaa真人毛片| 成人国产精品免费观看视频| 男人草女人视频| 国产999精品在线观看| 久久香蕉国产线看观看av| 中国女人一级一次看片| 中文字幕不卡在线| 成年网站在线播放| 日韩精品午夜| 欧美日韩第一页| 国产高清在线观看视频| 亚洲男女毛片无遮挡| 尤物网站在线看| 一区二区三区网站| 91高跟黑色丝袜呻吟在线观看| 黄色网址视频在线观看| 日韩欧美一区在线| 国产真人真事毛片| 成人动漫一区二区在线| 日本日本19xxxⅹhd乱影响| 欧美人成在线观看ccc36| 欧美一区二区色| www免费网站在线观看| 欧美私模裸体表演在线观看| 91高清免费看| aa级大片欧美| 国产三级日本三级在线播放| 日韩国产欧美| 999热视频| 手机av在线| 亚洲偷熟乱区亚洲香蕉av| 亚洲精品国产欧美在线观看| 国产精品不卡一区二区三区| 久久人人爽人人片| 在线亚洲一区| 天堂√在线观看一区二区| **欧美日韩在线| 欧美极品xxxx| 伦理片一区二区三区| 欧美日韩免费在线视频| 欧美激情一区二区视频| 久久这里只有精品6| 在线观看亚洲色图| 欧美自拍视频| 国产精品九九久久久久久久| 国产福利视频在线观看| 亚洲国产成人爱av在线播放| 艳妇乳肉豪妇荡乳av无码福利| 亚洲精品国产a| 国产又爽又黄无码无遮挡在线观看| 免费的成人av| 久久久久久久久久久99| 日韩理论在线| 国内视频一区二区| 欧美风情在线视频| 97精品在线视频| 日本中文字幕在线2020| 亚洲国产欧美在线成人app| 中文字幕av第一页| 亚洲一二三级电影| 国产欧美小视频| 99久久免费精品高清特色大片| 99视频在线视频| 夜夜精品视频| 亚洲精品天堂成人片av在线播放| 蜜臀av免费一区二区三区| 97久久人人超碰caoprom欧美| 五月激情久久| 性色av一区二区三区在线观看 | 在线一级成人| 91久久伊人青青碰碰婷婷| 日韩毛片一区| 5566成人精品视频免费| 欧美人与牲禽动交com | 日韩av在线一区二区三区| av不卡一区二区| 成人欧美一区二区三区在线湿哒哒| 操人在线观看| 欧美激情极品视频| 麻豆传媒在线免费| 日韩视频在线一区| 国产在线自天天| 精品中文视频在线| 人妻夜夜爽天天爽| 性感美女久久精品| 希岛爱理中文字幕| 中文字幕在线观看一区| 男人操女人动态图| 97精品国产露脸对白| 69亚洲乱人伦| 国产福利一区二区三区视频在线| 超碰超碰在线观看| 日韩主播视频在线| 日韩视频在线免费看| 久久xxxx精品视频| 国产最新免费视频| 99伊人成综合| 女性女同性aⅴ免费观女性恋| 国内精品福利| 国产精品久久久久9999爆乳| 欧美韩日精品| 日韩视频 中文字幕| 午夜精品婷婷| 欧美国产视频一区| 亚洲理论电影片| 久久天堂国产精品| 亚洲人成网www| 日韩.欧美.亚洲| 精品一区二区三区的国产在线观看| 久久人人九九| 欧美理论视频| 亚洲一区三区电影在线观看| 日韩中文欧美| 中文字幕av久久| 国产精品99免费看| 久草热视频在线观看| 免费精品视频| 久久婷婷国产91天堂综合精品| 日韩激情视频在线观看| 手机看片一级片| 国产一区二区三区精品视频| 苍井空张开腿实干12次| 成人午夜电影小说| 亚洲国产欧美视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美精品在线视频| 国产三级小视频| 精品久久久久久久人人人人传媒| 日韩一级中文字幕| 亚洲欧美日韩一区二区在线| 中文日本在线观看| 欧美成人一区在线| 久草在线资源站手机版| 国产精品福利网站| 国产精品亚洲一区二区在线观看| 春色成人在线视频| 九九久久精品| 好色先生视频污| 国产视频一区欧美| 超碰在线人人爱| 成人午夜视频网站| 欧美成人短视频| 亚洲一区二区高清| 天堂网一区二区| 91精品福利在线一区二区三区| 日韩网红少妇无码视频香港| 色噜噜狠狠成人中文综合| 国产在成人精品线拍偷自揄拍| 精品国内二区三区| 国产人成在线视频| 久久久久久久一| 91国拍精品国产粉嫩亚洲一区| 99re资源| 日韩成人精品一区| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 丁香五月网久久综合| av在线不卡顿| 国产二区视频在线| 久久99国内精品| 欧美伦理片在线观看| 成人精品国产一区二区4080| 一级黄色毛毛片| 欧美日韩国产麻豆| 99国产精品一区二区三区| 亚洲欧美一区二区精品久久久 | 欧美在线欧美在线| 欧美影院精品| 亚洲黄色一区二区三区| 99在线精品免费视频九九视 | 真人抽搐一进一出视频| 蜜臀国产一区二区三区在线播放 | 偷拍亚洲色图| 神马午夜伦理影院| 蜜臀91精品一区二区三区| 精品无码国产一区二区三区51安| 亚洲天堂成人在线观看| 手机在线看片1024| 亚洲电影第1页| 性直播体位视频在线观看| 国产综合在线观看视频| 狠狠色狠狠色综合婷婷tag| 国产视频九色蝌蚪| 国产91对白在线观看九色| 手机av在线看| 欧美色综合久久| 粉嫩av一区| 日韩av免费在线| 色天下一区二区三区| 国产九色porny| 岛国一区二区三区| 欧美被狂躁喷白浆精品| 欧美一区二区三区视频在线| 日本免费在线视频| 国产日韩欧美在线看| 不卡在线一区二区| 免费黄色一级网站| 国产欧美一区二区精品性色| 夜夜爽妓女8888视频免费观看| 亚洲欧美日韩区| 99re66热这里只有精品4| 欧美日韩另类丝袜其他| 久久成人在线| www在线观看免费视频| 色天天综合色天天久久| 牛牛影视精品影视| 国产不卡av在线免费观看| 国产精品一国产精品| 久久久久国产精品熟女影院| 久久久久国产精品麻豆ai换脸 | 日本天堂在线视频| 精品国产乱码久久久久久图片| 亚洲羞羞网站| 国产精品一区二区不卡视频| 亚洲国产专区校园欧美| 成人在线看视频| 久久亚洲一区二区三区明星换脸| 青青青国产在线| 亚洲视频免费一区| 福利一区在线| 最新黄色av网站| 成人一区二区三区在线观看| 自拍偷拍欧美亚洲| 亚洲另类激情图| 国产成人午夜性a一级毛片| 亚洲一区二区三区免费观看| 国产一级精品在线| 国产真人真事毛片| 亚洲天堂av在线播放| 欧美一级在线| 欧美人成在线观看| 91啪亚洲精品| 亚洲天堂男人网| 欧美区在线播放| 在线日韩一区| 亚洲精品在线网址| 天天操天天干天天综合网| 免费一级在线观看播放网址| 成人免费看吃奶视频网站| 一区在线播放| 99在线视频免费| 日韩精品一区二区三区蜜臀| 中文一区一区三区高中清不卡免费| 亚洲va久久久噜噜噜久久狠狠 | 日本无删减在线| 久久资源av| 国产自产高清不卡| 日韩三级一区二区三区| 最近的2019中文字幕免费一页 | 日韩精品视频无播放器在线看 | 亚洲国产日韩精品在线| 亚洲天堂1区| 国产av国片精品| 欧美激情一区二区在线| 亚洲AV无码成人片在线观看| 国产91色在线播放| 影音先锋亚洲电影| 我要看一级黄色录像|