【场景】有两个创建用户接口、两个更新用户接口,这4个接口参数都有name字段,name字段的限制是相同的》
1.不能用数字开头
2.不能大于32个字符
等等。。。
在自动化验证时,可以使用回调函数将这几个接口的name参数验证在一个用例验证
实现过程:
1.在BaseTestcase中编写方法,实现根据传入函数去调用指定的函数
def callback_api(self,urlname,callback,**kws):
return callback(**kws)
2.1在 case中使用@pytest.mark.parametrize使用数据驱动传入多种情况的非法name,期望返回码,期望errmsg
2.2 funcdict = {'KeystoneCreateUser': self.userapi.KeystoneCreateUser,
'CreateUser': self.userapi.CreateUser
}
funcdict定义用例场景与业务api函数的对应关系
2.3 funcparam = { 'KeystoneCreateUser': {"authtoken": g_secuadmintoken, "name": name}, 'CreateUser': {"authtoken": g_secuadmintoken, "domain_id":g_domainid,"name": name} }
funcparam定义用例场景与api参数的对应关系
注意funcdict与duncparam的用例场景key关键字要相同
2.4 for循环遍历funcdict,根据用例场景拿到api函数名、以及对应的参数
2.5 使用回调函数传入要调用的业务api和对应的参数去请求服务
2.6 最后做断言
@allure.story('keystone_create with invalid name')
@pytest.mark.level3
@pytest.mark.parametrize('name,error_code,errmsg',
[(CaseDataFactory.username('repeat username'), 409, g_experrmsg['conflict_username']),
(CaseDataFactory.username('username begin with letter'), 400,
g_experrmsg['Username_character_type_limit']),
(CaseDataFactory.username('username longger than 32'), 400,
g_experrmsg['Username_length_limit']),
(CaseDataFactory.username('username include special word'), 400,
g_experrmsg['Username_character_type_limit']),
],
ids=['repeat username', 'username begin with letter', 'the username id longer than 32',
'username include special word'])
def test_keystone_create_user_03(self, name, error_code, errmsg):
funcdict = {'KeystoneCreateUser': self.userapi.KeystoneCreateUser,
'CreateUser': self.userapi.CreateUser
}
funcparam = {
'KeystoneCreateUser': {"authtoken": g_secuadmintoken, "name": name},
'CreateUser': {"authtoken": g_secuadmintoken, "name": name}
}
with allure.step('覆盖2个接口验证接口name字段的合法性'):
for urldesc in funcdict:
testresponse = self.callback_api(urldesc, funcdict[urldesc], **funcparam[urldesc])
assertUtil.assumeequal(testresponse.status_code, error_code)
assertUtil.assumeequal(jsonUtil.geterrormsg(testresponse.text), errmsg)
如上即可实现在一个用例里,覆盖对多个接口的同一个参数做非法校验,更高效一些