接口自动化-如多个接口都有一个重复字段,如何在一个用例对多个接口这个字段的合法性校验

【场景】有两个创建用户接口、两个更新用户接口,这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)

如上即可实现在一个用例里,覆盖对多个接口的同一个参数做非法校验,更高效一些

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值