软件测试实例(二)

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

参考回答:

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

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

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

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

● 请问你有没有写过web测试,怎么写的?

参考回答:

Web测试主要从下面几个大方向考虑

功能测试,主要做链接测试,表单测试,cookies测试,设计语言测试等

性能测试,考虑连接速度测试,以及负载测试,例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?还有压力测试

可用性测试,比如导航测试,图形测试,内容测试,整体界面测试等

兼容性测试,市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。

安全性测试,

(1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。

(2)Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。

(3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。

(4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。

(5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。

● 请问测试路由器怎么测,用命令行还是界面?

参考回答:

可以采用lperf这个命令,

Lperf是一个网络性能测试工具,可以测量最大tcp和udp带宽,具有多种参数和特性,可以记录带宽,延迟抖动,数据包丢失,通过这些信息可以发现网络问题,检查网络质量,定位网络瓶颈。

iperf的使用非常简单,测试的原理是在wan口连接一台PC机,在LAN口连接一台PC,两边分别运行iperf服务端和客户端模式,用来测量LAN->WAN和WAN->LAN性能。具体命令如下:

服务端:iperf -s -w 1m

客户端:iperf -c -w 1m -t 20 -P 10

含义是TCP wndowsize 为1MByte,测试时间是20s,线程是10。

● 请你回答一下如何测试手机开机键?

参考回答:

功能测试:

按下开机键,屏幕能否亮起

性能测试:

按下开机键,屏幕能否在规定时间内亮起

压力测试

连续多次按下开机键,观察屏幕是否能一直亮起,到多久时间失灵

健壮性测试

给定一个中了病毒的手机或者是淘汰许久的老机子,安歇开机键观察屏幕能否亮起

可靠性测试

连续按下开机键有限次数,比如1万次,记录屏幕未亮起的次数

可用性测试

开机键按下费不费力,开机键的形状设计是否贴合手指,开机键的位置设计是否方便

● 请问你遇到过哪些印象深刻的bug,接口测试出现bug的原因有哪些?

参考回答:

面试官询问遇到过哪些印象深刻的bug,其实它并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:了解你平时工作中的测试能力

所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。

另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决的bug,也可以把最终的解决过程记录下来。(这不是就有素材了)

所以,建议你平时可以主动要求去分享一些自己工作中用到或学习的技术。或者多去参加集体活动,加强自己的表达能力。From:虫师

接口测试常见的bug有以下几个:

特殊值处理不当导致程序异常退出或者崩溃

类型边界溢出,导致数据独处和写入不一致

取值边界外未返回正确的错误信息

权限未处理,可以访问其他用户的信息

逻辑校验不完善,可以利用漏洞获取非正当利益

状态处理不当,导致逻辑出现错误

数组类型item个数为0或者item重复时程序异常退出

● 你在做项目中有做过压力测试吗,怎么做

参考回答:

1、首先对要测试的系统进行分析,明确需要对那一部分做压力测试,比如秒杀,支付

2、如何对这些测试点进行施压

第一种方式可以通过写脚本产生压力机器人对服务器进行发包收报操作

第二点借助一些压力测试工具比如Jmeter,LoadRunner

3、如何对这些测试点进行正确的施压

需要用压力测试工具或者其他方法录制脚本,模拟用户的操作

4、对测试点设计多大的压力比较合适?

需要明确压力测试限制的数量,即用户并发量

5、测试结束后如何通过这些数据来定位性能问题

通过测试可以得到吞吐量,平均响应时间等数据,这个数据的背后是整个后台处理逻辑综合作用的结果,这时候就可以先关注系统的CPU,内存,然后对比吞吐量,平均响应时间达到瓶颈时这些数据的情况,然后就能确认性能问题是系统的哪一块造成的

● 请问你在项目中关于功能测试和接口测试是怎么做的

参考回答:

功能测试:

首先制定测试计划,然后进行测试设计,将在测试计划阶段指定的测试活动分解,进而细化,为若干个可执行程序的子测试过程,然后执行测试,按照测试计划使用测试用例对待测项目进行逐一的,详细的排查分析评估,最后对测试结果进行统计和分析,

接口测试:

什么是接口(API)

API全称Application Programming Interface,这里面我们其实不用去关注AP,只需要I上就可以。一个API就是一个Interface。我们无时不刻不在使用interfaces。我们乘坐电梯里面的按钮是一个interface。我们开车一个踩油门它也是一个interface。我们计算机操作系统也是有很多的接口。(这是目前个人找到比较好理解的一段解释)

接口就是一个位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。那我们今天要讲的Web API就是这么一类东西。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口,我们就可以达到登录系统的目的。

现在市面上有非常多种风格的Web API,目前最流行的是也容易访问的一种风格是REST或者叫RESTful 风格的API。从现在开始,以下我提到的所有API都是指RESTful风格的API。

什么是接口测试和为什么要做接口测试

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

现在很多系统前后端架构是分离的,从安全层面来说,只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前端太容易了),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。

如今系统越来越复杂,传统的靠前端测试已经大大降低了效率,而且现在我们都推崇测试前移,希望测试能更早的介入测试,那接口测试就是一种及早介入的方式。例如传统测试,你是不是得等前后端都完成你才能进行测试,才能进行自动化代码编写。而如果是接口测试,只需要前后端定义好接口,那这时自动化就可以介入编写接口自动化测试代码,手工测试只需要后端代码完成就可以介入测试后端逻辑而不用等待前端工作完成。

接口测试的策略

接口测试也是属于功能测试,所以跟我们以往的功能测试流程并没有太大区别,测试流程依旧是:1.测试接口文档(需求文档) 2.根据接口文档编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值等设计方法)3. 执行测试,查看不同的参数请求,接口的返回的数据是否达到预期。

● 请问你有用过什么测试工具吗,用过哪些?

参考回答:

自动化测试工具用过selenium和appium

性能测试工具有用过Jmeter

● 请你设计一个微信朋友圈点赞的测试用例

参考回答:

功能测试:

点赞某条朋友圈,验证是否成功

接口测试:

点赞朋友圈,验证朋友能否收到提示信息

性能测试

点赞朋友圈,是否在规定时间显示结果,是否在规定时间在朋友手机上进行提示

兼容性测试

在不同的终端比如ipad,手机上点赞朋友圈,验证是否成功

● 请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题

参考回答:

首先1.在Eclipse Devices窗口,选中app对应的包名,然后点击debug图标(绿色的小虫子),然后切换到Debug视图。

2.切换视图之后,可以看到debug下,app的线程列表。

3.对于main线程(第一个线程),选中,并将其挂起Suspend。

4.然后我们就可以看到,Suspend之后,main线程卡住的位置。

● 在做测试的过程中,假如前端和后端吵起来了都在踢皮球觉得对方该改代码,你怎么办?

参考回答:

此时就应该找技术领导拍板或leader们基于安全性、性能、可测试性、可维护性讨论敲定一个解决方案,做到开发环境方便开发,线上环境少配置

少依赖、少出错机会。

● 如果广东用户头条app刷不出东西了,你应该怎么排查问题

参考回答:

1、检查网络连接是否稳定,更换网络尝试

2、更新头条版本尝试

3、清除app缓存,应用数据

● 请你说一下能不能用机器学习去进行自动化测试,如何监控异常流量,如果是脉冲呢,如何和正常流量作区分

参考回答:

如何用机器学习去进行自动化测试,就是让自动化测试变得更加智能,在自动化测试过程中,当测试功能模块越来越多,没有太多的时间去全部覆盖,我们可以采用归纳学习的方式,基于自动化测试的执行结果或者手工测试执行的结果为数据输入,然后基于一定的模型(例如:以通过率和模块的重要率计算的平均值)得出测试推荐模块,或者当要执行一个功能模块时,基于历史数据和模型(bug出现的错误相关性,功能相关性等)计算出与该功能模块相关性最大模块,并推荐测试。

如何监控异常流量

1、抓包

tcpdump -i eth0 -w server.cap

对包文件使用第三方工具如:wireshark做分析

2、iftop

yum install iftop

3、iptraf

yum install iptraf –y 或 yum install iptraf-ng  -y

启动命令ifptraf-ng

● 请问如何对登录界面进行测试

参考回答:

黑盒测试方法

输入正确用户名和密码,验证是否登陆成功

输入正确的用户名和错误的密码,验证是否登陆失败并且提示信息正确

输入未注册的用户名和任意的密码,验证是否登陆失败并且提示信息正确

用户名和密码都为空,验证是否登陆失败并且提示信息正确

用户名和密码两者之一为空

若启用了验证码,输入正确的用户名密码验证码是否能登陆成功

输入正确用户名和密码,错误的验证码,能否登陆成功并且提示信息正确

用户名和密码是否大小写敏感

页面上的密码框是否加密显示

后台系统第一次创建的用户重新登录时是否提示修改密码

忘记用户名和忘记密码的功能是否可用

前段功能是否根据要求限制用户名和密码的长度

点击验证码图片是否可以更换验证码,更换后的验证码是否可用

刷新页面是否会刷新验证码

如果验证码具有时效性,分别验证时效内和时效外验证码的有效性

用户登录成功但是会话超时后是否重定向到用户登录界面

不同级别的用户登录系统后的权限是否正确

页面默认定位焦点是否定位到用户名输入框中

快捷键tab和回车键是否可以正常使用

非功能性需求,从安全,性能,兼容三个方面

安全:

用户密码后台存储是否加密

用户密码在网络传输过程中是否加密

密码是否具有有效期,密码有效期到期后是否提示修改密码

不登陆的时候直接在浏览框中输入登录界面后的url地址,是否会重新定位到登陆界面

密码输入框是否不支持复制粘贴

页面密码输入框中输入的密码是否可以在页面源码模式下被查看

用户名和密码输入框中输入xss跨站脚本攻击字符串验证系统的行为是否被篡改

连续多次登陆失败后系统是否会阻止用户后续的尝试

统一用户在同一终端的多种不同浏览器上登陆,验证登录功能的互斥性是否符合设计预期

同一用户先后在不同终端的浏览器上登陆用户名和密码输入框中输入典型的sql注入攻击字符串验证系统的返回页面

,验证登陆是否有互斥性

性能测试:

单用户登陆的响应界面是否符合预期

单用户登陆时后台请求数量是否过多

高并发场景下用户登录的响应界面是否符合预期

高并发场景下服务端的监控指标是否符合预期

高集合点并发场景下是否存在资源死锁和不合理的资源等待

长时间大量用户连续登录和登出,服务器端是否存在内存泄漏

兼容性测试:

不同浏览器下验证登陆功能的页面显示和功能正确性

相同浏览器的不同版本下验证登陆功能的页面显示和功能正确性

不同终端的不同浏览器下验证登陆功能的页面显示和功能正确性

不同分辨率下……

补充:弱网测试

网络切换和网络延迟时登陆界面是否正常

是否支持第三方登陆

是否可记住密码,记住的密码是否加密

● 请你说一说当前工作中涉及的测试问题(测试流程和测试性能)

参考回答:

在测试性能中,时常会出现脚本回访卡住的问题,原因有以下几种:

1、 runtimesetting 中的continue error没有勾选

2、录制的脚本中存在冗余的代码部分,需要对脚本进行优化,去除冗余的部分(优化脚本)

例如:在用FireFox录制脚本时,脚本中会产生一个叫

”Url=http://download.cdn.mozilla.net/pub/firefox/releases/43.0.1/update/win32/zh-CN/firefox-43.0.1.complete.mar","Referer=", ENDITEM,”这样的代码(该代码出现的问题不止一处,在查找时一定要注意。),这是因为采用firefox浏览器录制时产生的压缩文件,在脚本回放时卡住的原因正是因为这个(建议:能采用IE录制尽量用IE浏览器)

解决办法:注释掉或者删除掉该段代码即可, 关联问题:在用loadrunner自带对比工具对比脚本后 找到需要关联的动态值。在关联后回放脚本时报错HTTP-status code 417(exception failed)错误时,产生的原因如下:

1、脚本中还存在没有关联或者关联失败的动态值,利用lr自带对比工具仔细对比

2、脚本中的动态值被做了加密策略,仔细查看脚本中动态值的部分,看看动态值是否被做了安全策略(随机生成或者打乱动态值顺序、在动态值中加入了特殊符号),由于在tree-response中的动态值是未被加密的状态,在client向server发送请求时,client的动态值发给服务器,这时服务器的动态值已经被做了参数化,所以服务器不认准client向服务器发送的动态值。

解决办法:去掉动态值的安全策略即可(JVM参数)

● 请你说一说洗牌问题的思路并手写代码,并设计测试用例

参考回答:

洗牌问题:有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。

void PerfectShuffle(int *A,int n){

if(n <= 1){

return;

}//if

//

int size = 2*n;

int index,count;

for(int i = n;i < size;++i){

// 交换个数

count = n - (i - n) - 1;

// 待交换

index = i;

for(int j = 1;j <= count;++j){

swap(A[index],A[i-j]);

index = i - j;

}//for

}//for

}

};

可以就数组的类型,可以是int型的,浮点型的,还可以是大数类型,负数,进行测试。

● 请你测试一下游戏中英雄的技能

参考回答:

测试的设计都是通用的,首先功能测试看功能有没有实现,然后再对性能、压力、容量、健壮性、安全性、可靠性、恢复性、备份、协议、兼容性、可用性、配置、GUI这些非功能测试去思考。具体答案这里不再赘述

● 请你回答一下性能测试有哪些指标,对一个登录功能做性能测试,有哪些指标,怎么测出可同时处理的最大请求数量

参考回答:

性能测试常用指标:

从外部看,主要有

1、吞吐量:每秒钟系统能够处理的请求数,任务数

2、响应时间:服务处理一个请求或一个任务的耗时

3、错误率:一批请求中结果出错的请求所占比例

从服务器的角度看,性能测试关注CPU,内存,服务器负载,网络,磁盘IO

对登录功能做性能测试

单用户登陆的响应界面是否符合预期

单用户登陆时后台请求数量是否过多

高并发场景下用户登录的响应界面是否符合预期

高并发场景下服务端的监控指标是否符合预期

高集合点并发场景下是否存在资源死锁和不合理的资源等待

长时间大量用户连续登录和登出,服务器端是否存在内存泄漏

怎么测出可同时处理的最大请求数量

可以采用性能测试工具(WeTest服务器性能),该工具是腾讯wetest团队出品,使用起来很简单方便,但测试功能相当强大,能提供10w+以上的并发量,定位性能拐点,测出服务器模型最大并发

● 请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试

参考回答:

如何进行单元测试:

1、创建单元测试,该工具可以对任何类、接口、结构等实体中的字段、属性、构造函数、方法等进行单元测试。创建单元测试大致可以分为两类:

整体测试,整体测试是在类名称上右击鼠标,在下拉菜单中点击创建单元测试选项。这样就可以为整个类创建单元测试了,这时他会为整个类可以被测试的内容全部添加测试方法。开发人员直接在这些自动生成的测试方法中添加单元测试代码就可以了。

单独测试,如果只想单独对某个方法、属性、字段进行测试,则可以将鼠标焦点放在这个待测试的项目名称之上,然后点击鼠标右键,在右键菜单中选择创建单元测试选项。这样就可以单独为某个方法创建单元测试了。

运行单元测试

查看测试结果

编写单元测试代码

测试没有参数的函数,它可能还有别的输入,例如全局变量,成员变量,或调用子函数获得的输入(这个要使用工具才能做到),只要函数需读取的,都应该设定初始值,如果完全没有,没有输入也是一种输入,照样测试就是了。同样道理,输出也不仅仅是返回值,没有返回值还可能修改了全局变量什么的,这些也是要判断的输出。

● 请问你有没有做过压力测试

参考回答:

在软件工程中,=压力测试是对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个Web 站点在大量的负荷下,何时系考察公司:网易

统的响应会退化或失败。网络游戏中也常用到这个词汇。

● 对于有系统大量并发访问,你会如何做测试,有什么建议

参考回答:

如何做高并发系统的测试,一般而言,整体的测试策略是:先针对部分系统进行性能测试及压力测试,得到各部分的峰值处理性能,再模拟整体流程测试,重点测试整体业务流程以及业务预期负荷,着重测试以下几点:

1、不同省份,不同运营商CDN节点性能,可采用典型压力测试方案

2、核心机房BGP网络带宽,此部分重点在于测试各运行商的BGP网络可靠性,实际速率,一般采用smokeping,lxChariot等工具

3、各类硬件设备性能,一般采用专业的网络设备测试工具

4、各类服务器并发性能,分布式处理能力,可采用压力测试方案工具

5、业务系统性能,采用业务系统压力测试方案

6、数据库处理性能,这部分需要结合业务系统进行测试,以获取核心业务场景下的数据库的TPS/QPS,

7、如果有支付功能,需要进行支付渠道接口及分流测试,此部分相对而言可能是最大的瓶颈所在,此外还涉及备份方案,容灾方案,业务降级方案的测试。

如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们1079636098,群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

你可能感兴趣的:(软件测试实例(二))