使用Python定义测试用例

        

目录

测试结果类

测试状态类

测试步骤类

测试case类

        一个完整的功能测试用例包括:测试case编号,测试case描述,测试前提条件,测试步骤,测试action, 期望结果,实际结果,测试结果,测试状态,测试remark等。

        通过python对测试用例相关的属性进行类型封装,以用于自动化测试。

测试结果类

class TestResultEnum(Enum):
    Pass: str = "Pass"
    Fail: str = "Fail"
    Warning: str = "Warning"
    NotRun: str = "NotRun"
    Pending: str = "Pending"
    NA: str = ""
​
    @staticmethod
    def get_enum_by_value(input_str: str) -> "TestResultEnum":
        for member in TestResultEnum:
            if member.value.lower() == input_str.lower():
                return member
​
        raise ValueError(f"无效的枚举值: {input_str}")

测试状态类

class TestStatusEnum(Enum):
    RUN: str = "RUN"
    NA: str = "NA"
​
    @staticmethod
    def get_enum_by_value(input_str) -> "TestStatusEnum":
        for member in TestStatusEnum:
            if member.value.lower() == input_str.lower():
                return member
​
        raise ValueError(f"无效的枚举值: {input_str}")

测试步骤类

@dataclass
class TestStep:
    """测试步骤类
​
    Attributes:
        action (str): 测试执行动作
        expected_result (str): 测试期望结果
        actual_result (str): 测试实际结果
        final_result (TestResultEnum): 测试结果【Pass】 or 【Fail】 or 【NotRun】
​
    Examples:
    >>> tset_step = TestStep(action="Action1", expected_result="e1", actual_result="a1", final_result=TestResultEnum.NA)
    """
​
    action: str = ""
    expected_result: str = ""
    actual_result: str = ""
    final_result: TestResultEnum = TestResultEnum.NA

测试case类

@dataclass
class TestCase:
    """测试用例类
​
    Attributes:
        testcase_description (str): 测试case描述
        testcase_precondition (str): 测试前提条件
        testcase_steps_list (list[TestStep]): 测试步骤集合
        status (TestStatusEnum): 测试执行状态【RUN】 or 【NA】
        channel (str): 测试通道
        remark (str): 测试备注
        test_timestamp (str): 测试时间戳
​
    Examples:
    >>> test_case = TestCase(testcase_description="test_description", testcase_precondition="testcase_precondition", testcase_steps_list=[])
    """
​
    testcase_description: str
    testcase_precondition: str
    testcase_steps_list: list["TestStep"] = field(default_factory=list)
    status: TestStatusEnum = TestStatusEnum.RUN
    channel: str = ""
    type: str = ""
    remark: str = ""
    test_timestamp: str = ""
​
    def __post_init__(self):
        self.testcase_steps_list.insert(0, TestStep())
​
    @property
    def case_length(self) -> int:
        return len(self.testcase_steps_list)
​
    @property
    def case_test_result(self) -> "TestResultEnum":
        test_steps_results = [test_step.final_result.name.lower() for test_step in self.testcase_steps_list]
        if test_steps_results.count("fail") == 0:
            if test_steps_results.count("pass") >= 1:
                test_result = TestResultEnum.Pass
            elif test_steps_results.count("warning") >= 1:
                test_result = TestResultEnum.Warning
            else:
                test_result = TestResultEnum.NotRun
        else:
            test_result = TestResultEnum.Fail
        self.testcase_steps_list[0].final_result = test_result
        return test_result

测试报告类(待更新)

@dataclass
class TestReport:
    """测试报告类

    Attributes:
        test_report_path (Path): 测试报告路径
        test_sheet (str): 测试报告sheet页名
        self.testcase_list (list[TestCase]): 测试用例集合

    Examples:
    >>> test_report = TestReport(test_report_path=Path(r"xxx"), test_sheet="DTC", testcase_list=[])
    """

    test_report_path: Path
    test_sheet: str
    testcase_list: list[TestCase] = field(default_factory=list)
### Python 软件测试用例代码示例 在Python中,`unittest` 和 `pytest` 是两种常用的测试框架。以下是基于这两种框架的测试用例代码示例。 #### 使用 unittest 的测试用例 `unittest` 是 Python 标准库的一部分,适合编写结构化的单元测试。下面是一个简单的例子: ```python import unittest def add(a, b): return a + b class TestAddFunction(unittest.TestCase): def test_add_positive_numbers(self): self.assertEqual(add(1, 2), 3) def test_add_negative_numbers(self): self.assertEqual(add(-1, -2), -3) if __name__ == '__main__': unittest.main() ``` 此代码定义了一个名为 `TestAddFunction` 的类,继承自 `unittest.TestCase`[^1]。通过调用 `assertEqual` 方法验证函数返回的结果是否符合预期。 --- #### 使用 pytest 的参数化测试 `pytest` 提供了更灵活的方式来进行测试,尤其是它的参数化功能可以显著减少重复代码。以下是一个使用 `@pytest.mark.parametrize` 的示例: ```python import pytest def add(a, b): return a + b test_data = [ (1, 2, 3), (-1, -2, -3), (0, 0, 0), ] @pytest.mark.parametrize("a,b,expected", test_data) def test_add(a, b, expected): result = add(a, b) assert result == expected ``` 在此示例中,`test_data` 列表包含了多个输入和期望输出的数据组。`@pytest.mark.parametrize` 将这些数据逐一传递给测试函数并执行[^2]。 --- #### 测试 Web 应用程序的集成测试 除了单元测试外,还可以使用工具如 Selenium 或 Requests 进行集成测试。以下是如何结合 `requests` 和 `pytest` 来测试 REST API 的示例: ```python import pytest import requests BASE_URL = "https://jsonplaceholder.typicode.com" def test_get_posts(): response = requests.get(f"{BASE_URL}/posts/1") data = response.json() assert response.status_code == 200 assert isinstance(data['id'], int) assert 'title' in data and isinstance(data['title'], str) @pytest.mark.parametrize("post_id,title_contains", [(1, "sunt"), (2, "et")]) def test_post_titles(post_id, title_contains): response = requests.get(f"{BASE_URL}/posts/{post_id}") data = response.json() assert response.status_code == 200 assert title_contains in data["title"] ``` 这段代码展示了如何利用外部服务(JSONPlaceholder)模拟真实的 HTTP 请求场景,并对其进行断言验证[^3]。 --- ### 总结 以上分别介绍了三种不同类型的测试用例:基于 `unittest` 的基本单元测试、基于 `pytest` 参数化的批量测试以及涉及网络请求的集成测试。每种方式都有其适用范围,在实际项目中可以根据需求选择合适的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python自动化码农

感谢打赏,您的鼓励是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值