Python 运行pytest用例时业务断言失败,用例统计是pass的问题,已解决

问题:python 中assert断言,失败的用例,控制台不显示红色报错,pytest统计为pass,不统计为失败用例

现象:

在这里插入图片描述

业务断言失败,pytest统计为pass

原因分析:

python在pytest断言时,用了异常捕捉,断言失败也不会标记失败,因为try…except,当出现异常时,会进入except代码块,不会出现执行失败的情况,所以不会标记用例为失败。如果不抛出异常,则测试结果会表明为pass 的,所以需要再次抛出异常raise AssertionError(e),用例才会标记失败

修改前代码:

    def assert_business(self, assert_business):
        # 业务断言
        for k, v in assert_business.items():
            data = jsonpath.jsonpath(self.respond.json(), k)
            try:
                # 响应数据断言
                assert data[0] == v, f"业务断言失败,实际拿到的结果{data[0]},预期拿到的结果{v}"
                # 响应码断言
                assert self.respond.status_code == 200, f"业务断言失败,实际拿到的结果{self.respond.status_code},预期拿到的结果200"
            except Exception as reason:
                print('业务断言提取json为:{}'.format(k))
                print('业务断言被提取响应数据为:{}'.format(self.respond.json()))
                print('预期数据为:{}'.format(v))
        return self

修改后代码:

    def assert_business(self, assert_business):
        # 业务断言
        for k, v in assert_business.items():
            data = jsonpath.jsonpath(self.respond.json(), k)
            try:
                # 响应数据断言
                assert data[0] == v, f"业务断言失败,实际拿到的结果{data[0]},预期拿到的结果{v}"
                # 响应码断言
                assert self.respond.status_code == 200, f"业务断言失败,实际拿到的结果{self.respond.status_code},预期拿到的结果200"
            except Exception as reason:
                print('业务断言提取json为:{}'.format(k))
                print('业务断言被提取响应数据为:{}'.format(self.respond.json()))
                print('预期数据为:{}'.format(v))
                raise reason
        return self

修改后在代码,再次运行,用例执行为失败

问题:pytest.mark.xfail()----和try except一起使用时,pytest.mark.xfail()会失效

现象:在except代码块,增加pytest.mark.xfail()来标记用例为失败,标记不成功

代码如下:

    def assert_business(self, assert_business):
        # 业务断言
        for k, v in assert_business.items():
            data = jsonpath.jsonpath(self.respond.json(), k)
            try:
                # 响应数据断言
                assert data[0] == v, f"业务断言失败,实际拿到的结果{data[0]},预期拿到的结果{v}"
                # 响应码断言
                assert self.respond.status_code == 200, f"业务断言失败,实际拿到的结果{self.respond.status_code},预期拿到的结果200"
            except Exception as reason:
                print('业务断言提取json为:{}'.format(k))
                print('业务断言被提取响应数据为:{}'.format(self.respond.json()))
                print('预期数据为:{}'.format(v))
                pytest.mark.xfail(reason="业务断言失败")

再次运行代码,代码虽然有报错,但是用例还是pass。无法达到,出现报错,用例统计为失败的效果。为什么pytest.mark.xfail(reason=“业务断言失败”)----和try except一起使用时,pytest.mark.xfail()会失效的根本原因,还不是很清楚。有知道的同学,可以留言,不胜感激。

针对运行pytest用例时业务断言失败,用例统计是pass的问题,通过抛出异常解决了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值