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
相关产品推荐
相关产品推荐

