You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytest中根据category条件分支执行测试步骤适配两类场景的方法

pytest 单测试用例兼容双category分支执行方案

核心实现逻辑

不需要额外引入pytest插件,直接用Python原生的if条件判断即可实现分支执行:

  • P1、P2的创建校验是两个场景的通用逻辑,保留原有代码不做改动
  • 在P2逻辑执行完成后增加判断:只有当category取值为blue时,才执行P3、P4的创建校验代码块
  • category为grey时判断条件不成立,P3、P4代码块不会触发,用例完成P1、P2校验后直接正常结束,标记为通过

完整可运行代码(基础版)

这个版本直接在你原有代码基础上添加判断,逻辑直观,适合初学者快速理解:

def test_01(self):
    # 通用执行逻辑:blue/grey场景均需创建校验P1、P2
    resp = self.x.create_p(self.category.p1)
    resp_status = self.x.checkResponseStatus(resp)
    msg = self.x.extraceMessage(resp.text)
    info = msg['error']
    self.assertEqual(resp_status, RESTResponse.PASSED, 'Creating P1 failed')
    self.assertEqual('OK',info, 'Creating P1 failed')

    resp = self.x.create_p(self.category.p2)
    resp_status = self.x.checkResponseStatus(resp)
    msg = self.x.extraceMessage(resp.text)
    info = msg['error']
    self.assertEqual(resp_status, RESTResponse.PASSED, 'Creating P2 failed')
    self.assertEqual('OK',info, 'Creating P2 failed')

    # 分支执行逻辑:仅blue场景执行P3、P4校验
    if self.category == 'blue':
        resp = self.x.create_p(self.category.p3)
        resp_status = self.x.checkResponseStatus(resp)
        msg = self.x.extraceMessage(resp.text)
        info = msg['error']
        self.assertEqual(resp_status, RESTResponse.PASSED, 'Creating P3 failed')
        self.assertEqual('OK',info, 'Creating P3 failed')

        resp = self.x.create_p(self.category.p4)
        resp_status = self.x.checkResponseStatus(resp)
        msg = self.x.extraceMessage(resp.text)
        info = msg['error']
        self.assertEqual(resp_status, RESTResponse.PASSED, 'Creating P4 failed')
        self.assertEqual('OK',info, 'Creating P4 failed')

优化版代码(减少重复冗余)

四个P资源的创建、校验逻辑完全重复,你可以把重复逻辑抽成公共方法,后续修改校验规则只需要改一处,代码维护成本更低:

def _check_p_create(self, p_obj, fail_tip):
    """封装单个P资源的创建+结果校验通用逻辑"""
    resp = self.x.create_p(p_obj)
    resp_status = self.x.checkResponseStatus(resp)
    msg = self.x.extraceMessage(resp.text)
    err_info = msg['error']
    self.assertEqual(resp_status, RESTResponse.PASSED, fail_tip)
    self.assertEqual('OK', err_info, fail_tip)

def test_01(self):
    # 必选资源校验
    self._check_p_create(self.category.p1, 'Creating P1 failed')
    self._check_p_create(self.category.p2, 'Creating P2 failed')
    # blue场景额外校验P3、P4
    if self.category == 'blue':
        self._check_p_create(self.category.p3, 'Creating P3 failed')
        self._check_p_create(self.category.p4, 'Creating P4 failed')

注意事项

请提前确认self.category的实际取值:如果通过eval(data_cim['generic']['category'])拿到的blue/grey值是挂在category对象的某个属性下(比如self.category.value),只需要把if的判断条件对应调整即可,例如改成if self.category.value == 'blue',保证判断条件能正确匹配到blue值即可。

内容的提问来源于stack exchange,提问作者RR HS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:57:09