二、接口测试知识点总结
1.什么是接口测试?
- 接口测试:是测试系统组件间接口的一种测试方法
- 接口测试的重点:检查数据的交换,数据传递的正确性,以及接口间的逻辑依赖关系
- 接口测试的意义:在软件开发的同时实现并行测试,减少页面层测试的深度,缩短整个项目的测试周期
2.接口自动化测试的流程?
基本的接口功能自动化测试流程为:需求分析-->用例设计-->脚本开发-->测试执行-->结果分析
3.GET请求和POST请求区别是什么?
- GET请求:用于信息获取,相对而言是安全和幂等的;在做数据查询时,建议用GET方式,如:商品信息接口、搜索接口、博客访客接口...
- POST请求:表示可能会修改服务器上资源的请求;在做数据添加、修改时,建议用POST方式。如:上传图片接口、登录注册接口...
误区:
“GET是从服务器上获取数据,POST是向服务器传送数据”(该说法有误)
解析:
GET/POST都可以提交数据,GET请求也可以向服务器传递数据,POST请求也需要服务器返回数据
4.接口测试的常用工具有哪些?
Postman、JMeter、SoapUI、Poster、RESTClient、WireMock
5.HTTP接口的请求参数类型有哪些?
- 查询字符串参数(Query String Parameters参数)一般用于GET请求,会以url string的形式进行传递
- 请求体参数(Request Body)一般用于POST请求,可以使用Content-Type来指定不同参数类型
6.如何从上一个接口获取相关的响应数据传递到下一个接口?
先从上一个接口中的响应数据获取对应的返回值,然后使用正则表达式or使用JSON解析来提取需要获取的值,然后存储在一个变量中,最后在下一个接口中直接引用该变量即可
7.接口测试用例的编写要点有哪些?
1)必填字段:请求参数必填项、可选项
2)合法性:输入输出合法、非法参数
3)边界:请求参数边界值等
4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
5)响应数据校验:断言、数据提取传递到下一级接口...
6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点
8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
8.接口测试的步骤有哪些?
1)发送接口请求
2)测试接口获取返回值
3)断言:判断实际结果是否符合预期
9.接口测试中依赖登录状态的接口如何测试?
依赖登最状态的接口,本质上是在每次发送请求时需要带上存储有账户有效信息的Session或Cookie才能发送成功,在构建POST请求时添加必要的Session或Cookie
10.依赖于第三方数据的接口如何进行测试?
可以利用一些MOCK工具(如:JSON Server、Easy Mock)来模拟第三方的数据返回,最大限度的降低对第三方数据接口的依
11.当一个接口出现异常时候,你是如何分析异常的?
1.抓包,用fiddler工具抓包,或者浏览器上f12,app上的话,那就用fiddler设置代理,去看请求报文和返回报文了
2.查看后端日志,xhell连上服务器,查看日志
12. 如何模拟弱网测试
fiddler和charles都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试
13.如何分析一个bug是前端还是后端的?
平常提bug的时候,前端开发和后端开发总是扯皮,不承认是对方的bug 这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对 请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题。
14.cookie和session的区别
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
(5)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie。
15. 在手工接口测试或者自动化接口测试过程中,上下游接口有数据依赖如何处理?
答:在工具中可以使用全局变量等方式将需要的数据进行传送
16.依赖第三方数据的接口如何进行测试?
答:可以使用SoapUI等工具直接调用第三方数据接口的webservice,通过返回值来查看第三方数据的接口是否调用正常
也可以利用一些MOCK的工具来模拟第三方的数据返回,最大限度的降低对第三方数据接口的依赖
17. 接口测试中,依赖登录状态的接口如何测试?
答:依赖登录状态的接口的本质上是在每次发送请求时需要带上session或者cookie才能发送成功,在构建POST请求时添加必要的session或者cookie
18.什么是API?
API是(Application Programming Interface)首字母缩略词,即应用程序编程接口。 API是一组用于构建软件应用程序的规程,协议和工具。API充当软件应用程序之间的接口,并允许两个软件应用程序相互通信。 API是一组软件功能,可以由其他软件执行.
19.列举一些最常用的HTTP方法?
GET:从服务器检索数据
POST:将数据添加到服务器中的现有文件或资源
PUT:它允许您替换服务器中的现有文件或资源
DELETE:它允许您从服务器中删除数据
PATCH:用于对资源进行部分修改
选项:用于描述目标资源的通信选项
HEAD:它要求响应与GET请求相同,但没有响应正文
20.接口测试能发现哪些问题,你平常做接口测试的过程中发现过哪些bug?
这个问题其实回到起来很简单,只要做过接口测试的,总能发现几个BUG吧,把你平常发现的bug说2-3个就可以了。
面试官出这个题,主要是想知道你是不是真的做过接口测试,毕竟现在很多小伙伴简历都是写的假的(你要不写估计面试机会都没有,没办法,为了生存,能理解)
比如上面说的,提现输入框,在页面上输入负数,肯定是无法提交过去(前端页面会判断金额),如果我不走前端,直接用接口工具发请求,输入一个负数过去。
(假设服务端没做提现金额数据判断)
余额=当前余额(100)-提现金额(-100),那么提现-100,余额就变成200了,也就是越提现,余额越大了.
21.对于接口测试中产生的垃圾数据如何处理?对于不可逆操作,比如删除订单,如何保证数据可用性?
这个问题考察的是你,能否在接口测试过程中动态的去处理测试数据。具体来说就是:在需要测试数据的时候,能够自动生成。在测试完毕后,能清除测试过程产生的垃圾数据(尤其对于生成环境)。
接口的请求数据,很多都是需要依赖前面一个状态的 比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。 平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库做增删改查的操作。如果没有数据库的直接操作权限,可以间接的调用其他接口(比如下单接口)生成数据。在自动化测试中测试用例前置操作,setUp做数据准备。
对于垃圾数据的处理,和上面说到的生成数据的方式一样,调用相关接口(比如删除订单接口)或直接链接数据库进行数据删除。在自动化测试中使用后置操作,tearDown做数据清理。对于非生产环境,如果不想造成数据污染也可以切换影子数据库或者使用mock服务,不真实生成数据。
22.说一说你所知道的接口安全测试?
安全这个问题,所有的团队都很看重。接口的安全测试主要有以下几个方面:
接口对于请求参数篡改的预防
引入签名、参数MD5加密等
关于接口身份认证存在的漏洞
cookie仿冒、session劫持、平行和垂直越权
完善接口的防刷机制
比如暴力破解短信验证码、找回密码功能的枚举破解安全问题
竞争条件—利用线程并发漏洞
超过限制下单、同时申请多笔退款
注入类攻击
sql注入、sqlmap 接口注入检查
23. 你用过哪些测试工具,它们的特点分别是什么?
回答提示:
① Jmeter: 是一个100%的纯java桌面应用,能够对HTTP和FTP服务器进行压力和性能测试, 它原先用于Web应用测试,后来扩展到其他测试领域;另外Jmeter一般用于接口测试,验证接口的输入值请求是否返回了期望输出的结果。
② JUnit:是一个Java语言的单元测试框架,用于编写和运行可重复的测试。Junit测试即所谓的白盒测试,它包括以下特性:用于测试期望结果的断言(Assertion);用于共享共同测试数据的测试工具;用于方便的组织和运行测试的测试套件;图形和文本的测试运行器。
③ TestLink: TestLink 是基于web的测试用例管理系统,主要功能包括有测试需求管理、 测试用例管理、测试用例对测试需求的覆盖管理、测试计划的制定、测试用例的执行、大量测试数据的度量和统计功能。目前在XLS导入上存在缺陷,但可以使用第三方的“Testlink Convert”工具实现XLS/TXT/XML导入导出。
24.接口测试是目前最主流的自动化测试手段,它向服务器发送请求,接收和解析响应结果,通过验证响应报文是否满足需求规约来验证系统逻辑正确性。接口的响应类型通过Content-Type指定,常见的响应类型有:
· text/html : HTML格式
· text/plain :纯文本格式
· text/xml : XML格式
· application/xml : XML数据格式
· application/json : JSON数据格式
25.接口测试汇总响应断言:模式匹配
· 包括:支持纯文本和正则,验证返回包括指定的内容
· 匹配:支持纯文本和正则,正则需全匹配(正则必须匹配全部返回,而非部分返回)
· Equals:字符串相等,纯文本匹配,验证返回结果和指定结果完全一致
· SubString:字符串包含,纯文本匹配,验证返回结果包含指定结果
· 否:结合上述条件取反,若上述断言结果为false,取否后,最终断言结果为true
Json断言
Json断言是针对Json报文的断言方式,通Json Path提取出Json响应报文中的字段,再采用纯文本或者正则去验证Json Path的提取结果,Json结合了Json Path和正则表达式,有如下选项:
· Additionally assert value:文本验证,此处是完全匹配,勾选上此选项后再勾选Match as regular ,可以触发正则匹配。
· Match as regular :支持正则表达式匹配
· Expect null:判定返回为null
· Invert assertion:倒置断言结果