parameterized参数化测试

1、官网:https://pypi.org/project/parameterized/

2、parameterized:可以使用任何Python测试框架进行参数化测试。比如nose的参数化测试,py.test的参数化测试,unittest的参数化测试。

3、安装parameterized:pip install parameterized

4、安装nose:pip install nose

5、安装pytest:pip install pytest

6、官网例子:

导入相应的包:

from nose.tools import assert_equal

from parameterized import parameterized, parameterized_class

import unittest

import math

6.1、@parameterized 装饰符接受一个由tuples或param(...)组成的列表等:

@parameterized([

    (2, 2, 4),

    (2, 3, 8),

    (1, 9, 1),

    (0, 9, 0),

])

#参数化3个参数base,exponent,expected,4组参数,传入具体数值。

def test_pow(base, exponent, expected):#测试幂函数,传入3个参数值

   assert_equal(math.pow(base, exponent), expected)

6.2、@parameterized.expand 装饰符接受一个由tuples或param(...)组成的列表等,unittest仅支持这种@parameterized.expand 的用法,@parameterized.expand 可以用来在无法使用测试生成器的情况下生成测试方法(例如,当测试类是unittest.TestCase的子类时:

class TestMathUnitTest(unittest.TestCase):#测试math的测试用例

   @parameterized.expand([

       ("negative", -1.5, -2.0),

       ("integer", 1, 1.0),

       ("large fraction", 1.6, 1),

   ])#参数化3个参数,name, input, expected,3组参数。传入测试方法名字和具体数值

   def test_floor(self, name, input, expected):##测试floor函数,传入3个参数值

       assert_equal(math.floor(input), expected)

   '''

   floor函数:Return the floor of x as an Integral.This is the largest integer <= x.

   '''

6.3、加法和乘法测试:

@parameterized_class(('a', 'b', 'expected_sum', 'expected_product'), [

   (1, 2, 3, 2),

   (5, 5, 10, 25),

])#参数化4个参数,'a', 'b', 'expected_sum', 'expected_product',2组参数。传入变量和具体数值

class TestMathClass(unittest.TestCase):

   def test_add(self):#加法测试

      assert_equal(self.a + self.b, self.expected_sum)

   def test_multiply(self):#乘法测试

      assert_equal(self.a * self.b, self.expected_product)

6.4、减法测试:

@parameterized_class([

   { "a": 3, "expected": 2 },#3-1=2

   { "b": 5, "expected": -4 },#1-5=-4

])#参数化2个参数,2组参数。传入变量和具体数值

class TestMathClassDict(unittest.TestCase):

   a = 1

   b = 1

   def test_subtract(self):#减法测试

      assert_equal(self.a - self.b, self.expected)

7、参数化参数

7.1、nose的参数化测试:nosetests -v test_math.py

7.2、py.test的参数化测试:py.test -v test_math.py()

7.3、unittest的参数化测试:python -m unittest -v test_math.py

备注: 因为unittest不支持测试装饰符,所以只有用@parameterized.expand创建的测试才会执行。

8、兼容性:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章