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

Python unittest 簡單實(shí)現(xiàn)參數(shù)化的方法

 更新時(shí)間:2018年11月30日 09:23:05   作者:SummerLaw  
今天小編就為大家分享一篇Python unittest 簡單實(shí)現(xiàn)參數(shù)化的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

Python unittest 理論上是不建議參數(shù)驅(qū)動的,其用例應(yīng)該專注單元測試,確保每個(gè)method的邏輯正確。

引用Stack Overflow的一個(gè)答案,

“單元測試應(yīng)該是獨(dú)立的,沒有依賴項(xiàng)的。這確保了每個(gè)用例都有非常具體而專一的測試反應(yīng)。傳入?yún)?shù)會破壞單元測試的這個(gè)屬性,從而使它們在某種意義上無效。使用測試配置是最簡單的方法,也是更合適的方法,因?yàn)閱卧獪y試不應(yīng)該依賴外部信息來執(zhí)行測試。那應(yīng)該集成測試要做的。”

但是實(shí)際操作過程中,時(shí)不時(shí)還是有控制入?yún)⒌男枨蟮摹1热纾蚁牒唵螌?shí)現(xiàn)一個(gè)web功能的cross-browser測試……

下面列出一些學(xué)習(xí)到的解決方案 (ENV: WIN 10, python36)。

利用類的屬性

這種方法可以不依賴其他第三方庫,而且可以將參數(shù)化應(yīng)用到setUpClass 和setUp方法中。

即可以順利解決一個(gè)web 測試腳本cross-browser的驗(yàn)證的問題。

class TestOdd1(unittest.TestCase):
 NUMBER=1
 def runTest(self):
  """Assert that the item is odd"""
  self.assertTrue( self.NUMBER % 2 == 1, "Number should be odd")
 
class TestOdd2(TestOdd1):
 NUMBER=2
 
if __name__ == '__main__':
 unittest.main()

nose + ddt

用nose和ddt可以簡單的完成參數(shù)控制的test case,實(shí)際應(yīng)用的是python的裝飾器(decorator)。

寫出來有些類似cucumber gherkin當(dāng)中的scenario outline。

在實(shí)驗(yàn)中,這個(gè)方法不適用于setUpClass。

pip install nose
pip install ddt
import unittest
from ddt import ddt, data
 
@ddt
class TestOdd(unittest.TestCase):
 
 @data(3, 4, 12, 23)
 def runTest(self, value):
  self.assertTrue( self.NUMBER % 2 == 1, "Number should be odd")

執(zhí)行 nosetests my_test.py ,4個(gè)test case被執(zhí)行。

這個(gè)方案還支持從外部文件中加載參數(shù)。具體可以參考DDT 官方文檔。

重寫unittest.TestCase的構(gòu)造函數(shù)

出處:Eli Bendersky的博客

定義類ParametrizedTestCase,使之集成unittest.TestCase并重寫其構(gòu)造函數(shù),增加param這個(gè)參數(shù)。

import unittest
 
class ParametrizedTestCase(unittest.TestCase):
 """ TestCase classes that want to be parametrized should
  inherit from this class.
 """
 def __init__(self, methodName='runTest', param=None):
  super(ParametrizedTestCase, self).__init__(methodName)
  self.param = param
 
 @staticmethod
 def parametrize(testcase_klass, param=None):
  """ Create a suite containing all tests taken from the given
   subclass, passing them the parameter 'param'.
  """
  testloader = unittest.TestLoader()
  testnames = testloader.getTestCaseNames(testcase_klass)
  suite = unittest.TestSuite()
  for name in testnames:
   suite.addTest(testcase_klass(name, param=param))
  return suite

下面是一個(gè)包含我們用例的測試腳本,繼承了ParametrizedTestCase,

class TestOne(ParametrizedTestCase):
 def test_something(self):
  print 'param =', self.param
  self.assertEqual(1, 1)
 
 def test_something_else(self):
  self.assertEqual(2, 2)

以參數(shù)驅(qū)動的方式執(zhí)行用例

uite = unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=42))
suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=13))
unittest.TextTestRunner(verbosity=2).run(suite)

將得到如下輸出,

test_something (__main__.TestOne) ... param = 42
ok
test_something_else (__main__.TestOne) ... ok
test_something (__main__.TestOne) ... param = 13
ok
test_something_else (__main__.TestOne) ... ok
 
-----------------------------------------------
Ran 4 tests in 0.000s
 
OK

以上這篇Python unittest 簡單實(shí)現(xiàn)參數(shù)化的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python處理圖像并生成JSONL元數(shù)據(jù)文件

    Python處理圖像并生成JSONL元數(shù)據(jù)文件

    JSONL是一種輕量級的數(shù)據(jù)序列化格式,由一系列獨(dú)立的?JSON?對象組成,本文主要為大家介紹了Python如何處理圖像并生成JSONL元數(shù)據(jù)文件,感興趣的可以了解下
    2025-05-05
  • Python 讀取xml數(shù)據(jù),cv2裁剪圖片實(shí)例

    Python 讀取xml數(shù)據(jù),cv2裁剪圖片實(shí)例

    這篇文章主要介紹了Python 讀取xml數(shù)據(jù),cv2裁剪圖片實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Mac下使用HomeBrew安裝python3

    Mac下使用HomeBrew安裝python3

    這篇文章介紹了Mac下使用HomeBrew安裝python3的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python的Flask開發(fā)框架簡單上手筆記

    Python的Flask開發(fā)框架簡單上手筆記

    這篇文章主要介紹了Python的Flask開發(fā)框架的入門知識整理,Flask是一款極輕的Python web開發(fā)框架,需要的朋友可以參考下
    2015-11-11
  • python for循環(huán)賦值問題

    python for循環(huán)賦值問題

    這篇文章主要介紹了python for循環(huán)賦值問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python淺談一下線程間通信之隊(duì)列

    python淺談一下線程間通信之隊(duì)列

    本篇文章介紹了為什么需要線程間通信,以及通信方式有哪些,最后每種通信方式都舉了一個(gè)例子,最常用的還是共享變量的方式來進(jìn)行線程間通信。感興趣的朋友可以閱讀本文
    2023-04-04
  • python之實(shí)現(xiàn)兩個(gè)或多個(gè)列表相加

    python之實(shí)現(xiàn)兩個(gè)或多個(gè)列表相加

    這篇文章主要介紹了python之實(shí)現(xiàn)兩個(gè)或多個(gè)列表相加方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python學(xué)習(xí)之matplotlib繪制散點(diǎn)圖實(shí)例

    python學(xué)習(xí)之matplotlib繪制散點(diǎn)圖實(shí)例

    這篇文章主要介紹了python學(xué)習(xí)之matplotlib繪制散點(diǎn)圖實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • python OpenCV學(xué)習(xí)筆記之繪制直方圖的方法

    python OpenCV學(xué)習(xí)筆記之繪制直方圖的方法

    本篇文章主要介紹了python OpenCV學(xué)習(xí)筆記之繪制直方圖的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python報(bào)錯(cuò)TypeError: ‘dict‘ object is not iterable的解決方法

    Python報(bào)錯(cuò)TypeError: ‘dict‘ object is not&

    在Python開發(fā)的旅程中,報(bào)錯(cuò)信息就像是一個(gè)個(gè)路障,阻礙著我們前進(jìn)的步伐,而“TypeError: ‘dict’ object is not iterable”這個(gè)報(bào)錯(cuò),常常讓開發(fā)者們陷入困惑,那么,這個(gè)報(bào)錯(cuò)究竟是怎么產(chǎn)生的呢?又該如何有效地解決它呢?讓我們一起深入探討,找到解決問題的方法
    2024-10-10

最新評論

宝丰县| 昆山市| 揭阳市| 城口县| 常山县| 神池县| 类乌齐县| 临猗县| 新邵县| 永善县| 德昌县| 闽清县| 绍兴县| 西藏| 左贡县| 新沂市| 绵竹市| 巴楚县| 台东县| 科尔| 监利县| 社会| 邛崃市| 萨迦县| 防城港市| 泰来县| 武强县| 涪陵区| 太保市| 榆树市| 宝坻区| 保亭| 固镇县| 唐海县| 菏泽市| 天祝| 寻乌县| 太湖县| 叶城县| 综艺| 金寨县|