1. 程式人生 > 程式設計 >Python unittest單元測試框架實現引數化

Python unittest單元測試框架實現引數化

當我們在使用TestNG時,發現它有一個非常好用的引數化功能。當你的測試用例有固定的引數和斷言結果時,它可以相似用例的節省用例的個數。

  例子如下:

import static org.testng.Assert.assertEquals;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
 * Created by fnngj on 2017/3/19.
 */
public class Demo {

  // 定義測試資料
  @DataProvider(name = "data")
  public Object[][] Users() {
    return new Object[][] {
        { 1,1,2},{ 2,2,5},{ 3,3,6},};
  }
  @Test(dataProvider="data")
  public void testAdd(int a,int b,int c) {
    assertEquals(a + b,c);
  }
}

  相對而言,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單元測試框架實現引數化的擴充套件。同時支援不同的單元測試框架。

Python unittest單元測試框架實現引數化

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

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

import unittest
from nose_parameterized import parameterized
class TestAdd(unittest.TestCase):
  @parameterized.expand([
    ("01",2),("02",5),("03",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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。