断言失败了怎么清理已创建的测试数据

场景一:校验创建用户接口返回体中的字段默认值是否符合预期

(按照用例流程需要清理测试数据,但中间assert断言失败会导致用例停止,不会执行清理操作)

用例组织是这样的:

def test_case(self)

        #调用adduser接口创建用户

        #assert校验response的返回体字段默认值是否符合预期

        #调用deleteuser接口删除创建的用户

如果assert校验失败,就会终止用例,deleteuser这一步不执行,导致测试数据未被清理。有什么办法解决这个问题?

方法一:使用try catch finally解决

将assert写在try中 将后面的清理操作写在finally里

方法二使用pytest.assume 断言,assume断言失败后,不停止后面的执行

这种轮询校验response返回参数值是否符合预期的校验,推荐使用用pytest.assume,如果第一个参数断言失败,还会校验后面的参数,如果用assert,遇到失败就不校验后面的参数了

参考代码

expres = {'email': "", 'areacode': "", 'enabled': True,  'phone': "",
                      'description': "", 'is_domain': False, 'password_expires': None,
                      }
            for key in expres:
                resValue = jsonpath.jsonpath(jsonRes, "$.user." + key)[0]
                pytest.assume(resValue == expres[key], "返回值与期望不一致,exp[" +key+"]="+ str(expres[key]) + "实际=" + str(resValue))

场景二:参数异常创建用户,期望是创建失败返回400,如果代码有bug,参数异常创建201,需要对创建的测试数据进行清理

用例代码如下:

def test_case1(self):

        #使用异常参数调用adduser接口

        #断言返回400,结束

但是如果代码有bug,参数异常创建201,需要对创建的测试数据进行清理

方法:用例中如果判断返回201就抛出一个异常,在异常exception里将userid加入垃圾桶去回收,exception不会导致后面的异常参数不执行

参考代码如下:

@pytest.mark.parametrize("invalidparm",
                         [{"domain_id": [getRandomString(len=32)]},{"password":["1232"]]
​​​​​​​def test_case1(self,invalidparm):
        for replaceParm in invalidparm:
            #invalidparm={'domain_id': ['oxCHUZgLoGg9lbGCERPcA9aazMSt2AEs']}#replaceParm =domain_id
            for replacevalue in invalidparm[replaceParm]:
                try:
                    jsonbody = self.addOsUserBody()
                    jsonbody["user"][replaceParm] = replacevalue
                    parm ={"headers": getdomainToken,"json":jsonbody}
                    parm.update(jsonbody)
                    result = self.testapi.addOSUSERusers(parm)
                    jsonRes = json.loads(result.text)
                    pytest.assume((result.status_code in [400,404]),str(replaceParm)+"非法为"+str(replacevalue)+",exp=400,result="+str(result.status_code) )
                    if result.status_code == 201:
                        #如果参数异常返回201,就抛出一个异常,在异常里将userid加入垃圾桶去回收
                        raise Exception("invalid Parm Created")
                except Exception:
                    print("触发异常,添加userid to垃圾桶")
                    user_id = jsonpath.jsonpath(jsonRes, "$.user.id")[0]
                    self.cleanUserlist.append(user_id)