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


    【场景】有两个创建用户接口、两个更新用户接口,这4个接口参数都有name字段,name字段的限制是相同的》

    1.不能用数字开头

    2.不能大于32个字符

    等等。。。

    在自动化验证时,可以使用回调函数将这几个接口的name参数验证在一个用例验证

    实现过程:

    1.在BaseTestcase中编写方法,实现根据传入函数去调用指定的函数

    1. def callback_api(self,urlname,callback,**kws):
    2. 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 最后做断言

    1. @allure.story('keystone_create with invalid name')
    2. @pytest.mark.level3
    3. @pytest.mark.parametrize('name,error_code,errmsg',
    4. [(CaseDataFactory.username('repeat username'), 409, g_experrmsg['conflict_username']),
    5. (CaseDataFactory.username('username begin with letter'), 400,
    6. g_experrmsg['Username_character_type_limit']),
    7. (CaseDataFactory.username('username longger than 32'), 400,
    8. g_experrmsg['Username_length_limit']),
    9. (CaseDataFactory.username('username include special word'), 400,
    10. g_experrmsg['Username_character_type_limit']),
    11. ],
    12. ids=['repeat username', 'username begin with letter', 'the username id longer than 32',
    13. 'username include special word'])
    14. def test_keystone_create_user_03(self, name, error_code, errmsg):
    15. funcdict = {'KeystoneCreateUser': self.userapi.KeystoneCreateUser,
    16. 'CreateUser': self.userapi.CreateUser
    17. }
    18. funcparam = {
    19. 'KeystoneCreateUser': {"authtoken": g_secuadmintoken, "name": name},
    20. 'CreateUser': {"authtoken": g_secuadmintoken, "name": name}
    21. }
    22. with allure.step('覆盖2个接口验证接口name字段的合法性'):
    23. for urldesc in funcdict:
    24. testresponse = self.callback_api(urldesc, funcdict[urldesc], **funcparam[urldesc])
    25. assertUtil.assumeequal(testresponse.status_code, error_code)
    26. assertUtil.assumeequal(jsonUtil.geterrormsg(testresponse.text), errmsg)

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

  • 相关阅读:
    应急响应LINUX&Windows
    树和图的基础知识(洛谷)
    用ChatGPT快速打造一个专业WordPress网站
    利用天翎知识文档+群晖NAS搭建企业知识库,享用智能检索
    NCO IP Core
    VSC/SMC(十六)——自适应鲁棒滑模控制
    performance_schema
    【Linux线程】二、线程控制原语
    LeetCode13——罗马数字转整数
    oracle-AWR报告生成方法
  • 原文地址:https://blog.csdn.net/wyy_a/article/details/126893753