3333333
二、软件测试实例
1、给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例
IP的格式:(1~255).(0~255).(0~255).(0~255)
方法一:基于对字符串的处理
public static voidmain(String[] args){ Scanner scanner =newScanner(System.in); String ipStr = scanner.next();booleanisIpLegal = isIpLegal(ipStr);if(isIpLegal) { System.out.println(ipStr +" 合法");
}
else{
System.out.println(ipStr +" 非法");
}
}
public static booleanisIpLegal(String str){
//检查ip是否为空
if(str ==null){
return false;
}
//检查ip长度,最短为:x.x.x.x(7位),最长为:xxx.xxx.xxx.xxx(15位)
if(str.length() < 7 || str.length() > 15){
return false;
}
//对输入字符串的首末字符判断,如果是"."则是非法IP
if(str.charAt(0) =='.'|| str.charAt(str.length()-1) =='.'){
return false;
}
//按"."分割字符串,并判断分割出来的个数,如果不是4个,则是非法IP
String[] arr = str.split("\\.");if(arr.length != 4){return false; } //对分割出来的每个字符串进行单独判断
for(inti = 0; i < arr.length; i++){
//如果每个字符串不是一位字符,且以'0'开头,则是非法的IP,如:01.002.03.004
if(arr[i].length() > 1 && arr[i].charAt(0) =='0'){
return false;
} //对每个字符串的每个字符进行逐一判断,如果不是数字0-9,则是非法的IPfor(intj = 0; j < arr[i].length(); j++){if(arr[i].charAt(j) <'0'|| arr[i].charAt(j) >'9'){return false; } } }
//对拆分的每一个字符串进行转换成数字,并判断是否在0~255
for(inti = 0; i < arr.length; i++){inttemp = Integer.parseInt(arr[i]);if(i == 0){if(temp < 1 || temp > 255){return false; } }else{if(temp < 0 || temp > 255){return false; } } }return true; }
方法二:正则表达式
public static` `void` `main(String[] args) {``Scanner scanner = ``new` `Scanner(System.in);``String ipStr = scanner.next();``booleanisIpLegal = isIpLegal(ipStr);``if``(isIpLegal) {` System.out.println(ipStr +" 合法");
}else{ System.out.println(ipStr +" 非法"); } }
public static booleanisIpLegal(String ipStr) { String ipRegEx ="^([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))(\\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))){3}$"; Pattern pattern = Pattern.compile(ipRegEx); Matcher matcher = pattern.matcher(ipStr);if(matcher.matches()) {return true; } else{return false; } }
测试用例:
等价类划分:
有效可用的IP地址
A类
1.0.0.0 -126.255.255.254
A私有
10.0.0.0 -10.255.255.254
B类
128.0.0.0 -191.255.255.254
B私有
172.16.0.0 -172.31.255.254
C类
192.0.0.0 -223.255.255.254
C私有
192.168.0.0-192.168.255.254
windows自动分配
169.254.0.0-169.254.255.254
有效但不可用的IP地址
D
224.0.0.0 -239.255.255.254
E
240.0.0.0 -255.255.255.254
全网
0.x.x.x, x.x.x.0
广播
x.x.x.255
回环127.0.0.0 -127.255.255.254 输入结果64.11.22.33有效可用10.12.13.14有效可用,不能直接访问公网151.123.234.56有效可用172.20.123.56有效可用,不能直接访问公网192.127.35.65有效可用192.168.128.128有效可用,不能直接访问公网169.254.15.200有效可用,不能直接访问公网224.1.2.3有效不可用,超过有效范围(D类)250.11.22.33有效不可用,超过有效范围(E类)0.200.3.4有效不可用,全网地址64.11.22.0有效不可用,全网地址10.12.13.255有效不可用,广播地址127.50.60.70有效不可用,回环地址
ipv4地址的格式:(1~255).(0 ~255).(0 ~255).(0 ~255)
1.正则表达式
import re
def check_ip(one_str):
compile_ip = re.compile('^(([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$')
if compile_ip.match(one_str):
return True
else:
return False
if __name__ == '__main__':
ip_list = ['', '172.31.137.251', '100.10.0.1000', '1.1.1.1', '12.23.13', 'aa.12.1.2', '12345678', '289043jdhjkbh']
for one_str in ip_list:
if check_ip(one_str):
print('{0} is a legal ip address!'.format(one_str))
else:
print('{0} is not a legal ip address!'.format(one_str))
2.字符串
def check_ip(one_str):
if '.' not in one_str:
return False
elif one_str.count('.') != 3:
return False
else:
flag = True
one_list = one_str.split('.')
for one in one_list:
try:
one_num = int(one)
if one_num >= 0 and one_num <= 255:
pass
else:
flag = False
except:
flag = False
return flag
if __name__ == '__main__':
ip_list = ['', '172.31.137.251', '100.10.0.1000', '1.1.1.1', '12.23.13', 'aa.12.1.2', '12345678', '289043jdhjkbh']
for one_str in ip_list:
if check_ip(one_str): #字符串方法
print('{0} is a legal ip address!'.format(one_str))
else:
print('{0} is not a legal ip address!'.format(one_str))
测试用例
有效可用的IP地址
A类1.0.0.0 ~126.255.255.254
A私有10.0.0.0 -10.255.255.254
B类128.0.0.0 -191.255.255.254
B私有172.16.0.0 -172.31.255.254
C类192.0.0.0 -223.255.255.254
C私有192.168.0.0-192.168.255.254
windows自动分配169.254.0.0-169.254.255.254
有效但不可用的IP地址
D 224.0.0.0 -239.255.255.254
E 240.0.0.0 -255.255.255.254
全网0.x.x.x, x.x.x.0
广播x.x.x.255
回环127.0.0.0 -127.255.255.254
输入结果
64.11.22.33有效可用
10.12.13.14有效可用,不能直接访问公网
151.123.234.56有效可用
172.20.123.56有效可用,不能直接访问公网
192.127.35.65有效可用
192.168.128.128有效可用,不能直接访问公网
169.254.15.200有效可用,不能直接访问公网
224.1.2.3有效不可用,超过有效范围(D类)
250.11.22.33有效不可用,超过有效范围(E类)
0.200.3.4有效不可用,全网地址
64.11.22.0有效不可用,全网地址
10.12.13.255有效不可用,广播地址
127.50.60.70有效不可用,回环地址
2、请进行测试用例设计:一串数字,闰年的判别
判断闰年的标准是:能整除4且不能整除100,能整除400。设定合法的年份为1-9999
public Test2 { public static void main(String[] args) { Scanner in = new Scanner (System.in); int year=in.nextInt(); if(year<=0||year>9999) {
System.out.println("请输入正确的年份");
} if((year%4==0&&year%100!=0)||year%400==0) {
System.out.println("闰年");
}else
{
System.out.println("不是闰年");
}
}
}
测试用例:
测试用例
输入
预期输出
被 4 整除, 但是不被100 整除的年份
2008
闰年
被 4 整除, 同时被100 整除的年份,且被 400 整除的年份
2000
闰年
被 4 整除, 同时被100 整除的年份,但是不被400 整除的年份
1900
不是闰年
偶数, 不被4 整除的年份
2022
不是闰年
奇数年份
1999
不是闰年
年份大于9999
10000
请输入正确的年份
年份小于0
0
请输入正确的年份
闰年的判断:(设置合法的年份为1-9999)
普通年—能被4整除,不能被100整除
世纪年—能被400整除
Python代码实现
while True:
year = int(input("请输入一个年份:"))
if year % 4 == 0 and year % 100 != 0:
print("%s是闰年" % year)
elif year % 400 == 0:
print("%s是闰年" % year)
else:
print("%s不是闰年" % year)
测试用例编写:
能被4整除,能被100整除,能被400整除——2000——是闰年
能被4整除,不能被100整除——2020——是闰年
能被4整除,能被100整除——1000——不是闰年
能被4整除,能被100整除,不能被400整除——1900——不是闰年
偶数、不被4整除——2022——不是闰年
奇数年份——1999——不是闰年
年份大于9999——10000——请输入正确的年份
年份小于0——0——请输入正确的年份
3、请你说一说简单用户界面登陆过程都需要做哪些分析
一、功能测试
1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。
2.输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。
3.登录成功后能否能否跳转到正确的页面
4.用户名和密码,如果太短或者太长,应该怎么处理
5.用户名和密码,中有特殊字符(比如空格),和其他非英文的情况
6.记住用户名的功能
7.登陆失败后,不能记录密码的功能
8.用户名和密码前后有空格的处理
9.密码是否非明文显示显示,使用星号圆点等符号代替。
10.牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使 用者),刷新或换一个按钮是否好用
11.登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确
12.输入密码的时候,大写键盘开启的时候要有提示信息。
13.什么都不输入,点击提交按钮,检查提示信息。
二、界面测试
1.布局是否合理,testbox和按钮是否整齐。
2.testbox和按钮的长度,高度是否复合要求。
3. 界面的设计风格是否与UI的设计风格统一。
4. 界面中的文字简洁易懂,没有错别字。
三、性能测试
1.打开登录页面,需要的时间是否在需求要求的时间内。
2.输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。
3.模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。
四、安全性测试
1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。
2.用户名和密码是否通过加密的方式,发送给Web服务器。
3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。
4.用户名和密码的输入框,应该屏蔽SQL注入攻击。
5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)。
6.防止暴力破解,检测是否有错误登陆的次数限制。
7. 是否支持多用户在同一机器上登录。
8. 同一用户能否在多台机器上登录。
五、可用性测试
1. 是否可以全用键盘操作,是否有快捷键。
2. 输入用户名,密码后按回车,是否可以登陆。
3. 输入框能否可以以Tab键切换。
六、兼容性测试
1.不同浏览器下能否显示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)。
2.同种浏览器不同版本下能否显示正常且功能正常。
2.不同的平台是否能正常工作,比如Windows, Mac。
3.移动设备上是否正常工作,比如Iphone, Andriod。
4.不同的分辨率下显示是否正常。
七、本地化测试
1. 不同语言环境下,页面的显示是否正确。
4、请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示
功能:
1.每个摄像头都能抓拍车牌;
2.每个摄像头抓拍到的车牌能正常交给系统处理;
3.系统能够正确识别车牌;
4.系统能够将识别出的车牌上传;
5.上传至网络的车牌能够正常展示出来;
一、功能测试
1.使用正常的车牌,保持车牌静止,检查每个摄像头是否能抓拍车牌;
2.使用类似非车牌的写有字的纸板,检查每个摄像头是否抓拍;
3.使用正常的车牌,保持车牌较高速移动,检查每个摄像头是否能抓拍车牌;
4.在多种情况下检查每个摄像头抓拍到的车牌能否正常交给系统处理,如临时断电、断网后能否正常将数据交给系统;
5.使用抓拍到的正常的车牌,交由系统处理,检查系统能否识别车牌;
6.使用非车牌的其他图片,交由系统处理,检查系统能否识别;
7.在多种情况下检查系统能否将正常识别出的车牌进行上传,如临时断电、断网后未上传数据是否能继续上传;
8.构造非车牌的其他内容的数据,检查系统能否将异常内容进行上传;
9.检查上传至网络的车牌能否正常展示出来;
10.上传非车牌的其他内容的数据,检查能否正常显示出来。
二、性能测试
1.同时向一个摄像头展示多个静止的车牌,检查摄像头能否抓拍到多个车牌;
2.同时向一个摄像头展示多个较高速运动的车牌,检查摄像头能否抓拍到多个车牌;
3.抓拍后,检查系统识别车牌的时间是否在需求要求的时间内;
4.模拟大量抓拍照片同时交由系统处理,检查一定压力下系统能否正常识别车牌;
5.模拟大量车牌同时上传,检查一定压力下能否上传成功。
三、安全性测试
1.检查是否能够通过给车牌加装饰物等方法,使摄像头无法抓拍或抓拍后系统无法正常识别车牌。
5、请你对吃鸡游戏进行压力测试
一.首先明确需要测试压力的内容:
1.游戏服务器硬件
a.硬盘I/o
b.内存
c.CPU
2.网络压力
a.长连接
a1.最大连接数
a2.流量(内网、外网、进、出)
b.长连接短周期(类似Http的TCP应用,这个比较特殊的一个需求,专门针对LoginAgent)
b1.每秒建立的连接数
b2.实际处理能力
3.数据库
a.每秒事务数
b.每秒锁等待数
c.平均延时(ms)
d.CPU暂用
4.多线程的最优线程数
a.数据库执行的多线程
b.多连接处理
二.Windows Server环境测试方式
1.服务器性能监测
使用Server自带的性能监测器设置各个进程的监测参数。Window的这个自动工具做的相当强大。大家自己摸一摸基本就会用了。每个参数都由详细的说明。
2.案例设计注意
a.对于数据库的性能测试上,现在由于所有的游戏服务器构架在DB前面都有一个实现DB缓冲功能的进程,以减少数据库频繁的读写操作。所以其实数据库的读是一个轻量级的数量;而数据库的写操作是一个周期性能过程。案例设计一定要能够驱动这种周期性能过程。比如我们游戏的战斗,导致游戏玩家数据的改变,或驱动所有在线玩家数据的周期性存储。
b.选择具有代表性,并且最频繁的游戏操作。用于进行最高用户在线的各种性能指标采集。如,开枪、道具拾取、道具使用、移动、聊天
c.聊天性能测试
广播聊天是最为考验游戏信息发送能力的功能。通过进行全局广播的压力测试。我们可以获取服务器进程发送信息到客户端的最高承载量。进而可以对我们的各种广播功能进行一个预估和频率限制。
d.同屏玩家的移动测试
移动+广播。这两种信息,基本是网络游戏流量的70-80%左右。同屏玩家数量,将会增加各种数据的广播需求,非常影响游戏性能。所以同屏的移动测试也是广播测试的一个必要环节。需要根据实际结果进行适当的优化。
e.大量玩家同时登录测试
玩家登录时,有大量的信息需要进行分配和初始化;同时也有大量的数据需要下传客户端。服务器需要进行大量的TCP连接建立。所以是一个比较关键的过程。这个测试案例是一个比较特殊,但是运营是肯定会碰到的案例。
f.由于线程池处理事务,随着事务的时耗,存在一个最优线程数的问题。过多的线程反而会降低服务器效率
3.细节问题
a.进行测试需要仔细思考客户端性能影响服务器最后表现的可能性。比如
a1.模拟客户端的性能无法有效处理服务器返回信息,可能就导致服务器发送的信息缓存在服务器系统缓存,从而表现出服务器内存不断增加。表现为服务器发送能力不足,其实可能根本就是客户端的性能问题
a2.客户端性能问题,导致发起的请求数过少,从而导致单位时间内服务器处理的请求过少。表现为服务器性能不足,其实根本就是客户端的请求能力不足。
b.网络带宽导致最后表现不足
b1.确认服务器的各个网卡,以及相互的带宽。不然可能因为相互带宽,导致服务器对于客户端请求的处理延时。表现为服务器卡机
b2.客户端模拟多个玩家,比如1000个玩家。而客户端的网卡或者客户端与服务器之间的中转服务器带宽过小,导致服务器数据发送不出,内存不断增加。表现为服务器发送能力不足,其实是中间带宽问题。
c.debug i/o导致服务器性能下降
c1.进行性能测试,一定要取消debug用的同步的i/o.比如我们服务器的debuginternalLog.同步i/o是非常影响性能的,特别在压力测试下可能导致每秒上千上万甚至几十万次的执行。一处的文件写入操作就可以导致几十万次的处理能力变成几千次的处理能力。
c2.客户端避免进行阻塞操作导致模拟多用户性能下降,导致服务器表现性能下降
d.流量需要区分内网网
内、外网流量在游戏正式运行时是完全分开的。价格也是完全不同的。一个千M的外网是一个无法想象的运营成本,而kmbps/s现在已经是一个可以接受的代价。游戏进程需要进行不同网卡的配置和绑定。确定内外网流量。
6、请你根据微信登录界面设计测试用例
一、功能测试
1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。
2.输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。
3.登录成功后能否能否跳转到正确的页面
4.检查能否选择不同登录方式进行登录,如使用手机号登录、使用微信号登录或扫码登录。
5.记住用户名的功能
6.登陆失败后,不能记录密码的功能
7.密码是否非明文显示显示,使用星号圆点等符号代替。
8.有验证码时,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色、刷新或换一个按钮是否好用
9.登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确
10.输入密码的时候,大写键盘开启的时候要有提示信息。
11.什么都不输入,点击提交按钮,检查提示信息。
二、界面测试
1.布局是否合理,testbox和按钮是否整齐。
2.testbox和按钮的长度,高度是否复合要求。
3. 界面的设计风格是否与UI的设计风格统一。
4. 界面中的文字简洁易懂,没有错别字。
三、性能测试
1.打开登录页面,需要的时间是否在需求要求的时间内。
2.输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。
3.模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。
四、安全性测试
1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。
2.用户名和密码是否通过加密的方式,发送给Web服务器。
3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。
4.用户名和密码的输入框,应该屏蔽SQL注入攻击。
5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)。
6.防止暴力破解,检测是否有错误登陆的次数限制。
7. 是否支持多用户在同一机器上登录。
8. 同一用户能否在多台机器上登录。
五、兼容性测试
1.不同移动平台或PC环境下下能否显示正常且功能正常
2.同种平台下不同微信版本下能否显示正常且功能正常。
3.不同的分辨率下显示是否正常。
七、本地化测试
1. 不同语言环境下,页面的显示是否正确。
7、请你对朋友圈点赞功能进行测试
【UI】
①、点击操作栏,是否正常弹出气泡,是否正常收回、是否流畅
②、样式是否与需求保持一致
③、未赞时,点击【点赞】,样式变为已赞
④、已赞时,点击【取消】,样式变为未赞
【功能】
①、给某一朋友的朋友圈进行点赞(检查接口)
>>点赞数+1,点赞栏显示具体点赞用户的昵称
>>被赞人的消息中心新增一条点赞消息,消息体显示是否正常
>>共同好友视角,点赞栏显示该用户昵称
>>非共同好友视角,点赞栏不显示该用户昵称
>>点击点赞栏昵称跳转至该用户用户信息页面
>>数据库写入是否正常
②、多人给某一朋友的朋友圈进行点赞
>>点赞数+N。被赞人的消息中心收到多条点赞信息,消息体是否显示正常
>>自己已赞过该朋友圈,N个点赞中,有M个是共同好友,自己的消息中心收到M条点赞消息
>>自己未赞过该朋友圈,N个点赞中,有M个是共同好友,自己的消息中心不收到点赞消息
>>自己已赞过该朋友圈,后取消点赞,自己的消息中心不再收到来自该条朋友圈的点赞消息
>>点赞栏显示N个用户的昵称,并用顿号分割,且按照点赞时间降序排列
>>N个用户全部取消赞后,是否同步
>>数据库写入是否正常
②、给自己的朋友圈进行点赞(检查接口)
>>点赞数+1,自己不收到信息
>>点赞栏显示自己的昵称
④、取消点赞
>>点赞数-1,点赞栏该用户的昵称消失,昵称展示左移
>>被赞人的消息中心不会发送取消赞消息
⑤、反复点赞:点赞-->取消点赞-->点赞
>>点赞数+1,点赞栏正常展示用户昵称,不会重复显示
>>消息中心不会重新发送点赞通知
⑥、朋友圈下拉刷新,点赞栏刷新(接口)
⑦、消息中心加载(分页加载是否正常)
⑧、从消息中心进入朋友圈详情
>>点赞栏显示的是用户头像
>>操作点赞、取消赞、点击用户头像等操作
⑨、查看别人的朋友圈,点开大图
>>已赞过,左下角已赞样式+文字
>>未赞,左下角未赞样式+文字
>>点赞/取消点赞操作,右下角点赞数+1/-1
>>各个视角点赞数同步
【异常】
①、给某一朋友的朋友圈点赞后,昵称变更,点赞栏的昵称是否同步变更
②、点赞人数过多时,点赞栏的昵称最多展示多少,超过如何展示
③、昵称中含有特殊字符时,如<,'等时,是否展示异常
④、弱网时,反复点击点赞按钮,数据库是否有redis控制(事务)
⑤、当前页面,朋友圈已被删除,点击【点赞】或【取消赞】,客户端是否合理反馈
⑥、模拟弱网,是否正常点赞,响应时间
⑦、断网,点赞
【兼容】
①、android、ios
②、不同android机型、分辨率、系统兼容
【压力】
①、多人点赞边界,检查一条朋友圈最多可以有多少点赞(接口模拟),手动模拟
②、模拟多人同时点赞
8.如果做一个杯子的检测,你如何测试
1.杯子特性:
(1)杯子的容量:能装多少升水,空杯,半杯,满杯
(2)杯子的型状:圆型,上面口大,下面小。
(3)杯子的材料:纸杯
(4)杯子的抗摔能力:风吹是否会倒,摔一次是否会摔坏,摔多次是否会摔坏 (5)杯子的耐温性:装冷水,冰水,热水
2.GUI测试:
(1)广告内容与图案碰水是否会掉色
(2)广告内容与图案是否正当 ,是否吸引人(广告嘛),赏心悦目;
(3)广告内容与图案是否轻易剥落
三影响范围:
1.可用性:
(1)装进液体多久后会漏水
(2)装进热水多久后可以变温,装进冰多久后可以融化
2.安全性:
(1)装进不同液体,是否会有化学反应。比如:可乐,咖啡等饮料
(2)装进热水杯子是不是会变型和异味
3.性能:
(1)不同人群是否能适合杯子的型状,包括握杯的感觉和喝水的感觉
9.如何对一个页面进行测试
1、链接测试
链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。
链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。
2、表单测试
当用户给Web应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。
3、Cookies测试
Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。
如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响等。
4、设计语言测试
Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如Java、JavaScript、 ActiveX、VBScript或Perl等也要进行验证。
5、数据库测试
在Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。
在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。
10.如何对水壶进行测试
(同快手对水杯的测试)
1.功能
(1)水倒水壶容量的一半
(2)水倒规定的安全线
(4)水壶容量刻度与其他水壶一致
(5)盖子拧紧水倒不出来
(6)烫手验证
2.性能
(1)使用最大次数或时间
(2)掉地上不易损坏
(3)盖子拧到什么程度水倒不出来
(4)保温时间长
(5)壶的耐热性
(6)壶的耐寒性
(7)长时间放置水不会漏
(8)壶上放置重物达到什么程度壶会被损坏
3.界面
(1)外观完整、美观
(2)大小与设计一样(高、宽、容量、直径)
(3)拿着舒服
(4)材质与设计一样
(5)壶上的图案掉落
(6)图案遇水溶解
4.安全
(1)壶使用的材质毒或细菌的验证
(2)高温材质释放毒性
(3)低温材质释放毒性
5.易用性
(1)倒水方便
(2)喝水方便
(3)携带方便
(4)使用简单,容易操作
(5)防滑措施
6.兼容性
(1)壶能够容纳果汁、白水、酒精、汽油等。
7.震动测试
(1)壶加包装(有填充物),六面震动,检查产品是否能应对铁路/公路/航空运输。
8.可移植性
(1)壶在不同地方、温度环境下都可以正常使用。
11*如何对淘宝搜索框进行测试
目录
功能测试
性能测试
界面/易用性
兼容性
安全性
功能测试
1输入关键字,查看:返回结果是否准确,返回的文本长度需限制
1.1输入可查到结果的正常关键字、词、语句,检索到的内容、链接正确性;
1.2输入不可查到结果的关键字、词、语句;
1.3输入一些特殊的内容,如空、特殊符、标点符、极限值等,可引入等价类划分的方法等;
2结果显示:标题,卖家,销售量,单行/多行,是否有图片
3结果排序:价格 销量 评价 综合
4返回结果庞大时,限制第一页的现实量,需支持翻页
5多选项搜索:关键字 品牌 产地 价格区间 是否天猫 是否全国购
6是否支持模糊搜索,支持通配符的查询
7网速慢的情况下的搜索
8搜索结果为空的情况
9未登录情况和登录情况下的搜索(登录情况下 存储用户搜索的关键字/搜索习惯)
性能测试
1压力测试:在不同发用户数压力下的表现(评价指标如响应时间等)
2负载测试:看极限能承载多大的用户量同时正常使用
3稳定性测试:常规压力下能保持多久持续稳定运行
4内存测试:有无内存泄漏现象
5大数据量测试:如模拟从庞大的海量数据中搜索结果、或搜索出海量的结果后列示出来,看表现如何等等。
界面/易用性
交互界面的设计是否便于、易于使用
1依据不同的查询结果会有相关的人性化提示,查不到时告知?查到时统计条数并告知?有疑似输入条件错误时提示可能正确的输入项等等处理;
2查询出的结果罗列有序,如按点击率或其他排序规则,确保每次查询出的结果位置按规则列示方便定位,显示字体、字号、色彩便于识别等等;
3标题查询、全文检索、模糊查询、容错查询、多关键字组织查询(空格间格开)等实用的检索方式是否正常?
4输入搜索条件的控件风格设计、位置摆放是否醒目便于使用者注意到,有否快照等快捷查看方式等人性化设计?
兼容性
1 WINDOWS/LINUX/UNIX等各类操作系统下及各版本条件下的应用
2 IE/FIREFOX/GOOGLE/360/QQ等各类浏览器下及各版本条件下、各种显示分辨率条件下的应用
3 SQL/ORACLE/DB2/MYSQL等各类数据库存储情况下的兼容性测试
4简体中文、繁体中文、英文等各类语种软件平台下的兼容性测试
5 IPHONE/IPAD、安卓等各类移动应用平台下的兼容性测试
6与各相关的监控程序的兼容性测试,如输入法、杀毒、监控、防火墙等工具同时使用
安全性
1被删除、加密、授权的数据,不允许被SQL注入等攻击方式查出来的,是否有安全控制设计;
2录入一些数据库查询的保留字符,如单引号、%等等,造成查询SQL拼接出的语句产生漏洞,如可以查出所有数据等等,这方面要有一些黑客攻击的思想并引入一些工具和技术,如爬网等。
3通过白盒测试技术,检查一下在程序设计上是否存在安全方面的隐患;
4对涉及国家安全、法律禁止的内容是否进行了相关的过滤和控制;
12.如何对一瓶矿泉水进行测试
测试项目:矿泉水
需求测试:查看使用说明书
界面测试:查看外观
功能度:用水杯装水看漏不漏;水能不能被喝到
安全性:瓶子的材质有没有毒或细菌
可靠性:从不同高度落下的损坏程度
可移植性:再不同的地方、温度等环境下是否都可以正常使用
兼容性:是否能够容纳果汁、白水、酒精、汽油等
易用性:是否烫手、是否有防滑措施、是否方便饮用
用户文档:使用手册是否对的用法、限制、使用条件等有详细描述
疲劳测试:将盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
跌落测试:高度
13、如何测试登陆界面
14.请你说一下jmeter
Jmeter:Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
为什么使用Jmeter:
• 开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
• 支持接口测试,压力测试等多种功能,支持录制回放,入门简单
• 相较于自己编写框架或其他开源工具,有较为完善的UI界面,便于接口调试
• 多平台支持,可在Linux,Windows,Mac上运行
用例生成与导出:
Jmeter的用例格式为jmx文件,实际为xml格式,感兴趣可以学习下自己定制生成想要的jmx文件。
生成原则:
每个功能模块为一个独立的jmx文件。增加可维护性。(尽量不要将一个jmx文件放入太多功能,后期维护成本会很高。)
模块的私有变量保存在模块中,多模块共有的(例如服务器ip端口等)可以考虑存在单独的文件中读取。
接口测试不要放太多线程,毕竟不是做压力测试,意义也不大。
导出方法:
编写测试用例
文件——保存为——确定:
Jmeter运行模式及参数
GUI模式
打开已有的jmx文件(文件——打开)
点击启动按钮运行
命令行模式
依赖:
配置jmeter环境变量(windows下为将${jmeterhome}/bin加入Path变量)
如果未加入环境变量,在执行的时候可以直接给出全路径或在${jmeterhome}/bin下执行
命令:
jmeter -n -t <testplan filename> -l <listener filename>
参数:
-h 帮助 -> 打印出有用的信息并退出
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t 测试文件 -> 要运行的 JMeter 测试脚本文件
-l jtl文件 -> 记录结果的文件
-r 远程执行 -> 启动远程服务
-H 代理主机 -> 设置 JMeter 使用的代理主机
-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
-j 日志文件->设置JMeter日志文件的名称
实例:
JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000
执行步骤:
JMeter 默认去当前目录寻找脚本文件,并把日志记录在当前目录。比如你在 C:\tools\apache-jmeter-2.11\bin 目录下执行以上命令,JMeter 会去该目录下寻找 test.jmx 脚本并把执行结果放在该目录。如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,可以使用绝对路径告诉 JMeter。
执行结果查看:
GUI界面打开聚合报告
在GUI界面创建一个聚合报告
聚合报告界面点击浏览,选中生成的.jtl文件,打开
Jmeter使用
Jmeter创建接口测试计划实例
测试用例应该作为测试的基础内容,而用例的结构可能划分,则是用例的基础(忽然在这里想说一下,用例仅仅是一项测试活动的纲要,有最好,没有的话能保证质量也OK。更不用说用例的格式问题,无论是表格还是导图,其实都无所谓!本文的用例是指jmx文件中的控件结构)。
• 模块名称(测试计划):每个模块独立划分为一个jmx文件(例如登陆模块),最好与接口类一一对应。对应的服务器信息,数据库信息等可存在这里。
• 数据准备:用于测试数据的准备(例如账号信息)。
• 结果查看:用于放置需要查看结果的控件(例如结果树)。
• 线程组:所有的接口测试用例放在线程组下,集中定义线程等信息
• 获取线程对应测试数据:用于获取针对独立线程的测试数据,例如在数据准备里面获得了账号信息,在这里根据账号信息去数据库获取对应的名称,ID等信息。
• 请求名称:用简单控制器为文件夹,内有不同的请求。简单控制器为一个独立的接口,不同请求对应不同的代码路径(例如成功请求,失败请求等)。建议请求名称最好用英文形式,否则后期持续集成或许会出现问题(no zuo no die!)。
• 在每条请求内放置正则匹配(用于应对需要返回值作为下次请求的参数的情况)以及断言。
15.请你进行测试:前端下拉框实现,测试下拉框定位方式
Selenium+Python自动化测试对下拉菜单的定位
1.通过selenium.webdriver.support.ui的Select进行定位
下拉菜单如下图:
定位代码:
from selenium.webdriver.support.ui import Select
# 通过index进行选择
Select(driver.find_element_by_id("gender")).select_by_index(1)
# 通过value进行选择
Select(driver.find_element_by_id("gender")).select_by_value("2")
# 通过选项文字进行选择
Select(driver.find_element_by_id("gender")).select_by_visible_text("Male")
注:Select only works on <select> elements(Select只对<select>标签的下拉菜单有效).
2.定位非<select>标签的下拉菜单
非<select>标签的下拉菜单如下图所示:
定位非<select>标签的下拉菜单中的选项,需要两个步骤,先定位到下拉菜单,再对其中的选项进行定位。
定位代码:
# 先定位到下拉菜单
drop_down = driver.find_element_by_css_selector("div#select2_container > ul")
# 再对下拉菜单中的选项进行选择
drop_down.find_element_by_id("li2_input_2").click()
注:也可以用此方法定位<select>标签的下拉菜单。
16.请你来聊一聊appium断言
17.请你来说一下购物车的测试用例
界面测试
• 界面布局、排版是否合理;文字是否显示清晰;不同卖家的商品是否区分明显。
2.功能测试
未登录时:
• 将商品加入购物车,页面跳转到登录页面,登录成功后购物车数量增加;
• 点击购物车菜单,页面跳转到登录页面。
登录后:
• 所有链接是否跳转正确;
• 商品是否可以成功加入购物车;
• 购物车商品总数是否有限制;
• 商品总数是否正确;
• 全选功能是否好用;
• 删除功能是否好用;
• 填写委托单功能是否好用;
• 委托单中填写的价格是否正确显示;
• 价格总计是否正确;
• 商品文字太长时是否显示完整;
• 店铺名字太长时是否显示完整;
• 创新券商品是否打标;
• 购物车中下架的商品是否有特殊标识;
• 新加入购物车商品排序(添加购物车中存在店铺的商品和购物车中不存在店铺的商品);
• 是否支持TAB、ENTER等快捷键;
• 商品删除后商品总数是否减少;
• 购物车结算功能是否好用。
3.兼容性测试
• 不同浏览器测试。
4.易用性测试
• 删除功能是否有提示;是否有回到顶部的功能;商品过多时结算按钮是否可以浮动显示。
5.性能测试
• 压力测试;并发测试。
18.请你进行一下弱网模拟
参考回答:
方法一:charles弱网模拟
配置参数解析:
bandwidth —— 带宽,即上行、下行数据传输速度
utilisation —— 带宽可用率,大部分modern是100%
round-trip latency —— 第一个请求的时延,单位是ms。
MTU —— 最大传输单元,即TCP包的最大size,可以更真实模拟TCP层,每次传输的分包情况。
Releability —— 指连接的可靠性。这里指的是10kb的可靠率。用于模拟网络不稳定。
Stability —— 连接稳定性,也会影响带宽可用性。用于模拟移动网络,移动网络连接一般不可靠。
使用chrome的webview调试工具,缺点是只适用于web页面的弱网模拟。
方法二:chrome的webview调试工具弱网模拟
使用chrome的webview调试工具,缺点是只适用于web页面的弱网模拟。
具体步骤:
(1)应用打开webview调试功能,具体如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
(2)手机链接电脑,运行APP,进入具体H5页面;
(3)chrome的DevTools中打开Webview:进入chrome://inspect/#devices,会显示已经连接设备,选中待调试webview的inspect
network页面,No throttling下拉框,可以进行网络模拟。
方法三:iOS手机自带Network Link Conditioner 弱网模拟
iPhone手机打开开发者选项,具体参考:
设置-开发者选项 > Network Link Conditioner 入口。
系统已经内置常见网络配置,也可以增加自定义配置。
具体配置参数:
in Bandwidth 下行带宽,即下行网络速度
In packet loss 下行丢包率
in delay 下行延迟,单位ms
out bandwidth 上行带宽
out packet loss 上行丢包率
out delay 上行延迟
DNS delay DNS解析延迟
protocol 支持Any,IPV4、IPV6
interface 支持Any,WI-Fi,cellular(蜂窝网)
19、你写的测试程序是怎么样的,你写过前端、后端程序吗?
开发测试驱动程序一般分为4步:
1,指出需要的新特性。可以记录下来,然后为其编写一个测试。
2,编写特性的概要代码,这样程序就可以运行而没有任何语法等方面的错误,但是测试会失败。看到测试失败是很重要的,这样就能确定测试可以失败。如果测试代码中出现了错误,那么就有可能出现任何情况,测试都会成功,这样等于没测试任何东西。再强调一遍:在试图测试成功之前,先要看到它失败。
3,为特性的概要编写虚设代码,能满足测试要求就行。不用准确的实现功能,只要保证测试可以通过即可。这样一来就可以保证在开发的时候总是通过测试了,(除了第一次测试的时候)甚至在最初实现功能时亦是如此。
4,现在重写(或者重构)代码,这样它就会做自己应该做的事,从而保证测试一直成功。
在编码完成时,应该保证代码处于健康状态--不要遗留下任何测试失败。
写过前段程序。
性最大模块,并推荐测试。