91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python unittest 簡單實現參數化的方法

發布時間:2020-08-31 16:22:23 來源:腳本之家 閱讀:152 作者:SummerLaw 欄目:開發技術

Python unittest 理論上是不建議參數驅動的,其用例應該專注單元測試,確保每個method的邏輯正確。

引用Stack Overflow的一個答案,

“單元測試應該是獨立的,沒有依賴項的。這確保了每個用例都有非常具體而專一的測試反應。傳入參數會破壞單元測試的這個屬性,從而使它們在某種意義上無效。使用測試配置是最簡單的方法,也是更合適的方法,因為單元測試不應該依賴外部信息來執行測試。那應該集成測試要做的。”

但是實際操作過程中,時不時還是有控制入參的需求的。比如,我想簡單實現一個web功能的cross-browser測試……

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

利用類的屬性

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

即可以順利解決一個web 測試腳本cross-browser的驗證的問題。

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可以簡單的完成參數控制的test case,實際應用的是python的裝飾器(decorator)。

寫出來有些類似cucumber gherkin當中的scenario outline。

在實驗中,這個方法不適用于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")

執行 nosetests my_test.py ,4個test case被執行。

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

重寫unittest.TestCase的構造函數

出處:Eli Bendersky的博客

定義類ParametrizedTestCase,使之集成unittest.TestCase并重寫其構造函數,增加param這個參數。

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

下面是一個包含我們用例的測試腳本,繼承了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)

以參數驅動的方式執行用例

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 簡單實現參數化的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连山| 云龙县| 赤壁市| 南郑县| 永昌县| 西乌珠穆沁旗| 佛教| 邢台市| 从江县| 定陶县| 西吉县| 卫辉市| 江川县| 昭苏县| 金门县| 荃湾区| 霍邱县| 巴东县| 皋兰县| 本溪市| 阳江市| 洪雅县| 环江| 墨脱县| 库尔勒市| 曲松县| 寻甸| 罗定市| 新建县| 修水县| 巴彦县| 隆尧县| 中西区| 东安县| 昔阳县| 略阳县| 民权县| 安多县| 东乌珠穆沁旗| 大城县| 双牌县|