ios get请求返回数据为空_接口间数据依赖很麻烦,那试试这个框架吧!

a07cd6d0a7f68d3f58215e0bd1386276.gif

在实际的测试工作中,在做接口自动化测试时往往会遇到接口间数据依赖问题,即API_03的请求参数来源于API_02的响应数据,API_02的请求参数又来源于API_01的响应数据,因此通过自动化方式测试API_03接口时,需要预先请求API_02接口,获取到API_03的请求参数,而获取API_02的响应又需要预先对API_01发起请求,从响应中提取API_02的请求参数。

而下面的自动化框架设计便解决了这一问题:

一、用于数据驱动的Excel表格设计

368e889640b9b5be8f810f2483b4fe31.png

二、框架代码实现逻辑

当测试 id 为 shop-03 的接口时,首先判断【是否运行】。如果为 'yes' 则判断该接口请求类型, 'POST' OR 'GET' 走不同的逻辑分支。

POST请求的话判断是否有【case依赖】,【case依赖】为空则无依赖,不为空则获取依赖的case id。

上述表格中,shop-03的case依赖为shop-02,获取到依赖的id后,代码逻辑主动去判断shop-02接口的相关字段参数(【是否运行】/【请求类型】/【case依赖】),如果shop-02也存在依赖接口shop-01,则代码继续判断shop-01接口对应字段参数。

shop-01接口【case依赖】字段为空时,获取【请求数据】根据请求数据这个字段获取单独存储在字典中的完整的请求参数,发起请求,获得shop-01的响应后根据shop-01对应的【被依赖接口的返回数据】提取下游接口即shop-02的所需要的依赖参数,存入一个依赖参数列表中,shop-02接口把获取到的参数代入到请求参数中进行请求,获取到shop-02的响应后同样根据【被依赖接口的返回数据】提取下游接口shop-03所需要的依赖参数,存入依赖参数列表,shop-03接口从列表中获取这个参数代入请求参数,进入请求,获取响应,根据【实际结果取值字段】获取要断言的字段,并对比预期结果完成该接口的测试。

# 主逻辑模块部分代码示例'''判断是否有case依赖,如果有case依赖则执行depend_data.py中的depend_response_data(self,caseid)方法,该方法返回该接口发起请求的依赖参数''' elif method == 'Post':                    if depend_caseid:                        params_data_list = self.depend_result.depend_response_data(depend_caseid)                        log_info('main_logic.requests_api::根据依赖的caseid={},'                                 '调用depend_data.depend_response_data获取到的依赖数据为:{}'.format(depend_caseid, params_data_list))                        for j in range(len(depend_key_list)):                            params[depend_key_list[j]] = params_data_list[j][0]                        header = rquests_headers()                        log_info('main_logic.requests_api::执行的用例{}请求url为:{},入参为:{},请求头为:{}'.format(caseid,url,params,header))                        response = self.post_requests(url, params, header)                        # print(response)                        self.results_list.append(response)                    else:                        header = rquests_headers()                        response =self.post_requests(url, params, header)                        # print(response)                        self.results_list.append(response)
#数据依赖模块部分代码示例'''通过excel表中【case依赖】字段一层层向上游接口请求,结果储存在一个结果列表中供下游接口调用,最后返回测试接口所需要的依赖数据'''    def depend_response_data(self,caseid):        depend_caseid_t = self.excel_case_data.get_depend_caseid(caseid)        depend_caseid_list = []        #如果case依赖字段不为空        if depend_caseid_t:            #获取接口串联依赖caseid列表            while depend_caseid_t:                depend_caseid_list.append(depend_caseid_t)                depend_caseid_t = self.excel_case_data.get_depend_caseid(depend_caseid_t)            depend_caseid_list.reverse()            depend_caseid_list.append(caseid)            march_result_list = []            num_caseid = len(depend_caseid_list)            #迭代获取列表中的caseid            for i in range(num_caseid):                depend_caseid_s = self.excel_case_data.get_depend_caseid(depend_caseid_list[i])                depend_key_list = self.excel_case_data.get_depend_key(depend_caseid_list[i]).split(",")                params_key = self.excel_case_data.get_request_key(depend_caseid_list[i])                params = self.requests_data[params_key]                url = self.excel_case_data.get_url(depend_caseid_list[i])                #判断该caseid的测试用例中case依赖是否为空                if depend_caseid_s:                    #获取上一个依赖接口返回的依赖参数                    params_data_list = march_result_list[i-1]                    #根据该caseid数据依赖字段构造该接口的传参                    for k in range(len(depend_key_list)):                        params[depend_key_list[k]] = params_data_list[k][0]                    #对该接口发起请求                    header = rquests_headers()                    result = post_requests(url, params, header)                    getdata = GetExcelDate()                    is_depend_response = getdata.get_depend_response(depend_caseid_list[i])                    #判断该接口是否需要为下一接口返回依赖参数                    if is_depend_response:                        depend_response_list = is_depend_response.split(",")                        results = result                        matchlist = depend_response_list                        matchparams = match_params(results, matchlist)                        march_result_list.append(matchparams)                    else:                        print("caseid={}不需要返回被依赖的字段".format(depend_caseid_list[i]))                #当该caseid测试用例中case依赖为空时直接请求该接口,返回匹配到的下一关联接口的请求参数                else:                    result = self.depend_response(depend_caseid_list[i])                    getdata = GetExcelDate()                    is_depend_response = getdata.get_depend_response(depend_caseid_list[i])                    if is_depend_response:                        depend_response_list = is_depend_response.split(",")                        results = result                        matchlist = depend_response_list                        matchparams = match_params(results, matchlist)                        march_result_list.append(matchparams)                    else:                        print("caseid={}不需要返回被依赖的字段".format(depend_caseid_list[i]))            return matchparams
c4573f2685fada302d2d3311faf5a404.gif

未来软件测试行业的趋势到底如何,点击此处填写调查问卷,共同助力行业发展方向。

c04ff325deb5dc04839467236c28b8a7.png

链接:https://www.cnblogs.com/fujinjie/p/13668029.html#4688474

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除

推荐阅读

点击阅读☞想学接口自动化测试,不会搭建框架怎么行

点击阅读☞自动化测试解决竞争问题?等待一下就行了~

点击阅读☞搭建接口自动化测试环境,这3个工具就够了

点击阅读☞手工测试工作量大!还不会自动化是想加班么?

点击阅读☞安装、配置2步走,自动化测试报告就生成了

b45760ac5696c8682f58dff30b84d466.gif

cfc5da1b024b33e7e6ca950a5ff0adeb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值