11. 原生测试框架Unittest 解决重复性前置条件的问题

原生测试框架Unittest 解决重复性前置条件的问题

核心机制解析

1. 测试类基础结构

class TestA(unittest.TestCase, Oder):
    @classmethod
    def setUpClass(cls):
        ...

    def setUp(self):
        self.get()
        self.login()
  • 关键组件
    • unittest.TestCase:测试用例基类
    • Oder:页面对象类(提供业务操作)
    • setUpClass:类级别初始化(整个测试类执行前运行一次)
    • setUp:方法级别初始化(每个测试方法执行前运行)

生命周期钩子详解

2. 执行流程图示

开始测试类
执行setUpClass
遍历测试方法
执行setUp
执行测试方法
执行tearDown
执行tearDownClass
结束测试

3. 方法作用对比

方法执行时机典型用途
setUpClass整个测试类开始前执行一次初始化全局资源(如启动浏览器)
setUp每个测试方法执行前准备测试环境(如登录操作)
tearDown每个测试方法执行后清理测试数据
tearDownClass整个测试类结束后执行一次释放全局资源(如关闭浏览器)

代码实现解析

4. 前置条件复用实现

def setUp(self):
    self.get()    # 来自Oder类的页面访问方法
    self.login()  # 来自Oder类的登录操作方法
  • 作用机制
    • 每个测试方法执行前自动调用
    • 统一执行页面访问和登录操作
    • 避免在每个测试方法中重复编写相同代码

5. 测试方法示例

def test_Oder(self):
    self.search_bug()
    assert self.element(self.order_label).text == 'Web Orders'

def test_logout(self):
    self.logout()
    assert self.driver.current_url == '...'
  • 优势体现
    • 测试方法只需关注业务验证
    • 前置条件自动保障一致性
    • 降低代码维护成本

最佳实践建议

6. 优化方案对比

方案优点缺点
方法内直接调用直观可见重复代码多,维护成本高
使用setUp统一管理前置条件需要合理设计继承体系
装饰器封装灵活组合不同前置条件增加代码复杂度

7. 扩展建议

def tearDown(self):
    if hasattr(self, 'driver'):
        self.driver.quit()

@classmethod
def setUpClass(cls):
    cls.driver = Chrome().start_chrome_browser  # 全局浏览器实例

常见问题解决方案

8. 异常处理模式

def setUp(self):
    try:
        self.get()
        self.login()
    except Exception as e:
        self.fail(f"前置条件初始化失败: {str(e)}")

9. 条件跳过机制

@unittest.skipIf(env == 'prod', '跳过生产环境执行')
def test_danger_operation(self):
    ...

10.完整代码

import unittest
from chap3.po import *


class TestA(unittest.TestCase, Oder):

    @classmethod
    def setUpClass(cls):
        ...

    def setUp(self):
        self.get()
        self.login()

    def test_Oder(self):
        self.search_bug()
        assert self.element(self.order_label).text == 'Web Orders'

    def test_logout(self):
        self.logout()
        assert self.driver.current_url == ('http://secure.smartbearsoftware.com/samples/'
                                           'TestComplete12/WebOrders/Login.aspx?ReturnUrl='
                                           '%2fsamples%2fTestComplete12%2fWebOrders%2fDefault.aspx')

通过合理使用测试生命周期钩子,可使测试代码维护成本降低约50% .


「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值