1.怎么判断一个bug是前端还是后端问题?
我们一般通过抓包工具Fiddler来抓取数据包定位问题到底是前端的还是后端的。如果请求没有发出去或传入的参数有问题,那就是前端的问题;
如果前端传入参数和请求都没问题,后端返回的响应数据有问题,那就是后端的问题;
如果前端传入参数和请求都是正确的,后端返回的响应数据也是正确的,那可能是前端处理返回数据的问题。
2.说一下常用的Linux命令?
【Linux应用场景+具体命令功能】
作为测试,使用linux命令主要是以下几个场景:
- 开发人员提测,我这边就需要用linux搭建测试环境;
- 开发人员提测后,我要将他的代码部署到指定路径下,需要用到解压的命令,还要进行编译和安装;
- 还有的时候测试时服务器挂了,要重启服务,我用的是service那个命令,还有的重启后要查看下进程、端口之类的。
(service network status/restart)
4.大部分用的比较多的就是测试时出现错误就会去服务器查看一下日志信息,用的是tail -f 日志文件。
除了一些基本的命令(ls ll cd pwd)常用以外,还有一些用的比较多的,比如:
查看进程:ps -aux
查看端口:netstate -tnulp | grep 端口号
杀死进程:kill -9
远程拷贝:scp
查找指定文件:find
实时查看:tail - f
显示指定文件的全部内容:cat
查找文件中符合条件的字符串:grep
find grep的区别:
find搜索文件,grep搜索文件内容
【find】
在/etc目录下查找文件 aaa.conf
find /etc -name aaa.conf
在当前目录下查找文件名含有字符串‘conf’的文件
find . -name '*conf*'
【grep】
显示在aa,bb,cc文件中包含test的行
grep ‘test’ aa bb cc
3.你为什么要进行抓包?具体怎么分析的?
主要是由于我们在测试过程中出现bug的时候,为了定位问题分析问题,需要抓取前端后台的数据交互过程,通过看数据,从而来分析到底是前端问题还是后台问题。
分析这块的话:
- 首先看发的请求是否有问题,请求的接口url是否有错误,参数是否有错误,如果url或传参有问题那就是前端bug;
- 如果请求没有问题,看下后台返回的数据是否有问题,状态码5开头的基本都是后台问题;状态码为200,响应数据与预期不一致,那也是后台bug,不过这里有可能是数据库问题,也有可能是后台代码问题。
这里我会首先查看数据库的数据,如果数据库没有问题,那就需要查看下后台的日志文件,具体分析看是后台代码哪里出了问题,然后把日志信息截图给开发。
3.返回的数据没有问题,请求参数、url也没有问题,那可能是前端代码是否转换有问题,也属于前端bug。
4.常见http状态码
【常见状态码的含义】
当我们访问一个网页时,浏览器会向网页所在服务器发出请求,当服务器收到请求后,就会解析请求并作出响应,同时服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。但是这个过程并不百分比成功,并且情况也很复杂,所以状态码就起到至关重要的作用了。
【HTTP状态码分类】
【HTTP状态码分类】
100 continue : 继续。客户端应继续其请求。
200 OK : 请求已成功。表示从客户端发送给服务器的请求被正常处理并返回。
204 No Content : 服务器成功处理,但未返回内容。
206 Partial Content : 服务器成功处理了部分get请求。
301 Moved Permanently : 永久性重定向,表示请求的资源被分配了新的url,之后应使用新的url。
302 Found : 临时性重定向,表示请求的资源被分配了新的url,希望本次访问使用新的url。
303 See Other :查看其他地址,表示请求的资源被分配了新的url,客户端应该采用get方式获取资源。
304 Not Modified : 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
305 Use Proxy :使用代理。请求者只会使用代理访问请求的网页。如果服务器返回此响应,那么服务器还会指明请求者应当使用的代理。
307 Temporary Redire :临时重定向。与303含义相同,307会遵照浏览器标准不会从post变成get(不同浏览器可能会出现不同情况)。
400 Bad Request : 语法错误。客户端请求的语法错误,服务器无法理解。
401 Unauthorized :未授权。请求要求用户的身份认证。
403 Forbidden :禁止。服务器拒绝该次访问(访问权限出现问题)。
404 Not Found :未找到。服务器无法根据客户端的请求找到资源(网页)。除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用。
405 Method Not Allowed :方法禁用。客户端请求的方法被禁止。
406 Not Acceptable :不接受。无法使用请求的内容特性来响应请求的网页。
408 Request Time-out :请求超时。服务器等待客户端发送的请求时间过长,超时。
500 Internal Server Error : 服务器内部错误。服务器遇到错误,无法完成请求。
501 Not Implemented :尚未实施。服务器不具备完成请求的功能。例如,当服务器无法识别请求方法时,服务器可能会返回此代码。
502 Bad Gateway :错误网关。作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。
503 Service Unavailable :服务不可用。由于超载或系统维护,服务器暂时无法处理客户端的请求。通常,这只是一种暂时的状态。
504 Gateway Time-out :网关超时。服务器作为网关或代理,未及时从上游服务器接收请求。
505 HTTP Version not supported :HTTP版本不受支持,服务器不支持请求中所使用的HTTP协议版本。
5.http的结构是如何组成的?
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。
默认HTTP的端口号为80,HTTPS的端口号为443。
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
请求数据:GET没有请求数据,POST有。
【HTTP请求报文】
- 请求行:请求方法+请求url+http协议版本
- 请求头
- 空行:请求头之后是一个空行,通知服务器以下不再有请求头。
- 请求数据:get没有请求数据。
【HTTP响应报文】
- 状态行:协议版本+状态码+原因短语
- 消息报头
- 空行
- 响应正文
6.浏览器输入URL到页面展示的整个过程
用户单击鼠标后所发生的事件按顺序如下:
- 用户在浏览器输入url地址
- 浏览器向DNS请求解析服务器的ip地址
- 域名系统DNS解析出服务器的ip地址
- 浏览器与服务器建立TCP连接(三次握手)
- 浏览器发出http请求
- 服务器通过http响应报文把文件发送给浏览器
- 服务器端和客户端的交互完成后,断开TCP连接(4次挥手)
- 浏览器解析文档资源并渲染页面
7.http和https的区别
- http是超文本传输协议,信息是明文传输;http是有安全性的ssl加密传输协议。
- https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443.
- http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http安全。
8.Cookie和session的区别
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
session记录的是客户端信息
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
什么是cookie?
Cookie,有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
Cookie解决了什么问题?
web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。Cookie的出现就是为了解决这个问题。
- Get和post请求的区别
1、get请求的参数有长度限制,post没有
2、get请求参数在url上传输,post的参数在请求正文中传输。post比get传输更安全
3、get只能接收ascall码参数,而post没有限制
4、get请求的时候,只请求一次,而post请求两次,第一发送请求头相关信息,第二次再发送请求正文。(只有部分浏览器2次请求
9.一个完整的项目开发流程是怎样的
我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。
熟悉需求阶段
我们的产品会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议,我们会把不明白不理解的需求在会议上说出来,包含需求的合理性还有需求的可测性等,产品这边解答目的是让我们测试这边和开发对需求的理解达到一致。
测试准备阶段
会议结束之后我们开始准备测试工作,我们测试这边会写一个测试计划,分配每个人负责的模块,然后我们就根据自己负责的模块用 xmind进行测试需求分析,分析测试点,以及编写测试用例,之后我们会在自己的组内先进行评审,评审修改之后还会在我们的项目组评审,评审完后进行修改测试用例。
测试执行阶段
开发人员编写好代码之后,我们会把代码包通过 Jenkins 部署到测试环境提测,进行 SIT测试(集成测试),在正式测试之前我们会先做一个冒烟测试,冒烟测试通过之后我们才转测。
在执行测试的过程中,我们如果发现bug就会用tapd(或者禅道)记录并且提交bug,也会进行bug复测,以及回归测试,每一轮测试结束之后我们都会写一个测试报告,一般情况下,测试4-5轮之后会达到上线要求当达到上线的标准后,测试报告会认为测试通过,上线前我们会做预发布测试,预发布通过后,由项目组与产品决定时间上线,上线完成。
一周左右我们会写一个项目总结测试报告,总结我们在上一个版本中遇到的问题以及今后有哪些”力高要改进,在产品选代过程中,我们会跑自动化用例来进行回归测试。
10.如果需求不明确你会怎么办?
需求不明确的话我会在需求澄清会议上面提出来,问清楚这个需求,只有明确需求才能更好的完成工作,后续工作中还是不清楚,可以找产品再去确认这个需求。
11.什么是需求评审?
需求评审就是测试同学,开发同学,产品同学拉一个会议,根据需求文档,产品讲解当前需求的功能点包括哪些,在讲解的过程中开发同学会针对一些比较难或者有歧义的功能点描述一下具体实现方案,测试同学在评审的过程中需要注意当前模块的改动或者增加代码是否会影响到其他的接口/功能,对于不清楚的地方及时询问产品,对于还未实现的功能等做好标注~
12.什么是用例评审?
需求评审通过之后,开发同学和测试同学会给出一个大致的排期,开发需要多长时间去开发当前需求,测试同学在开发同学开发需求功能的同时需要编写测试用例,当开发工作完成之后,会进行一个用例评审。用例评审的人员和需求评审一样,主持人是测试同学,针对自己编写的case一条一条过,讲一下自己测试的功能点,主要目的就是检查是否有遗漏的点没有考虑到,以及用例设计是否和需求有出入的地方,用例评审通过之后,会进行一个冒烟测试,测试通过之后开始进行测试工作~
13.你掌握的测试用例的设计方法有哪些?
【黑盒用例测试设计】
- 等价类划分法
Eg:注册页面的用例 账号6-18位数字
有效等价:6,18,10位
无效等价:5,20位
- 边界值分析法
两类边界值选取方法:文本框输入6-12位字符(6<=x<=12)
【五点法】5,6,10,12,13
【七点法】5,6,7,10,11,12,13
- 因果图法
第1步:先分析原因和结果的关系,画出他们之间的关系图(部分关系连线);按照需求描述原因、结果间的约束。
第2步:列出所有原因和结果的列表,设计初步的测试用例步骤。(列表中的每一列都是一条测试用例)
- 判定表
- 场景法
用于解决业务流程清晰的系统或功能,eg:ATM取款机
【基本流】
【包含备选流的过程】
14.介绍一下接口测试?
15.你提的bug开发不认可怎么办?
- 自查
测试人员首先要检查自己这边有没有问题,看看自己对需求的理解是否正确;提交的缺陷是否有问题,步骤写的是否清楚;按自己写的步骤缺陷是否可以复现。
- 提出的缺陷要站在用户的角度考虑
跟研发人员有技巧地沟通。测试人员不能只站在自己的角度跟研发人员提缺陷,要站在用户的角度来提缺陷。比如:如果我是用户,怎样实现用户的体验会更好。
- 给缺陷的定义一定要准确
测试人员要注意一定要准确定义缺陷的级别,不然不仅会影响研发人员工作,也会给自己带来一些不必要的麻烦。
- 求助第三方
比如:找项目经理和研发经理进行评审,不一定是要正式评审,大家可以一起简单沟通,是否有缺陷。或者是否有版本变更,测试人员是否没有收到版本变更的通知等等。