前段时间接到了一个特殊的需求:新闻客户端为了提高用户的浏览体验,需要根据不同地区用户的网络环境,推送不同的信息形式(视频、图片、文本等)
测试过程
在测试的过程中,使用了脚本加数据统计的方式,大大加快了测试效率,增加了测试覆盖度。在这里简单介绍一下测试过程。
1、 背景介绍:
a) 针对全国229个城市进行网络环境检测。
b) 针对不同的运营商进行网络环境检测。
c) 每个地区做三个不同网络出口的环境监测,通过请求不同的网络出口ping点完成检测。
d) 为防止网络环境较差带来的网络环境收集丢失,每个地区推送3遍。
汇总一下:
移动 | 联通 | 电信 | |
---|---|---|---|
IDC | 5 | 5 | 6 |
CDN | 32 | 32 | 32 |
公网 | 18 | 18 | 18 |
三倍总数 | 165 | 165 | 168 |
2、 在开发中,为了避免提高采样广泛性,每个用户下发10个ping点,每组运营商下发17个用户将所有ping点下发完毕。后续不再下发。
3、 在测试过程中,基于以上逻辑,于是就写了以下脚本。
f =open("C:\\Users\\ccz\\Downloads\\city_iploc.txt","r")
#f = open("C:\\Users\\ccz\\Desktop\\ids","r")
lines =f.readlines()
citylist= []
datalist= []
forlineinlines:
line=''.join(line).strip('\n')
citylist=line.split(' ')
forsmncin['CMC','CNC','CTC']:
foruserinrange(18):
cityname=citylist[0]
url='http://test.com/get_urls?iploc='+citylist[1]+'&isp='+smnc
printurl
res =requests.get(url)
resobj=json.loads(res.text)
code =resobj['code']
message =resobj['msg']
datalist=resobj['data']
strdatalist=''.join(datalist)
insertdata(url,cityname,smnc,code,message,
strdatalist,len(datalist))
f.close()
从脚本中可以看出,除了验证不同的城市之外,还会把每次的结果进行字段提取和写库操作。
这样,运行完成后,数据库的表是这样的:
有了数据后,就可以验证更多逻辑上的覆盖:
1、验证所有城市均已经下发数据(lendata>0且相等):
2、下发一定量后,不会多下发;下发策略条数计算;下发不同resdata组的倍数关系是否合理。
3、其中数据条数,和开发具体下发的逻辑,能够对的上。
由于不同运营商同一出口存在重复ping点,所以存在倍数关系。倍数关系和开发的下发逻辑,可以对的上。
4、超过下发次数,未下发的次数正好为229*3。且请求url各不相同证明每个城市均没有多余下发。
测试中发现的问题:
1、229个城市中,有一个城市没有下发。
2、由于计数错误,每次会下发多一个。
以上问题在手工测试或者普通的脚本测试,很难发现。同时,对于大量数据下的数据逻辑和统计是否能对的上。在脚本自动化测试也很难覆盖到。大家以后在在测试中结合使用哦~