本人接触了接口有半年多,使用过不少工具,如JMeter,Restlet client、postman、fiddler,还有自己公司正在使用的
swagger UI(开发在上面调试),接口测试的主要目标是检查接口的有效性。包括三点:
1.服务器端的返回的数据查看,如果服务器返回错误代码,或者不给出任何返回值的接口,都是不具备一个完好的接口的特征
的,在检查服务器返回的数据的时候,要结合相应的测试用例,一般来说都是返回JSON字符串较多,最开始一般都带code,可
以通过code的正确与否,做出响应判断;JSON返回数据的校验,是否与接口文档保持一致,在没有文档的文档的前提下,充分
了解接口返回的各种情况,在传入正确参数,错误参数(也要相应的考虑等价类和边界值,特别是一些被限制了的接口,只允
许传入参数1和2,在传入3的时候得出的结果会让你想不到,小编的自己体会)。
2.后台的响应的日志记录,在你调用接口的时候,后台应该会有个记录显示,下图是小编测试的接口相关截图,由于是生产环境
数据全部清空了
在你每一次调用接口的时候,后台都会有一条记录,哪怕是在MYSQL或者redis或者RoBo3T里面,也要相应的查看结果,下图
为在RoBo3T里面的相应的结果,查看是否把信息录入后台(如果有误,丢失或者失败,就要查看原因,原因分为客户端,服务
端、接口入参是否能正确录入的情况)
3.客户端的显示,在小编做的一个接口测试中,客户端会相应的收到一条消息,内容就是接口请求的content,查看是否乱码,
或者是否正确收到,结合请求的各种情况查看。相应的小编测试的一个接口,具有清空客户端消息条数的功能,这个就要结合发
送消息的接口再调用清空消息的接口,由于是延迟或者要刷新界面,客户端必须进去再出来或者重新开启,才会实现效果。当然
测试的过程中,不免会发现问题,比如批量推送的接口没有正确的清空条数,原来没写进去这个功能。还有记住一点,如果不确
定接口是否通,或者查看不到客户端显示,就要去问开发,到底在哪里可以看到,如果条件允许进入测试数据库服务器自己琢
磨,如果不信让开发帮助验证,没时间也要催他,毕竟是你的工作。
小编在做接口测试的时候,涉及了一个具有页码以及总页数的接口,由此可以利用小编在学的python的request库来进行接口测
试的响应调试,在开展测试活动之前,分析从哪些角度,1:单页的大小,如果size有默认的时候,查看默认和0的区别;2.total
的大小吗,如果有默认值的话也要和1相比,是不是符合;3:查看page的值,相应的和默认值以及0相比较;4,在做上述功能
测试的过程中小编还验证了是否有重复数据的校验,在某一页的最下方和下一页最开始一个可能会重复,由于是后台记录的接口
数据,不能完全保证是否一一对应无差,所以相应的写了脚本校验;
关于重复数据的校验,大体思路是这样的,先调用接口查看一共几页,在从接口的页面中一一遍历,把取得的关键字段存入列表
中,再利用列表.count[]方法检查是否有重复,如果有打印出该页数,相应的代码如下。
一:先调用一次接口
url = 'http://XXXXX.XXX.XXXXX.COM/XXXX/XXX'
para = {"size":2, "page":0}
header = {'content-type':'application/json; charset=utf-8'}
request = requests.post(url,params=para,headers=header)
print(request.text)#打印出结果查看
response = request.json()#打印出结果的json查看
total = response['content']['page']['total']#把总数在响应的json里面拿出来,用response[][][]
pageSize = response['content']['page']['pageSize']#打印大小
二:添加判断函数,是否到了最后一页,到了就出去循环
if total % 2 == 0:#由于是奇偶页分情况 pagesum = total/pageSize else: pagesum = (total+1)/pageSize while currentpage < pagesum:#判断是否到了最后一页 #print(1) para = {"size":2, "page":currentpage}#是指当前页,只不过先要知道最后页 request1 = requests.post(url,params=para,headers=header) response2 = request1.json()#开始一次次的调用接口
三:关键步骤遍历,只有通过遍历接口的返回值,才能取出来响应的数据
#遍历列表的数据 for value in response2['content']['data']: #print(type(value)) #print(1) #不能使print(response2['content']['data']['userNick']) #print(value['userNick']) if userid==value['userId']: #raise Exception('找到了'+value['userNick']) print('当前的页数为',currentpage+1) print(value['userNick']+'的详细数据为',json.dumps(value,sort_keys=2,indent=True,ensure_ascii=False)) #不能使用json.dumps(value,sort_keys=2,indent=True)因为json格式的字符串对于中文显示如果加上ensure_ascii=False那就可以使原有的语言文字 userId.append(value['userId'])#利用方法存入列表中,定义一个空列表 currentpage = currentpage+1 print('用户的个数为:',len(userId))
四:从取到的值判断是否有重复数据
for value2 in userId: #用count(value)方法判断是否有重复 if userId.count(value2)!=1:#利用count查看列表中过是否有重复数据 print("测试失败,有重复数据出现") print('出现的次数',userId.count(value2)) print('出现的索引位置',userId.index(value2)) if userId.index(value2)<=1: print('重复的那一页为第一页') elif userId.index(value2)%2==0: print('重复出现的那一页为',(userId.index(value2)/2)+1) else: print('重复的那一页为',(userId.index(value2)+1)/2) #print('重复的那一页页数为',userId.index(value2)/17) break
下面是完整代码
# coding:utf-8 import requests import json currentpage = 0 userid = 'XXXXXX' #匹配的用户ID将要执行下一步操作的 userId = [] #用来存在用户id的值的列表,判断是否重复,用userId.count(value)的方法 url = 'http://URLdizhi/dsd/selectdsadAll' para = {"size":2, "page":0} header = {'content-type':'application/json; charset=utf-8'} request = requests.post(url,params=para,headers=header) print(request.text) response = request.json() total = response['content']['page']['total'] pageSize = response['content']['page']['pageSize'] if total % 2 == 0: pagesum = total/pageSize else: pagesum = (total+1)/pageSize while currentpage < pagesum: #print(1) para = {"size":2, "page":currentpage}#是指当前页,只不过先要知道最后页 request1 = requests.post(url,params=para,headers=header) response2 = request1.json() #遍历列表的数据 for value in response2['content']['data']: #print(type(value)) #print(1) #不能使print(response2['content']['data']['userNick']) #print(value['userNick']) if userid==value['userId']: #raise Exception('找到了'+value['userNick']) print('当前的页数为',currentpage+1) print(value['userNick']+'的详细数据为',json.dumps(value,sort_keys=2,indent=True,ensure_ascii=False)) #不能使用json.dumps(value,sort_keys=2,indent=True)因为json格式的字符串对于中文显示如果加上ensure_ascii=False那就可以使原有的语言文字 userId.append(value['userId']) currentpage = currentpage+1 print('用户的个数为:',len(userId)) for value2 in userId: #用count(value)方法判断是否有重复 if userId.count(value2)!=1: print("测试失败,有重复数据出现") print('出现的次数',userId.count(value2)) print('出现的索引位置',userId.index(value2)) if userId.index(value2)<=1: print('重复的那一页为第一页') elif userId.index(value2)%2==0: print('重复出现的那一页为',(userId.index(value2)/2)+1) else: print('重复的那一页为',(userId.index(value2)+1)/2) #print('重复的那一页页数为',userId.index(value2)/17) break