【问题描述】
工程中post请求的body体因为较多参数是非必填参数,如果像get接口那样将post接口的body定义写在yaml文件中,case写起来就比较复杂,所以直接在case中传入接口的body参数
对于创建用户接口来说,其不同的验证用例总是将其通用的body体进行某个变量的修改,然后调用进行验证
之前的写法为:
def test_adduser_invalidCase3(self):
jsonbody ={"user":{"name":"auto"+getRandomString(),"domain_id":getDomainId,"enabled":False,"password":self.g_data["g_userPwd"]}}
'''
case api调用
'''
def test_adduser_invalidCase2(self):
jsonbody ={"user":{"name":"auto"+getRandomString(),"domain_id":getDomainId,"enabled":True,"password":self.g_data["g_userPwd"]}}
'''
case api调用
'''
def test_adduser_invalidCase1(self):
jsonbody ={"user":{"name":"auto"+getRandomString(),"domain_id":"","enabled":False,"password":self.g_data["g_userPwd"]}}
'''
case api调用
'''
可以看到jsonbody 结构是一样的,只是不同的case更新要验证的keyvalue
这样写会带来一个问题:如果jsonbody体有更新(新增了一个必填字段,参数name改成了username),那么需要在case文件中对用到的case用例一个个更新body
那么如何解决这个问题呢?
目前想到的解决办法是:
1.在case类中初始化一个类变量赋值为接口的body体
2.增加一个getjsonbody()方法,返回这个json体
3.不同case去创建用户时,需要更新name,这些唯一性参数,需要在getjsonbody()方法中,对jsonbody的这些唯一性参数进行更新
4.不同case调用getjsonbody拿到body体后,根据case情况,修改有区别的参数
初始化及getbody方法参考如下
def setup_class(self):
super().setup_class(self)
self.testapi = userApi()
self._jsonOSUSERuserbody = {"user": {"name": "autotest" + getRandomString(), "domain_id": _domainId,
"password": self.g_data["g_userPwd"], "email": getRandomString() + "@qq.com",
"areacode": "0086", "enabled": True, "pwd_status": False,
"phone": raddomPhone(),
"access_mode": "default"}}
def addOsUserBody(self):
returnjsonbody = copy.deepcopy(self._jsonOSUSERuserbody)
#复制一个变量去更新并返回,否则会对self._jsonOSUSERuserbody这一个变量进行更新,且后面的用户会引用这同一个变量
returnjsonbody["user"]["name"] = "a" + getRandomString()
returnjsonbody["user"]["email"] = getRandomString() + "@qq.com"
returnjsonbody["user"]["phone"] = raddomPhone()
return returnjsonbody
case 创建用户必填参数为空
def test_addOSUSERusers_invalidCase2(self):
jsonbody = self.addOsUserBody()
jsonbody["user"]["name"] =""