最近测试公司新的app,首页帖子列表逻辑是基于用户行为帖子会发生排序变化的需求,越来越发现还是通过接口测试会很方便的,比如说该帖子打上标签之后会排到后面,这个你通过前端功能去找这个帖子难度太高了,毕竟好多测试环境数据帖子都是从别的库里面同步过来的,这样的话可以通过请求接口遍历response的postid来计算该帖子在第几页,还能测试帖子分页的时候加载是否会有重复等等,这几天边测试也边写了一些还学到一下新东西还是高兴地,记录出来看看谁会用到。
先说说接口返回response的数据结构吧
{
"code":200,
"data":{
"list":[{
"title":"",
"post_id":"",
"publist_id":"",
},{
"title":"",
"post_id":"",
"publist_id":"",
}... ]
}
"last_page":"",
"current_page":""
}
这是典型一个帖子列表的结构展示response['data']['list']是一个列表,每一个元素又是字典格式key对应展示字段,value就是对应数据库的值。
我们把这个接口定义为postlist,想测试这样一个case:用户点击一个职位选择不感兴趣后,该职位一天内就不会返回给用户。
rd做法是,客户端就记录该postid在每次上传的时候都会在request['disable_id']通过列表的形式上传给postlist接口,
我的思路:既然有分页那么request['page']这个参数就要记录你要请求第几页,首先我会请求postlist接口,page=1,动态的拿到resposne['lastpage']的值,这样我才能知道我要请求多少次接口,然后取出来postid进行比对
url=self.url+"postlist"
page=1
#表示不感兴趣的职位id
disable_id=2331311
params={"latlng":"40,116,116.30485",
"city_id":"12",
"tag_id":["27","26","20","1"],
"disable_id":[str(disable_id),],
"page":1
}
#第一次请求接口
request=self.request.post(url=url,params=params)
response=request.json()
#当page小于最大值是就循环
while page<response['data']['last_page']+1:
params={"latlng":"40,116,116.30485",
"city_id":"12",
"tag_id":["27","26","20","1"],
"disable_id":[str(disable_id),],
"page":page
}
request1=self.request.post(url=url,params=params)
response2=request1.json()
#遍历resposne['data']['list']的列表
for list_value in response2['data']['list']:
print "list_vlaue:",list_value['post_id'],type(list_value['post_id'])
#取出post_id和disable_id进行比对
if list_value['post_id']==disable_id:
print "current_page=",page
#通过json.dumps()可以打印出正常json()格式的数据,方便查看,要不然打印的都还是一行,太丑了
print json.dumps(list_value, sort_keys=True, indent=2)
raise Exception("已经找到")
else:
continue
page=page+1
因为写的着急就没有封装,这里面牵扯到一个知识点就是python在多层循环的时候使用break只能跳出break该层的循环python不支持多层跳出,我这里面省事就直接抛出异常了,其实这个太粗暴了,我下一个例子里面修改了一下,当时写的时候没有想到,后来想到了怎么出去了,很简单只要把while里面的判断条件page的值置成不符合判断条件即可,刚开始还想怎么一层一层的跳出去...。也可以在while前面加一个for循环多次遍历看看返回结果,根据不同的测试点吧。测试点2:一般情况职位列表页接口都会分页后返回给客户端,客户端通过request['page']参数来控制,这样就有测试点,接口response中postid是否会重复的问题,这个问题一般服务端都会出现重复的问题(新浪微博貌似是一直都有),这里面就有一个验证的问题了
思路:我的想法呢把每一页的postid都取出来,通过append加到列表里面,遍历列表通过list.count(value)这个方法来判断postid是否有重复。
url=self.url+"postlist"
page=1
postId=[]
params={"latlng":,
"city_id":"",
"tag_id":"",
"page":1
}
request=self.request.post(url=url,params=params)
response=request.json()
while page<response['data']['last_page']+1:
params={"latlng":"40,116,116.30485",
"city_id":"12",
"tag_id":["27","26","20","1"],
"page":page
}
request1=self.request.post(url=url,params=params)
response2=request1.json()
for list_value in response2['data']['list']:
print "list_value:",list_value
postId.append(list_value["post_id"])
page=page+1
print "page:",page
print "len_postid:",len(postId)
print "postid:",postId
for value in postId:
if postId.count(value)!=1:
print "有重复数据,数据为:",value
print "出现的次数",postId.count(value)
print "出现的索引位置",postId.index(value)
print "页数:",postId.index(value)/17
break
主要都差不多,还是熟练的掌握python 列表和字典的常用方法,还是很好用的。这个玩法还是很多的,可以根据不同的测试点完去弄,大概就这些吧,还要去学点别的东西。