文章目录
总目录
问题
1、请结合你最熟悉的项目,介绍一下你是怎么做测试的?
- 首先要自己熟悉一个项目?
- 功能+接口+自动化+性能是怎么处理?
- 第1步:需求分析,需求评审
- 第2步:架构师会输出接口规范;
前后端开发人员根据接口规范编码;
功能测试人员,开始靠想象根据需求设计测试用例;
接口测试人员,根据接口规范设计接口测试用例 - 第3步:后端开发人员,先提测接口
- 第4步:接口测试人员,对接口进行测试
- 第5步:接口测试通过之后,输出接口的测试报告
- 第6步:功能测试人员,根据接口的测试报告和前端开发的提测,来开始进入功能测试
接口测试人员,整理接口自动化脚本,并且开始在验收环境进行接口的验收测试。 - 第7步:功能测试人员测试环境测试通过后,进入验收环境进行功能的验收测试
UI自动化小组成员,开始编写回归测试的自动化UI测试的代码(web自动化和app自动
化) - 第8步:发布到线上环境,进行最后一轮的功能回归测试。
- 第9步:跟踪生产BUG
2、你们公司是如何做接口测试的?
-
分析:一般回答这类问题,最好是结合项目回答,并且要回答出使用工具、技术、涉及的人力的安排、
工作的成果。 -
答:我在上一家公司里面,对IHRM人力资源管理系统进行过接口测试。负责的是登陆、员工的增删改查、部门的增删改查、用户资源查询接口测试,一共12个接口。
在公司里面,我开展接口测试时,先要进行需求分析 ,然后在开发开发代码时,熟悉项目需求。等待开发提测接口之后,拿到接口文档,然后根据接口文档来设计接口测试用例,使用Postman工具进行接口测试工作,经过3天的测试,一般能够完成一轮的接口测试。测试完成之后,如果所有用例都执行完毕,并且所有BUG都回归通过,没有严重等级BUG之后,就可以移交功能测试。在功能测试人员进行功能测试时,我们可以编写自动化接口测试代码,然后进行接口层回归测试。
同时,我们接口测试人员会提前在UAT验收环境对环境进行部署和回归测试。等UAT回归通过之后,前端测试就可以介入UAT测试。 (测试环境测试、UAT环境一轮、生产验证一轮,一般生产环境使用的协议是HTTPS协议,测试环境使用的是http协议)
等前端测试通过并且发布上线之后,我们可以在UAT环境使用持续集成 技术,持续地监控已发布版本地版本质量,达到保证项目质量地目的。
最后,我们使用接口测试技术,对人力资源管理系统进行了系统接口层测试,测试效率比功能测试回归的效率高了16倍,功能测试需要花费1天时间才能执行完的回归测试工作,我们接口测试人员利用自动化接口测试技术,只用花半个小时。而且,还能持续地监控旧版本的代码质量,提高我们的测试效率。
(如果面试官不打断)
在这里面,我使用Postman的断言、关联、引入外部数据文件,对接口进行测试。并且利用newman工具,来生成HTML测试报告,利用XMYSQL来连接数据库,校验数据库的数据。其中,有一些大数据的测试场景,我使用的csv文件来完成测试。
(让人印象深刻的BUG)在工作当中,我遇到一些让我印象深刻的BUG,其中我在测试登陆接口时,偶然发现,我不输入用户名和输入一个特定的密码结果登陆成功了。然后让我意识到这是一个后门,然后提单了,并且询问开发为什么会有这种问题,最后开发说,这是因为数据库中插入了一条脏数据 ,这个数据没有用户名,然后有密码导致,他们说他们会修复。
面试的建议
-
最好是能够主导面试的氛围,控制面试官问的问题。(如果他有准备往往很难控制)
-
面试必然会问3类:你简历中写的技术;公司中使用的技术;扩展知识(超出面试者个人的知识,都是我们面试时不知道的内容)
-
面试时的问题,本质上就是在了解“我们是怎么做的”。
例如:你知道HTTP协议吗?
这个问题不是在问题你知不知道HTTP协议,而是再问HTTP协议是什么,有什么特点,由哪些部分组
成。你写过测试用例吗?
我曾经对登陆接口设计过接口测试用例,按照测试方法论等价类、边界值等方法设计了登陆的测试用
例,一共设计了46个。主要的关键元素是用例的测试名称,操作步骤,严重等级,预期结果这些部分。
3、什么时候开展接口测试?
- 在我们公司中,一般是在前后端开发联调后进行接口测试。
- 但是,我可以提前介入,例如在后端开发输出接口文档之后就开始进行模拟的接口测试,编写接口测试脚本。
- 我们可以在UAT阶段进行接口的回归测试。
- 持续集成时,使用自动化接口自动地持续监控版本质量
4、接口测试和UI测试的工作是否重复?
-
答:您好,请问您问的接口测试和功能测试是否重复吗?
如果是,那么他们是有重复场景的。 如果不是,那么接口和UI测试是完全分离,没有重复。
接口测试和功能测试在业务逻辑上是重复的。但是接口测试更注重后端的交互,而功能测试可以注重前端UI的交互。这样的话各有侧重点,能更好的管理测试。
但是,在当前的行业当中,很多公司基本上都是通过功能测试来进行接口测试,有的时候会省略接口测试,但是这种测试风险比较高,功能测试无法覆盖后端接口测试中性能和安全等测试点,导致测试不充分,有很高的上线风险。
5、接口测试框架怎么搭建的?
-
答:在公司里面,我们对我们的人力资源管理项目进行了测试,使用的是python +unittest+request+parameterized+HTMLTestRunner_PY3+pymysql来进行接口测试。
-
unittest主要用于管理接口测试用例
-
requests模块用于发送接口请求和封装接口
-
parameterized用于参数化
-
HTMLTestRunner_PY3用于生成美观的测试报告
-
PYmysql操作数据库
在我们的接口框架中,我们首先是新建一个项目,然后再把项目所需要的目录结构搭建好,接着安装框架需要使用的requests,parameterized,htmltestrunner,pymsyql这些工具包。
然后先封装人力资源管理系统的登陆、员工模块、部门模块的接口,然后再编写接口测试。
编写脚本会调用封装的接口,来进行接口测试。最后再run_suite.py中生成测试报告。report目录用来存放测试报告,utils存放自定义工具。(这个过程可以用笔的形式把他们画出来,然后写出调用关系)
表达 :逻辑要清晰。
6、接口之间有依赖时怎么处理?
-
答:(也要结合实际的项目回答)可以用关联,我之前在公司中对人力资源管理系统进行接口测试时,其中登陆、员工管理模块都有接口依赖关系,我遇到后,使用Postman工具,先获取上一个接口的返回数据,然后保存到全局变量,接着在下一个接口中调用保存的变量,从而实现关联来解决接口之间的依赖关系。其中,对员工的增删改查时,先获取登陆接口中的令牌,然后在添加员工时,把令牌传入到请求头的Authroization当中,从而实现添加员工接口,实现接口依赖关系。
-
Request也可以请求之后解析保存response
7、如何判断接口测试的结果(成功或失败)?
- 答:这个问题,要结合实例的案例来进行说明,我举个例子,对注册接口进行测试时,要从3个方面要校验注册的结果。
- 1,注册成功后,断言注册接口的返回数据是否与预期一致。
- 2,注册成功后,还要对比入库的数据,与预期是否一致,如果涉及多个表的操作,操作也要符合预期。
- 3,注册成功后,还需要进行业务逻辑校验,如进行登陆操作,判断是否能够使用注册账号登陆成功,(前提条件登陆是正常的)
8、你常用的接口请求方式和区别?
-
答:常见的接口请求方式有:Get、Post、Put、Delete这四个。
Get:用于查询
Post:用于新增
Put:用于修改
Delete:用于删除 -
但是,其中Get和Post有显著的区别。
- 1,Get请求没有请求体,而Post请求一般都有请求体
- 2,Get请求没有Post请求安全,因为Get请求的数据是放在URL中显示的,可以直接看到数据。而Post请求是放在请求体,需要抓包才能看到数据。但是他们两个都不是特别安全。真正安全的办法,是对敏感数据进行加密。
- 3,Get请求的数据包大小没有Post请求那么大。
- 4,Get请求能支持的编码格式没有Post请求多,例如:Get请求一般不用来传递图片,Post请求可以用来处理图片。GET请求只能传递ASCII数据,例如中文不是属于ASCII,所有GET请求中需要传递中文时,需要encode编码数据,把它转换成ASCII码能够支持的数据
9、发送HTTP请求时,传递参数的途径有哪些?
- 答:URL中的查询参数和URL的资源路径,请求体,请求头,Cookie
10、持续集成如何做的?自动化测试多久构建一次?
-
答:在我们公司的当中,我们会对IHRM系统进行了持续集成接口测试,用来验证旧版本的质量,同时还能监控环境的稳定性。
在我们公司里面,使用了jenkins + git + 接口测试代码 + email + publish html report来做持续集成,使用了到了定时构建、轮巡构建等构建。用来持续地运行和监控版本质量。
一般在我们公司当中,一天构建2次,主要是开发会在上午和下午下班前分别提交一次代码,所以构建2次。
但是呢,有时候如果要监控环境地稳定性,那么是1小时执行1次。一天24次。
11、使用工具和代码实现接口测试的区别?
- 工具:使用简单,但是不灵活。可以应用一些非定制化需求测试。
- 代码:非常灵活,但是学习成本高。可以应用一些定制化测试。
- 定制化:主要是指,针对一些功能定制化的开发。例如:某个项目有一个标准版本的代码,这个代码提供了登陆、个人用户信息管理、商品列表、购物车、支付、验证码、商超、金币商城等标准功能模块的产品。如果这个时候有一个客户提出需要增加别的功能,例如秒杀功能,那么这种他们提出的功能,就是定制化的功能。
12、项目上测试了多少接口?
接口数量的参考
- 组织架构
- 添加
- 修改
- 查询(查询1个,查询多条,条件查询)
- 删除(删除1个,删除多个)
- 员工管理添加
- 修改
- 查询(查询1个,查询多条,条件查询)
- 删除(删除1个,删除多个)
- 劳动合同
- 添加
- 修改
- 查询(查询1个,查询多条,条件查询)
- 删除(删除1个,删除多个)
- 权限管理
- 添加
- 修改
- 查询(查询1个,查询多条,条件查询)
- 删除(删除1个,删除多个)
- 福利管理
- 添加
- 修改
- 查询(查询1个,查询多条,条件查询)
- 删除(删除1个,删除多个)
- 工资管理
- 添加
- 修改
- 查询(查询1个,查询多条,条件查询)
- 删除(删除1个,删除多个)
- 考勤管理
- 添加
- 修改
- 查询(查询1个,查询多条,条件查询)
- 删除(删除1个,删除多个)
- 等模块
13、HTTP和HTTPS的区别
14、GET和POST的区别
15、Cookie和Session的区别
16、定位前后端bug
- 要分析这个问题,我们使用抓包工具fiddler来分析(浏览器的F12),来通过fiddler判断点击发表按钮,有没有触发接口请求。
- 如果没有触发接口请求,那么可能是前端问题。如果触发了接口请求,但是服务器没有响应数据,那么是服务器问题
- 如果触发了接口请求,服务器响应数据不正确,那么也是服务器问题
- 如果触发了接口请求,服务器响应数据正确,那么又没有反应说明是前端问题
- 还有一些特殊的场景,例如令牌失效,这个停留时间超过了令牌有效期,导致会话失效,从而能够导致点击发表按钮没有返回。
- 鼠标失灵
- 电脑死机
- 页面卡死
- 没有网络等场景,都会导致点击发表没有任何反应