Python基于paramunittest模块实现excl参数化

  • Post category:Python

我会为你介绍如何使用Python基于paramunittest模块实现excel参数化。

首先,我们需要了解一下paramunittest模块。paramunittest模块是Python中的一个第三方模块,它可以帮助我们将unittest用例参数化。同时,它也支持使用Excel文件作为参数数据源。

接下来,我们将提供两个示例来演示如何使用paramunittest模块实现excel参数化:

示例1:使用Excel作为参数数据源

在这个示例中,我们将编写一个测试用例来测试一个字符串是否以给定的子字符串开头或结尾。我们将使用params.xlsx文件作为参数数据源,并通过paramunittest模块来实现测试用例的参数化。

首先,让我们创建params.xlsx文件,并将以下内容添加到第1个工作表中:

test_name string sub_str is_start expected
test_case1 abcdefg abc True True
test_case2 abcdefg bcd False True
test_case3 abcdefg efg False True
test_case4 abcdefg xyz True False

其中,“test_name”列包括测试用例的名称,“string”列包括要测试的字符串,“sub_str”列包括要查找的子字符串,“is_start”列指示子字符串是在字符串的开头还是结尾,“expected”列是我们期望的结果。

然后,我们将通过以下代码实现测试用例的参数化:

import paramunittest
import unittest
from openpyxl import load_workbook

# 加载Excel文件,并获取第1个工作表中的数据
params = load_workbook('params.xlsx').active

# 定义测试用例参数化类
@paramunittest.parametrized(
    *[(params.cell(row=i, column=1).value,  # test_name
       params.cell(row=i, column=2).value,  # string
       params.cell(row=i, column=3).value,  # sub_str
       params.cell(row=i, column=4).value,  # is_start
       params.cell(row=i, column=5).value)  # expected
      for i in range(2, params.max_row + 1)]
)
class TestString(unittest.TestCase):
    def setParameters(self, test_name, string, sub_str, is_start, expected):
        self.test_name = test_name
        self.string = string
        self.sub_str = sub_str
        self.is_start = is_start
        self.expected = expected

    def test_string(self):
        if self.is_start:
            self.assertTrue(self.string.startswith(self.sub_str))
        else:
            self.assertTrue(self.string.endswith(self.sub_str))

在测试用例参数化类中,我们首先使用load_workbook函数从params.xlsx文件中加载参数数据。然后,我们使用@paramunittest.parametrized装饰器来定义测试用例参数化类。在装饰器中,我们使用列表推导式将Excel中的参数数据添加到参数化列表中。

每个参数化测试用例都有一个名为“setParameters”的方法,该方法用于设置参数值。在该方法中,我们将参数值分配给实例变量。

最后,我们编写了一个名为“test_string”的测试用例方法,用于测试参数化数据是否符合期望。

示例2:使用ParamUnittest的基本功能

在这个示例中,我们将编写一个测试用例来测试两个数字之间的乘积。我们将使用paramunittest模块来实现测试用例的参数化。

我们可以通过以下代码实现测试用例的参数化:

import paramunittest
import unittest

# 定义测试用例参数化类
@paramunittest.parametrized(
    (2, 3, 6),
    (4, 5, 20),
    (-3, 2, -6)
)
class TestMath(unittest.TestCase):
    def setParameters(self, a, b, expected):
        self.a = a
        self.b = b
        self.expected = expected

    def test_multiply(self):
        self.assertEqual(self.a * self.b, self.expected)

在测试用例参数化类中,我们使用@paramunittest.parametrized装饰器来定义测试用例参数化类。在装饰器中,我们通过元组的形式将每个参数化测试用例传递给装饰器。

每个参数化测试用例都有一个名为“setParameters”的方法,该方法用于设置参数值。在该方法中,我们将参数值分配给实例变量。

最后,我们编写了一个名为“test_multiply”的测试用例方法,用于测试参数化数据是否符合期望。

这就是使用Python基于paramunittest模块实现excel参数化的完整攻略。希望对你有所帮助。