• 7
  • 6
分享
  • 【测试岗】快来抄模板软件测试超常见实例问题(附带答案)
  • 饭团🍙 2020-11-23 16:19:04 字数 16055 阅读 3168 收藏 6

1.给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例

参考回答:

IP的格式:(1~ 255).(0~ 255).(0~ 255).(0~255)

方法一:基于对字符串的处理

public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String ipStr = scanner.next();
boolean isIpLegal = isIpLegal(ipStr);
if(isIpLegal) {
System.out.println(ipStr + " 合法");
}
else{
System.out.println(ipStr + " 非法");
}
}
public static boolean isIpLegal(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(int i = 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,则是非法的IP
for(int j = 0; j < arr[i].length(); j++){
if (arr[i].charAt(j) < '0' || arr[i].charAt(j) > '9'){
return false;
}
}
}
//对拆分的每一个字符串进行转换成数字,并判断是否在0~255
for(int i = 0; i < arr.length; i++){
int temp = 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();
boolean isIpLegal = isIpLegal(ipStr);
if(isIpLegal) {
System.out.println(ipStr + " 合法");
}
else{
System.out.println(ipStr + " 非法");
}
}
public static boolean isIpLegal(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地址
D224.0.0.0 -239.255.255.254
E240.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有效不可用,全网地址
0.12.13.255 有效不可用,广播地址
127.50.60.70有效不可用,回环地址

2.请进行测试用例设计:一串数字,闰年的判别

参考回答:

判断闰年的标准是:能整除4且不能整除100,能整除400。设定合法的年份为1-9999

public class 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 请输入正确的年份

3.请你说一说简单用户界面登陆过程都需要做哪些分析

参考回答:

1、功能测试

  • 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。

  • 输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。

  • 登录成功后能否能否跳转到正确的页面

  • 用户名和密码,如果太短或者太长,应该怎么处理

  • 用户名和密码,中有特殊字符(比如空格),和其他非英文的情况

  • 记住用户名的功能

  • 登陆失败后,不能记录密码的功能

  • 用户名和密码前后有空格的处理

  • 密码是否非明文显示显示,使用星号圆点等符号代替。

  • 牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使 用者),刷新或换一个按钮是否好用

  • 登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确

  • 输入密码的时候,大写键盘开启的时候要有提示信息。

  • 什么都不输入,点击提交按钮,检查提示信息。

2、界面测试

  • 布局是否合理,testbox和按钮是否整齐。

  • testbox和按钮的长度,高度是否复合要求。

  • 界面的设计风格是否与UI的设计风格统一。

  • 界面中的文字简洁易懂,没有错别字。

3、性能测试

  • 打开登录页面,需要的时间是否在需求要求的时间内。

  • 输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。

  • 模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。

4、安全性测试

  • 登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。

  • 用户名和密码是否通过加密的方式,发送给Web服务器。

  • 用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。

  • 用户名和密码的输入框,应该屏蔽SQL注入攻击。

  • 用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)。

  • 防止暴力破解,检测是否有错误登陆的次数限制。

  • 是否支持多用户在同一机器上登录。

  • 同一用户能否在多台机器上登录。

5、可用性测试

  • 是否可以全用键盘操作,是否有快捷键。

  • 输入用户名,密码后按回车,是否可以登陆。

  • 输入框能否可以以Tab键切换。

6、兼容性测试

  • 不同浏览器下能否显示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)。

  • 同种浏览器不同版本下能否显示正常且功能正常。

  • 不同的平台是否能正常工作,比如Windows, Mac。

  • 移动设备上是否正常工作,比如Iphone, Andriod。

  • 不同的分辨率下显示是否正常。

7、本地化测试

  • 不同语言环境下,页面的显示是否正确。

4.请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示

参考回答:

功能:

  1. 每个摄像头都能抓拍车牌;

  2. 每个摄像头抓拍到的车牌能正常交给系统处理;

  3. 系统能够正确识别车牌;

  4. 系统能够将识别出的车牌上传;

  5. 上传至网络的车牌能够正常展示出来;

一、功能测试

  • 使用正常的车牌,保持车牌静止,检查每个摄像头是否能抓拍车牌;

  • 使用类似非车牌的写有字的纸板,检查每个摄像头是否抓拍;

  • 使用正常的车牌,保持车牌较高速移动,检查每个摄像头是否能抓拍车牌;

  • 在多种情况下检查每个摄像头抓拍到的车牌能否正常交给系统处理,如临时断电、断网后能否正常将数据交给系统;

  • 使用抓拍到的正常的车牌,交由系统处理,检查系统能否识别车牌;

  • 使用非车牌的其他图片,交由系统处理,检查系统能否识别;

  • 在多种情况下检查系统能否将正常识别出的车牌进行上传,如临时断电、断网后未上传数据是否能继续上传;

  • 构造非车牌的其他内容的数据,检查系统能否将异常内容进行上传;

  • 检查上传至网络的车牌能否正常展示出来;

  • 上传非车牌的其他内容的数据,检查能否正常显示出来。

二、性能测试

  • 同时向一个摄像头展示多个静止的车牌,检查摄像头能否抓拍到多个车牌;

  • 同时向一个摄像头展示多个较高速运动的车牌,检查摄像头能否抓拍到多个车牌;

  • 抓拍后,检查系统识别车牌的时间是否在需求要求的时间内;

  • 模拟大量抓拍照片同时交由系统处理,检查一定压力下系统能否正常识别车牌;

  • 模拟大量车牌同时上传,检查一定压力下能否上传成功。

三、安全性测试

  • 检查是否能够通过给车牌加装饰物等方法,使摄像头无法抓拍或抓拍后系统无法正常识别车牌。

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. 是否能在消息列表中显示点赞人的昵称、5.不同手机,系统显示界面如何;

备注;

  1. 可扩展性测试,点赞后是否能发表评论;

  2. 是否在未登录时可查看被点赞的信息。

7.如果做一个杯子的检测,你如何测试(经典)

1、功能

  • 水倒水杯容量的一半

  • 水倒规定的安全线

  • 水杯容量刻度与其他水杯一致

  • 盖子拧紧水倒不出来

  • 烫手验证

2、性能

  • 使用最大次数或时间

  • 掉地上不易损坏

  • 盖子拧到什么程度水倒不出来

  • 保温时间长

  • 杯子的耐热性

  • 杯子的耐寒性

  • 长时间放置水不会漏

  • 杯子上放置重物达到什么程度杯子会被损坏

3、界面

  • 外观完整、美观

  • 大小与设计一样(高、宽、容量、直径)

  • 拿着舒服

  • 材质与设计一样

  • 杯子上的图案掉落

  • 图案遇水溶解

4、安全

  • 杯子使用的材质毒或细菌的验证

  • 高温材质释放毒性

  • 低温材质释放毒性

5、易用性

  • 倒水方便

  • 喝水方便

  • 携带方便

  • 使用简单,容易操作

  • 防滑措施

6、兼容性

  • 杯子能够容纳果汁、白水、酒精、汽油等。

7、震动测试

  • 杯子加包装(有填充物),六面震动,检查产品是否能应对铁路/公路/航空运输。

8、可移植性

  • 杯子在不同地方、温度环境下都可以正常使用。

8.如何对一个页面进行测试

参考回答:

  1. UI测试:页面布局、页面样式检查、控件长度是否够长;显示时,是否会被截断;支持的快捷键,Tab键切换焦点顺序正确性等。

  2. 功能测试:页面上各类控件的测试范围,测试点。结合控件的实际作用来补充检查点: 比如, 密码框是否*显示, 输入是否做trim处理等。

  3. 安全测试:输入特殊字符,sql注入,脚本注入测试。后台验证测试,对于较重要的表单 ,绕过js检验后台是否验证;数据传输是否加密处理,比如, 直接请求转发,地址栏直接显示发送字符串?

  4. 兼容性测试

  5. 性能测试

10.如何对水壶进行测试(同水杯)

参考回答:

1、功能

  • 水倒水壶容量的一半

  • 水倒规定的安全线

  • 水壶容量刻度与其他水壶一致

  • 盖子拧紧水倒不出来

  • 烫手验证

2、性能

  • 使用最大次数或时间

  • 掉地上不易损坏

  • 盖子拧到什么程度水倒不出来

  • 保温时间长

  • 壶的耐热性

  • 壶的耐寒性

  • 长时间放置水不会漏

  • 壶上放置重物达到什么程度壶会被损坏

3、界面

  • 外观完整、美观

  • 大小与设计一样(高、宽、容量、直径)

  • 拿着舒服

  • 材质与设计一样

  • 壶上的图案掉落

  • 图案遇水溶解

4、安全

  • 壶使用的材质毒或细菌的验证

  • 高温材质释放毒性

  • 低温材质释放毒性

5、易用性

  • 倒水方便

  • 喝水方便

  • 携带方便

  • 使用简单,容易操作

  • 防滑措施

6、兼容性

  • 壶能够容纳果汁、白水、酒精、汽油等。

7、震动测试

  • 壶加包装(有填充物),六面震动,检查产品是否能应对铁路/公路/航空运输。

8、可移植性

  • 壶在不同地方、温度环境下都可以正常使用。

10.如何对淘宝搜索框进行测试

参考回答:

一、功能测试

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.对涉及国家安全、法律禁止的内容是否进行了相关的过滤和控制;

11.如何对一瓶矿泉水进行测试

参考回答:

  • 界面测试:查看外观是否美观

  • 功能度:查看水瓶漏不漏;瓶中水能不能被喝到

  • 安全性:瓶子的材质有没有毒或细菌

  • 可靠性:从不同高度落下的损坏程度

  • 可移植性:再不同的地方、温度等环境下是否都可以正常使用

  • 兼容性:是否能够容纳果汁、白水、酒精、汽油等

  • 易用性:是否烫手、是否有防滑措施、是否方便饮用

  • 用户文档:使用手册是否对的用法、限制、使用条件等有详细描述

  • 疲劳测试:将盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等

  • 压力测试:用根针并在针上面不断加重量,看压强多大时会穿透

  • 跌落测试:测试在何种高度跌落会破坏水瓶

12.如何测试登陆界面

参考回答:

1、功能测试

  • 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。

  • 输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。

  • 登录成功后能否能否跳转到正确的页面

  • 用户名和密码,如果太短或者太长,应该怎么处理

  • 用户名和密码,中有特殊字符(比如空格),和其他非英文的情况

  • 记住用户名的功能

  • 登陆失败后,不能记录密码的功能

  • 用户名和密码前后有空格的处理

  • 密码是否非明文显示显示,使用星号圆点等符号代替。

  • 牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使 用者),刷新或换一个按钮是否好用

  • 登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确

  • 输入密码的时候,大写键盘开启的时候要有提示信息。

  • 什么都不输入,点击提交按钮,检查提示信息。

2、界面测试

  • 布局是否合理,testbox和按钮是否整齐。

  • testbox和按钮的长度,高度是否复合要求。

  • 界面的设计风格是否与UI的设计风格统一。

  • 界面中的文字简洁易懂,没有错别字。

3、性能测试

  • 打开登录页面,需要的时间是否在需求要求的时间内。

  • 输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。

  • 模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。

4、安全性测试

  • 登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。

  • 用户名和密码是否通过加密的方式,发送给Web服务器。

  • 用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。

  • 用户名和密码的输入框,应该屏蔽SQL注入攻击。

  • 用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)。

  • 防止暴力破解,检测是否有错误登陆的次数限制。

  • 是否支持多用户在同一机器上登录。

  • 同一用户能否在多台机器上登录。

5、可用性测试

  • 是否可以全用键盘操作,是否有快捷键。

  • 输入用户名,密码后按回车,是否可以登陆。

  • 输入框能否可以以Tab键切换。

6、兼容性测试

  • 不同浏览器下能否显示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)。

  • 同种浏览器不同版本下能否显示正常且功能正常。

  • 不同的平台是否能正常工作,比如Windows, Mac。

  • 移动设备上是否正常工作,比如Iphone, Andriod。

  • 不同的分辨率下显示是否正常。

7.本地化测试

  • 不同语言环境下,页面的显示是否正确。

13.请你说一下jmeter

参考回答:

Jmeter:Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

14.为什么使用Jmeter:

  • 开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件

  • 支持接口测试,压力测试等多种功能,支持录制回放,入门简单

  • 相较于自己编写框架或其他开源工具,有较为完善的UI界面,便于接口调试

  • 多平台支持,可在Linux,Windows,Mac上运行

1、用例生成与导出:

  • Jmeter的用例格式为jmx文件,实际为xml格式,感兴趣可以学习下自己定制生成想要的jmx文件。

2、生成原则:

  • 每个功能模块为一个独立的jmx文件。增加可维护性。(尽量不要将一个jmx文件放入太多功能,后期维护成本会很高。)

  • 模块的私有变量保存在模块中,多模块共有的(例如服务器ip端口等)可以考虑存在单独的文件中读取。

  • 接口测试不要放太多线程,毕竟不是做压力测试,意义也不大。

3、导出方法:

  • 编写测试用例

  • 文件——保存为——确定:

图1.png

4、Jmeter运行模式及参数

GUI模式

打开已有的jmx文件(文件——打开)

点击启动按钮运行

命令行模式

依赖:

配置jmeter环境变量(windows下为将j m e t e r h o m e / b i n 加 入 P a t h 变 量 ) 如 果 未 加 入 环 境 变 量 , 在 执 行 的 时 候 可 以 直 接 给 出 全 路 径 或 在 {jmeterhome}/bin加入Path变量) 如果未加入环境变量,在执行的时候可以直接给出全路径或在jmeterhome/bin加入Path变量)如果未加入环境变量,在执行的时候可以直接给出全路径或在{jmeterhome}/bin下执行

命令:

jmeter -n -t -l

参数:

-h 帮助 -> 打印出有用的信息并退出

-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter

-t 测试文件 -> 要运行的 JMeter 测试脚本文件

-l jtl文件 -> 记录结果的文件

-r 远程执行 -> 启动远程服务

-H 代理主机 -> 设置 JMeter 使用的代理主机

-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

-j 日志文件->设置JMeter日志文件的名称

5、实例:

JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

6、执行步骤:

JMeter 默认去当前目录寻找脚本文件,并把日志记录在当前目录。比如你在 C:\tools\apache-jmeter-2.11\bin 目录下执行以上命令,JMeter 会去该目录下寻找 test.jmx 脚本并把执行结果放在该目录。如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,可以使用绝对路径告诉 JMeter。

7、执行结果查看:

GUI界面打开聚合报告

在GUI界面创建一个聚合报告

聚合报告界面点击浏览,选中生成的.jtl文件,打开

图2.png

8、Jmeter使用

Jmeter创建接口测试计划实例

测试用例应该作为测试的基础内容,而用例的结构可能划分,则是用例的基础(忽然在这里想说一下,用例仅仅是一项测试活动的纲要,有最好,没有的话能保证质量也OK。更不用说用例的格式问题,无论是表格还是导图,其实都无所谓!本文的用例是指jmx文件中的控件结构)。

图3.png

  • 模块名称(测试计划):每个模块独立划分为一个jmx文件(例如登陆模块),最好与接口类一一对应。对应的服务器信息,数据库信息等可存在这里。

  • 数据准备:用于测试数据的准备(例如账号信息)。

  • 结果查看:用于放置需要查看结果的控件(例如结果树)。

  • 线程组:所有的接口测试用例放在线程组下,集中定义线程等信息

  • 获取线程对应测试数据:用于获取针对独立线程的测试数据,例如在数据准备里面获得了账号信息,在这里根据账号信息去数据库获取对应的名称,ID等信息。

  • 请求名称:用简单控制器为文件夹,内有不同的请求。简单控制器为一个独立的接口,不同请求对应不同的代码路径(例如成功请求,失败请求等)。建议请求名称最好用英文形式,否则后期持续集成或许会出现问题。

  • 在每条请求内放置正则匹配(用于应对需要返回值作为下次请求的参数的情况)以及断言。

15. 请你进行测试:前端下拉框实现,测试下拉框定位方式

参考回答:

Selenium+Python自动化测试对下拉菜单的定位

1、通过selenium.webdriver.support.ui的Select进行定位

下拉菜单如下图:

图4.png

定位代码:

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、定位非标签的下拉菜单

非标签的下拉菜单如下图所示:

图5.png

定位非标签的下拉菜单中的选项,需要两个步骤,先定位到下拉菜单,再对其中的选项进行定位。

定位代码:

# 先定位到下拉菜单
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断言

参考回答:

ppium-unittest单元测试框架中,TestCase 类提供了一些方法来检查并报告故障,如下图 :

图6.png

上面所提供的断言方法(assertRaises(), assertRaisesRegexp()除外)接收 msg 参数,如果指定, 将体作为失败的错误信息。

try:
num = input("Enter a number:")
assert (num == 10), "The number is not 10!"
except AssertionError,msg:
print msg
print ("Sadly, num not equals to 10")

在上面的程序中,运行到的python 的异常与断言。通过 raw_input()方法要求用户输入一个数字,通过 arrsert 判断用户输入的 num 是否等于10 ; 通过 python 的 AssertionError 类型的异常来实捕获这个异常, msg 接收异常信息并打印, 注意, msg 所结构的异常信息是我们自定义的(“The number is not10!”) 。

  • assertEqual(first, second, msg=None):判断 first 和 second 的值是否相等,如果不相等则测试失败,msg 用于定义失败后所抛出的异 常信息。

  • assertNotEqual(first, second, msg=None):测试 first 和 second 不相等,如果相等,则测试失败。

  • assertTure(expr,msg=None)、assertFalse(expr,msg=None):测试 expr 为 Ture(或为 False)

以下为python 2.7 版新增的断言方法:

  • assertIs(first, second, msg=None)、assertIsNot(first, second, msg=None):测试的 first 和 second 是(或 不是)相同的对象。

  • assertIsNone(expr, msg=None)、assertIsNotNone(expr, msg=None):测试 expr 是(或 不是)为 None

  • assertIn(first, second, msg=None)、assertNotIn(first, second, msg=None):测试 first 是(或不是)在 second 中。second 包含是否包含 first 。

  • assertIsInstance(obj, cls, msg=None)、assertNotIsInstance(obj, cls, msg=None):测试 obj 不(或 不是)cls 的一个实例。 (obj 和 cls 可以是一个类或元组) ,要检查他们的类型使用 assertIs(type(obj), cls)。

17.请你来说一下购物车的测试用例

参考回答:

1、界面测试

  • 界面布局、排版是否合理;文字是否显示清晰;不同卖家的商品是否区分明显。

2、功能测试

未登录时:

  • 将商品加入购物车,页面跳转到登录页面,登录成功后购物车数量增加;

  • 点击购物车菜单,页面跳转到登录页面。

登录后:

  • 所有链接是否跳转正确;

  • 商品是否可以成功加入购物车;

  • 购物车商品总数是否有限制;

  • 商品总数是否正确;

  • 全选功能是否好用;

  • 删除功能是否好用;

  • 填写委托单功能是否好用;

  • 委托单中填写的价格是否正确显示;

  • 价格总计是否正确;

  • 商品文字太长时是否显示完整;

  • 店铺名字太长时是否显示完整;

  • 创新券商品是否打标;

  • 购物车中下架的商品是否有特殊标识;

  • 新加入购物车商品排序(添加购物车中存在店铺的商品和购物车中不存在店铺的商品);

  • 是否支持TAB、ENTER等快捷键;

  • 商品删除后商品总数是否减少;

  • 购物车结算功能是否好用。

3、兼容性测试

  • 不同浏览器测试。

4、易用性测试

  • 删除功能是否有提示;是否有回到顶部的功能;商品过多时结算按钮是否可以浮动显示。

5、性能测试

  • 压力测试;并发测试。

18.请你进行一下弱网模拟

参考回答:

方法一:charles弱网模拟

图7.png

图8.png

配置参数解析:

  • bandwidth —— 带宽,即上行、下行数据传输速度

  • utilisation —— 带宽可用率,大部分modern是100%

  • round-trip latency —— 第一个请求的时延,单位是ms。

  • MTU —— 最大传输单元,即TCP包的最大size,可以更真实模拟TCP层,每次传输的分包情况。

  • Releability —— 指连接的可靠性。这里指的是10kb的可靠率。用于模拟网络不稳定。

  • Stability —— 连接稳定性,也会影响带宽可用性。用于模拟移动网络,移动网络连接一般不可靠。

图9.png

使用chrome的webview调试工具,缺点是只适用于web页面的弱网模拟。

方法二:chrome的webview调试工具弱网模拟

使用chrome的webview调试工具,缺点是只适用于web页面的弱网模拟。

具体步骤:

应用打开webview调试功能,具体如下:

if (Build.VERSION.SDK_INT >=
Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • 手机链接电脑,运行APP,进入具体H5页面;

  • 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(蜂窝网)

图10.png

图11.png

图12.png

图13.png


19.你写的测试程序是怎么样的,你写过前端、后端程序吗?

参考回答:

开发测试驱动程序一般分为4步:

  1. 指出需要的新特性。可以记录下来,然后为其编写一个测试。

  2. 编写特性的概要代码,这样程序就可以运行而没有任何语法等方面的错误,但是测试会失败。看到测试失败是很重要的,这样就能确定测试可以失败。如果测试代码中出现了错误,那么就有可能出现任何情况,测试都会成功,这样等于没测试任何东西。再强调一遍:在试图测试成功之前,先要看到它失败。

  3. 为特性的概要编写虚设代码,能满足测试要求就行。不用准确的实现功能,只要保证测试可以通过即可。这样一来就可以保证在开发的时候总是通过测试了,(除了第一次测试的时候)甚至在最初实现功能时亦是如此。

  4. 现在重写(或者重构)代码,这样它就会做自己应该做的事,从而保证测试一直成功。在编码完成时,应该保证代码处于健康状态–不要遗留下任何测试失败。写过前端程序。

20.请问你有没有写过测试脚本,怎么写的?

参考回答:

然后,撰写测试桩与驱动,白盒测试保证代码逻辑中循环和分支都能够走到,黑盒测试保证函数和首先,代码走查结合动态单步跟踪以及观察日志与文件输出,网络、CPU状态。

功能脚本接口正确,输入输出符合设计预期。

对于异常处理,特别是变量的检查需要特别关注,变量在使用前都需要进行检查,是否为空?或者为0?对于文件名和路径必须检查,确认文件是否存在,路径是否可达之后再进行后续操作。

另外,需要考虑所依赖的其他功能脚本以及二进制工具,这些功能性单元应该如何使用,调用后的返回会有哪些情况,对于正常和异常结果,脚本是否能够捕捉到并且作出正确的判断。


作者:职场菜鸟小家洛

原文链接:https://blog.csdn.net/Cjialuo/article/details/109386297#comments_13782989


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 试用期结束之后转正大概是每个测试人都会经历的过程,转正答辩需要先梳理试用期间的一些案例等,形式不限,word,xmind,ppt都可以,重点是文件囊括的内容。其实大部分人对这种好几个人参加的答辩比较紧张,何况又是有很多领导来参加答辩。不过现在回头想想,转正答辩不过是走个形式,试用期间的努力大家都有目共睹。不过,还是要好好准备答辩材料的,毕竟出于个人考虑,答辩内容也是对自己试用期的工作做一个总结和反思的过程。接下来简单介绍下文件准备的要点。文件框架:1、个人介绍 2、工作业绩回顾 3、下阶段工作规划 4、对行业认知 5、对公司的建议我的展示:工作业绩回顾主...
            0 0 8368
            分享
          • 8月25日凌晨消息,苹果公司刚刚向媒体发出2022年秋季发布会邀请函,确定将于美国当地时间9月7日(北京时间9月8日凌晨一点)举行特别活动。此次仍然采用线上形式,预计iPhone14系列、AppleWatchSeries8等产品将会在此时间推出。在发布会正式到来之前,新浪数码给大家盘点一下本次秋季发布会可能有哪些新品。iPhone 14系列作为本次发布会的主角,iPhone14系列预计将会发布4个版本型号。据此前爆料,iPhone 14系列没有mini版本,取而代之的是拥有更大电池容量与屏幕尺寸的iPhone 14 Max。所以iPhone 14系列预计共有iPhone 14、iPhone 1...
            0 0 938
            分享
          • 软件测试岗未来是否会消失?这是一个问题,因为它决定了软件测试人员这个群体未来会走向哪里?作为测试群体的一分子,笔者认真梳理了这个问题并得出个人观点,供各位测试同仁参考。一、软件测试的由来1936年,英国数学家阿兰·麦席森·图灵提出一种抽象计算模型:图灵机。科学家将带点的卡片纸传递给图灵机,图灵机通过计算给出计算结果。这一时期的软件多以计算为主,规模小复杂度低,尚未出现专职测试员。1957年,美国科学家约翰·巴科斯开发出第一套高级编程语言Fortran,Frotran被广泛应用在科学计算领域,这时的Frotran程序有主程序和子程序的概念。同时由于摆脱了卡片纸的约束,程序的代码规模呈现出几何级的...
            1 1 759
            分享
          •   最近有工作了一年多的朋友在问我,一个web页面到底怎么测试?我的第一感觉是震惊,天天做web测试,咋还不知道怎么测试呢?再仔细一想,可能是我们每天忙于测试而忽略测试导致的,毕竟当局者迷,旁观者清。  下面就说一下,该从哪些角度测试一个web网站,希望给同样不知所措的你一点提示:  一、UI测试  UI用户界面测试,主要检测前端页面展示效果的,测试关注的点有如下几方面:  1、各页面的风格是否统一  2、各页面的大小是否一致;同样的LOGO图片在各个页面中显示是否大小一致;页面及图片是否居中显示 、各页面的title是否正确  3、栏目名称、文章内容等处的文字是否正确,有错别字或乱码;同一级...
            14 16 2858
            分享
          •   需求  后台  o001 :超级管理员可以建立BBS分论坛  o002:超级管理员可以建立,修改,删除每个BBS分论坛版主信息,包括登录名与密码,每个BBS分论坛可以有一到多个版主;  o003:版主登录后可以修改用户名及密码;  o004:版主查看本分论坛未审批的帖子进行审批或退回.对于其他分论坛信息,本论坛版主权限与普通用户相同。  前台  o005:普通用户注册用户信息,查询密码和用户名;  o006:普通用户登录后可以修改自己的用户信息;  o007:普通用户登录后可以建立,修改,删除自己书写的帖子;  o008:普通用户登录后可以查询,查看别人发表的审核通过的帖子;  o009:...
            1 1 2909
            分享
      • 51testing软件测试圈微信