软件测试面试题

  1. 冒泡排序:

For i in range(1,len(array)):

  For j in range(0,len(array)-i):

   If array[j]>array[j+1]:

       Array[j],array[j+1]=array[j+1].array[j]

Return array

  1. 七层协议:

物理层    通过媒介传输比特,确定机械及电气规范    比特Bit    RJ45、CLOCK、IEEE802.3 (中继器,集线器)

数据链路层    将比特组装成帧和点到点的传递    帧Frame    PPP、FR、HDLC、VLAN、MAC (网桥,交换机)

网络层    负责数据包从源到宿的传递和网际互连    包PackeT    IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器)

传输层    提供端到端的可靠报文传递和错误恢复   段Segment    TCP、UDP、SPX

会话层    建立、管理和终止会话    会话协议数据单元    NFS、SQL、NETBIOS、RPC

表示层    对数据进行翻译、加密和压缩    表示协议数据单元    JPEG、MPEG、ASII

应用层    允许访问OSI环境的手段    应用协议数据单元    FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

  1. TCP与udp区别:

TCP -------------------------     UDP

连接方式    面向连接的、可靠的数据流传输    //    非面向连接的、不可靠的数据流传输

通信方式    一对一、点对点  //     一对一、一对多、多对一、多对多

传输单位    TCP报文段   //   用户数据报

对系统资源要求    较多(TCP的20个字节信息包),负载高,采用虚电路   //  较少(UDP信息包的标题很短,只有8个字节)

安全性    可靠,安全   //  数据传输快,但是不可靠(尽最大努力交付)

对应协议    FTP、Telnet、SMTP、POP3、HTTP    // DNS、SNMP、TFTP

TCP提供超时重发、丢弃重复数据、检验数据、窗口技术、流量控制等功能,保证数据能传到另外一端。

UDP常用于QQ等即时通讯软件(适合于实时通信,当网络阻塞时,不影响发送端的发送效率

  1. 三次握手:

第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

“三次握手”的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。

  1. 四次挥手(我要和你断开链接;好的,断吧;我也要和你断开链接;好的,断吧)

与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,然后进入等待 TIME_WAIT 状态。被动方收到发起方的报文段以后关闭连接。发起方等待一定时间未收到回复,则正常关闭。

  1. HTTP与HTTPS

二者之间存在如下不同:

     端口不同:Http与Https使用了不同的连接方式,用的端口也不一样,前者是80,后者是443;

     资源消耗:和Http通信相比,Https通信由于加解密处理消耗更多的CPU和内存资源;

     开销:Https通信需要证书,而证书一般需要向认证机构购买;

  1. Http请求解析过程

浏览器输入一个连接,到展示到页面,经过了什么

      (1). 浏览器查询 DNS,获取域名对应的IP地址 :具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;

      (2). 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;

      (3). TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;

      (4). 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果返回给浏览器;

      (5). 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;

  (6). 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

  1. Session 与 Cookie 的对比

   实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;

   大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;

     安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;

     服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。

  1. Get/post区别:

1url可见性:

get,参数url可见;

post,url参数不可见

2、数据传输上:

get,通过拼接url进行传递参数;

post,通过body体传输参数

3、缓存性:

get请求是可以缓存的

post请求不可以缓存

4、后退页面的反应

get请求页面后退时,不产生影响

post请求页面后退时,会重新提交请求

5、传输数据的大小

get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)

post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。

6、安全性

这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。

GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

  1. 系统网络安全的测试要考虑问题:

1.测试采取的防护措施是否正确装配好,有关系统的补丁是否打上

2.模拟非授权攻击,看防护系统是否坚固

3.采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI系列和 IPhacker IP )

4.采用各种木马检查工具检查系统木马情况

5.采用各种防外挂工具检查系统各组程序的客外挂漏洞

  1. 数组和列表的区别:

python没有数组,只有元组(tuple)和列表(list)。

元组与列表最大的不同在于,元组一旦创建便不可改变;

因此不像列表,元组不能够在末尾追加(append)元素,弹出(pop)元素;

只能对元组中的元素进行索引t[0],不能对其中的元组进行赋值t[0]=8。

使用元组的好处在于对元组进行操作更为高效,适合存放一组常量。

  1. 前后端BUG定位

如果请求数据与接口文档不一致,则是前端问题
如果请求数据与接口文档一致,响应数据与接口文档也一致,则是前端问题
如果请求数据与接口文档一致,响应数据与接口文档不一致,则是后端问题

浏览器F12调试

查看后台日志

  1. 什么情况下定位不到元素

代码写错

元素未出现(需要元素等待)

元素在iframe中

多窗口

出现弹窗(系统弹窗、JS弹窗)

元素属性值是动态加载的

元素无法确定唯一性

只读属性(元素不可操作)

  1. 为什么要做接口测试

越底层发现BUG,修复成本越低

前端发生变化时,后端接口可以不用变

检查系统的安全性、稳定性,前端传参不可信

  1. http状态码

    1xx:请求正常,但是无响应,只有在实验状态下使用

    2xx:2开头的表示发送成功

    3xx:3开头的代表重定向,常见302

    4xx:400代表客户端发送的语法有错误,401代表访问的页面没有授权,403 无权限访问该网页,404代表没有这个页面,415 格式错误

    5xx:5开头的代表服务器异常,500代表服务器内部异常,504代表服务器超时

  1. Web测试与app测试区别:

1.功能方面:

在流程和功能测试上是没有区别的,系统测试和一些细节可能会不一样。那么我们就要先来了解,web和app的区别:

web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。在系统测试的时候就会产生区别了。

首先从系统架构来看的话,web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是app端是不能够保证完全一致的,除非用户更新客户端。如果是app下修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。

2.性能方面:

web页面可能只会关注响应时间,而app则还需要关心流量、电量、CPU、GPU、Memory这些了。

3.兼容性方面:

web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容,不过一般还是以浏览器的为主。而浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)。app的测试则必须依赖phone或者是pad,不仅要看分辨率,屏幕尺寸,还要看设备系统。系统总的来说也就分为Android和iOS,不过国内的Android的定制系统太多,也是比较容易出现问题的。

4.相比较web测试,app更是多了一些专项测试:

  一些异常场景的考虑以及弱网络测试。这里的异常场景就是中断,来电,短信,关机,重启等。

  而弱网测试是app测试中必须执行的一项测试。包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。需要测试丢包,延时的处理机制。避免用户的流失。这些在前面的弱网测试那篇已经讲过,这里不再讲了。

5.安装、卸载、更新:

web测试是基于浏览器的所以不必考虑这些。而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件,更新的强制更新与非强制更新、增量包更新、断点续传、弱网,卸载后删除app相关的文件等等。

6.界面操作:
  app产品的用户都是使用的触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控,事件触发区域等测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值