1. 程式人生 > >【轉】nose-parameterized是Python單元測試框架實現參數化的擴展

【轉】nose-parameterized是Python單元測試框架實現參數化的擴展

col ever sel mage 多線程 stc nbsp zed testng

原文地址:

http://www.cnblogs.com/fnng/p/6580636.html

  相對而言,Python下面單元測試框架要弱上少,尤其是Python自帶的unittest測試框架,不支持參數化,不支持多線程執行用例,不支持HTML測試報告的生成...。好再,部分不足我們可以通過unittest擴展來滿足需求。比如現在要介紹一個參數化的擴展。

  在沒有參數化功能的情況下,我們的用例需要這樣編寫。

import unittest

class TestAdd(unittest.TestCase):

    def test_add_01(self):
        self.assertEqual(
1 + 2, 3) def test_add_02(self): self.assertEqual(2 + 2, 5) def test_add_03(self): self.assertEqual(3 + 3, 6) if __name__ == __main__: unittest.main()

  nose-parameterized是一個針對Python單元測試框架實現參數化的擴展。同時支持不同的單元測試框架。

技術分享圖片

  GitHub地址:https://github.com/wolever/nose-parameterized

  然後,unittest就可以像TestNG一樣寫用例了。

import unittest
from nose_parameterized import parameterized


class TestAdd(unittest.TestCase):

    @parameterized.expand([
        ("01",1, 1, 2),
        ("02",2, 2, 5),
        ("03",3, 3, 6), 
    ])
    def test_add(self, name, a, b, c):
        self.assertEqual(a 
+ b, c) if __name__ == __main__: unittest.main(verbosity=2)

執行結果:

test_add_0_01 (__main__.TestAdd) ... ok

test_add_1_02 (__main__.TestAdd) ... FAIL

test_add_2_03 (__main__.TestAdd) ... ok

當相同入參和斷言結果的用例越多,這種寫法用起來越爽!

【轉】nose-parameterized是Python單元測試框架實現參數化的擴展