协议类问题
Q:TCP协议和UDP协议的区别是什么?
A:TCP协议和UDP协议都是传输层两个非常重要的协议,它们之间的区别主要体现在以下三点。
第一点:TCP是面向连接的一个协议。就像我们打电话要先拨号进行连接一样;而UDP它是一个无连接的协议,在发送数据之前是不需要建立连接的。
第二点:TCP是一个可靠的协议。它可以保证它的传输数据是无差错的,不会丢包,不会重复,而且是按顺序到达的。而UDP协议它是不可靠的协议。它是尽最大的努力去交付数据,但是它的数据可能会有丢包,可能会有重复,也可能会有差错。
第三点:TCP基于以上的两个特点,所以它的传输效率会比较低,有些应用比较注重它的传输可靠性,而对于速度没那么大要求的话,就可以选择TCP协议,比如说我们的http协议,FTP协议等。而UDP协议因为是不可靠的,所以它的速度会非常快,某些应用比较注重速度,而不在乎一两个丢包的情况下,选择UDP协议来进行传输,比如说IP电话,流媒体。
Q:说说TCP协议的4次挥手过程。
A:当TCP协议完成数据发送之后,就会开始断开这个链接,这个时候就需要经历TCP4次挥手的过程。
第一次挥手一般是客户端向服务器发送的,用来申请断开连接,这个报文中的一个标志位FIN位标记为1,我们一般也把它叫做FIN包。
第二次挥手是服务器回复给客户端的,用来对它上一个断开连接请求的报文进行确认,这个报文中它的标志位ACK位被标记为1,我们一般称为ACK报文。
第三次挥手也是服务器发给客户端的,这个时候服务器的数据已经发送完毕,它会发起一个请求断开连接的报文,这个报文中的FIN位同样被标记为1,所以说它也是一个FIN包。
第四次挥手是客户端发给服务器的,同来确认上一个服务器断开连接的请求,所以这是一个ACK报文。
以上就是TCP协议4次挥手的过程。
Q:常见的http请求方法有哪些?
A:1、get请求,主要用来获取资源和数据;
2、post请求,用来发送数据给服务器,也可以创建或者更新资源;
3、put请求,可以用来创建或者替换目标资源;
4、patch请求,可以用来对资源进行部分修改;
5、delete请求,用来删除资源。
Q:get 请求和 post 请求的区别?
A:1、GET在浏览器回退时是无害的,而POST会再次提交请求。
2、GET产生的URL地址可以被Bookmark,而POST不可以。
3、GET请求会被浏览器主动cache,而POST不会,除非手动设置。
4、GET请求只能进行url编码,而POST支持多种编码方式。
5、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
6、GET请求在URL中传送的参数是有长度限制的,而POST么有。
7、对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
8、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
9、GET参数通过URL传递,POST放在Request body中。
Q:常见的状态码有哪些?
A:1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
Q:http和socket有什么区别?
A:http为短连接。客户端向服务器端发送请求的时候,必须要服务器端回送响应,请求结束之后再主动将这个链接释放掉。通常的做法是不需要任何数据的,每隔一段时间客户端也得向服务器端发送一个保持连接的请求,这样子就可以保证客户端在服务器端上是一个上线的状态。
socket为长连接。通常情况下,socket连接也叫TCP连接,因此socket连接一旦建立,双方开始互相发送数据,直到双方断开连接。在实际应用过程中间由于网络节点过多,会被节点给断开连接,因此我们要通过轮询高速网络让这个节点处于活跃状态。
Q:https协议比http协议安全是如何实现的?
A:https协议主要通过SSL协议来实现。它的安全性主要体现在以下几点:
1、它的数据是加密的SSL协议通过非对称加密方式来实现密钥的协商,在通过一个对称加密的方式来实现数据的加密。
2、它可以进行身份的验证,我们进行数据交互的客户端和服务器双方都可以向CA机构来申请证书,并且在ssl握手阶段双方去验证对方的证书,从而可以验证对方的身份,防止第三方进行冒充。
3、它可以保证信息的完整性,每次发送的数据我们都会加上一个MAC摘要,并且签名,当发送的数据和接手的数据的摘要信息是一致的话,就表示这个信息没有被第三方篡改过。
接口测试类问题
Q:Jmeter参数化有哪几种方法?
A:1、可以通过函数助手来实现参数化,比如说像_RandomString这种随机函数;
2、通过csv读取文档数据,实现参数化;
3、通过配置元件,用户定义变量来实现参数化;
4、通过前置处理器中的用户参数也可以实现参数化。
Q:接口测试中content-type的常见类型有哪些?
A:第一种是application/json,这种类型适合提交一些复杂结构的数据,比如Restful风格的接口。
第二种是application form格式的数据,它是浏览器的原生表单形式。
第三种是text/xml格式,它是一种以http协议为传输协议,以xml为编码方式的远程调用规范。一般来说它在webservice这种结构里比较常见。
第四种是multipart form-data,需要在表单格式中上传文件时就会使用到这种格式。
Q:接口测试的重点是什么?
A:我们需要关注一下接口的地址以及我们的参数都是正确的,还要关注一下接口的返回值,包括status、msg、还有code等值是正确的。我们还需要去查看数据库里面的数据,确保数据的正确性,特别是有错误的时候,我们需要通过排查日志,以及去数据库里查看数据来排查问题。
测试基础类问题
Q:git和svn的区别是什么?
A:SVN和Git都是版本控制工具。相对来说,SVN它是一种集中管理,它所有的代码都在一个服务器上面,而且它的主线和分支上面的url是不一样的。Git的话是一种分布式管理,去中心化,服务器以及每一个开发都拥有一个本地管理仓库,它的分支和主线的地址都是一样的。
Q:云测平台有哪些?
A:云测平台提供了一个远程租赁真机的服务。一般来说云测平台是通过自动化框架来实现的真机上的脚本自动化运行的;或者是远程租赁真机,然后人工测试;或者是真人真机进行测试。
由于安卓端的设备种类比较多,所以云测平台一般来说在安卓端的使用比较广泛一些。现在国内外都提供了非常多的云测平台,比如说国内游testin,百度MTC,还有腾讯优测;国外有Pefecto和TestDroid等等。
Q:Web兼容性测试的工作内容是什么?
A:主要从以下几个方面来考虑:首先是浏览器,然后是操作系统,还有分辨率以及网速等因素来考虑web兼容性测试。针对Web应用,我们主要考虑浏览器的兼容性测试。而浏览器兼容性测试一般来说是伴随着功能一起来做的,我们在验证这个应用的功能的同时,需要同步检查页面的格式、字体,还有各种输入框、下拉框、复选框、按钮等等,它们的排版和显示是否正常,不会出现重叠和错乱等现象。
场景类问题
Q:图片加载不出来,定位思路是什么?
A:首先我们需要去收集用户的各种信息,包括环境信息,浏览器信息,以及用户的操作信息和网络状态等等,然后把收集到的用户信息在测试环节中进行复现。具体思路可以是:是否网络不好?是否被某些工具屏蔽了图片的显示?是否浏览器不兼容?是否GIF图片无插件的支持?如果这些都不是,那么我们可能需要通过查看服务器上的后端日志,提交给开发,通过开发的协助去定位问题。
Q:在接口测试阶段测过了所有功能,还需要进行功能测试吗?
A:需要测试的。接口测试是为了提前发现问题,而让测试提前介入的一种测试。虽然在接口阶段,我们会验证所有的功能,但是后端跟前端进行集成的时候,依然可能会发现一些兼容性的问题。所以我们在做系统测试的时候是需要去验证一遍功能的,但是在接口测试过程中,由于我们提前验证了所有的功能,因此在系统测试过程中进行功能测试的时候bug会少很多,从而提高了测试效率。
Q:接到线上用户报障时,该如何解决?
A:首先,如果说是用户已经发现的问题,是一个现成问题的话,我们可以通过分析日志来分析这个用户的问题;其次,如果这个问题不是一个现成的问题,那么我们可以去分析用户的操作步骤以及环境配置,去模拟用户的使用场景,在测试环境里复现这个问题。
一旦复现出来,就要把这个场景添加到用例里面去,以便后续的测试执行和回归,可以更加贴近用户的使用场景。
Q:Linux下编辑文件的常用命令有哪些?
A:首先是比较常用的是vi或者是vim,可以直接对Linux下的文件进行编辑并保存。第二个是sed命令,它是一种以“行”为单位,对Linux下面的文件进行文本编辑的命令。第三种个是awk命令,它既可以以“行”为单位,又可以以“列”为单位进行文本编辑,相对来说会强大一点。第四个是cut命令,它可以对文本进行切割,同样是以“行”为单位,对文本进行处理。
Q:Linux如何查看日志?
A:一般在项目的服务器里面会有一个名为logs
的目录,这个目录就是用来存放项目日志的,我们的项目日志文件一般都是以.log
为后缀。
我们可以用tail -f
命令来查看实时更新的日志,让它在屏幕上面实时刷新出最新的当前日志,还可以用Ctrl+c
来终止日志输出。
(这个问题我会出一篇详细的文档来说说使用Linux查看日志有哪些方法)
本文将持续更新~~