一、接口测试
1、接口测试用例的编写要点有哪些?(问法二:接口测试用例设计需要考虑哪些方面?问法三:接口测试中有哪些要注意的测试点?)
1) 考虑输入参数和输出参数的合法性,参数必填,默认值,参数长度和格式校验,边界等,图片长传考 虑图片大小和格式。查询考虑数据排序,分页考虑分页显示等。
2) 业务逻辑和功能实现
3) 数据库校验
4) 性能测试(接口tps、响应时间等)
5) 兼容性,新老版本数据的兼容
6) 安全性,敏感信息加密,恶意攻击的防范,权限控制等
7) 幂等性(接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为 多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但 是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果 成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性)
2、你是怎么测试接口的?(问法二:说一下你们接口测试流程?)
1**、获取接口文档,熟悉单接口以及链路接口业务,包括接口地址,请求方式,鉴权方式,入参,出 参,错误码等。**
2**、编写接口测试用例并评审。**
接口功能用例设计:
1) 正例:单接口返回成功场景!链路接口(业务流接口)逻辑实现!
2) 反例:
鉴权反例:鉴权码为空,错误的鉴权码,鉴权码已过期......
参数反例:参数为空,参数类型异常,参数长度异常, 错误码反例:(根据业务而定)
其他反例场景:
如接口黑名单,接口调用次数限制等,分页场景:(0,第一页1,中间页5,最后一页10,100,其他 业务异常)
3) 兼容性用例:比如一个接口需要兼容多个版本的前端调用。
3**、使用接口测试工具Postman/Jmeter执行接口测试**
通常执行过程中需要考虑以下几个方面:
1) 是否满足前提条件:有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token
2) 参数之间是否存在关联:有些参数彼此之间存在相互制约的关系
3) 参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到 你的请求,就能获取到你的信息 了,加密规则是否容易破解。
4) 参数是否是动态参数。
5) 接口是否需要签名验证等。
4**、实现持续集成并输出接口测试报告发送电子邮件,企微(钉钉群)等,有bug报bug。**
5**、每天晚上12点都会运行一次,从而监控是否有因开发代码变更或者新功能添加而导致的遗漏接口
bug。**
3、get和post的区别
区别在于:
1) GET一般用于查询数据;而POST一般用于添加、删除或修改数据。
2) 传参方式不同:get通过地址栏传输,post通过表单报文传输,所以post请求比get请求的安全性相对 较好。get请求可以直接通过浏览器访问,支持刷新和后退。post请求不能直接使用浏览器访问,刷新后 数据要重新发送。
3) 传参长度不同:get参数有长度限制(受限于url长度),而post无限制
4) GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据),POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)、
03:48
4、http和https的区别
1) http是超文本传输协议,信息是明文传输,Https协议是由HTTP协议+SSL协议构建的加密传输协 议,比http协议安全;
2) http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
3) HTTP 无需证书,而 HTTPS 需要认证证书
5、cookie,session,token有什么相同点和不同点。
相同点:三者都是用于鉴权并且都是由服务器产生的。不同点:
1. cookie保存在客户端的浏览器上,cookie不安全,其他人可以通过分析存放在本地的cookie并进行cookie欺骗。
2. session比cookie安全,它会在一定时间内保存在服务器的内存,但当访问增多时,比较占用服务器的 性能。单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。
3. token就是令牌,是一个字符串,主要是用于做客户端身份认证,通常登录成功后,服务端会返回token,客户端需要把token值保存下来,后续请求其他接口时,需要在请求中携带这个token值,只有 服务端对token校验通过后,才允许访问。
6、你平常做接口测试的过程中发现过哪些bug?多吗?(问法二:接口测试有没有测试出什么问题?)
接口测试中发现的bug,大多都是接口没按约定返回结果,参数为空,参数长度或类型校验、参数边界 值、代码逻辑、数据错误、或没有返回合理的错误提示等方面的问题。
(1) **一般在前后端联调阶段执行接口测试发现的 bug 会很多**(之前开发写代码的时候,所有的ajax 数据都不是后端返回的真实数据,而是我们自己通过接口mock模拟的假数据,当前端的代码编写完毕, 后端的接口也已经写好之后,我们就需要把mock数据去掉,尝试使用后端提供的数据,进行前后端联 调,这个过程我们就把它称之为前后端的接口联调。)
前后端联调接口Bug案例:
比如1:查询列表页接口,前端想分页,Mock就写了三条测试数据,调用后端接口时分页有问题? 比如2:前端访问的mock数据时没有考虑鉴权。访问真实的后端接口时没有权限。
(2) **然后在接口冒烟测试、回归测试阶段执行接口测试的时候,bug就不多。**
常规接口Bug案例:
比如1:新增促销活动接口,满减金额为空也能保存成功,原因是后端代码没有对满减金额参数做空值判 断。
比如2:活动列表接口,查询出来的活动数据少了第一条,原因是SQL中limit条件传入起始序号是1而不 是0
比如3:更新活动接口,接口提示更新成功,但是数据库中的update_time字段没有更新成最新时间,原 因是开发忘记更新这个字段
比如4:比如说下订单接口,商品的价格参数是300元,那我在提交订单时候,我把这个商品的价格改成
3元,后端并没有做验证,更狠点,我把钱改成-3,我的余额还增加了?
接口鉴权Bug案例:
比如1:比如说修改商品信息接口,只有卖家权限才能修改,我传一个普通用户也可以修改成功,我传一 个其他卖家用户也能修改成功。
比如2:之前有个退保接口,下游系统加了身份证证件有效期校验,导致被测系统接口调用跑不通,通过 自动化发现的问题,并及时去评估到对被测系统的影响。
7、你在接口测试中是怎么校验接口返回结果是否正确?
1) 验证接口响应状态码是否是200。
2) 当接口响应正文比较短,比较固定时验证响应的完整内容是否等于预期。
3) 当响应内容较长较多时,验证响应报文是否包含关键信息。
4) 当响应正文为XML格式或JSON格式时,可以通过XPATH或JSONPATH,正则表达式,获取其中的某个节点,验证响应报文关键字段是否存在。
5) 查询数据库或调用其余接口查询。当要验证的信息在当前测试接口的响应内容中不存在时,可以调用 其他接口来验证。例如,一个增加用户信息的接口,要验证信息确实增加成功了,可以再调用查询用户 信息接口来确认用户信息添加成功。当然,在获取数据库查询权限的情况下,也可以直接查询数据库来 验证。
8、为什么要做接口测试
A、 在目前前后端分离开发的模式下,项目在开发过程中,客户端和服务端开发的进度不一致,比如服务端先开发完了,这个时候可以先对服务端进行接口测试,确保服务端逻辑和返回数据是正确的,然后 再测试客户端。
B、在测试某些业务时,不能仅仅通过前端来测试,比如用户注册,前端限制了用户名不能为空,但是 可以通过工具绕过前端直接调用服务端接口,如果服务端没有做相关的逻辑判断,就会造成数据错误。 包括接口数据传输过程中是否对关键信息加密等。所以必须针对服务端接口做测试。
C、接口测试属于集成测试、测试介入越早、就越能在项目早期发现问题,其修复问题的
成本越低,在开发提测后,可以先通过工具把服务端的接口测试跑一遍,确保接口测试用例都是通过 的,快速判断服务端接口是否符合预期。然后再通过UI界面进行测试。否则接口有bug,前端页面必定 有bug。并且接口测试非常快速、接口测试用例执行的时间是毫秒级的。
9、说一下你知道的HTTP状态码,以及它们代表什么意思
1xx | 信息提示(表示临时的响应) |
200 | 正常(表明服务器成功地接受了客户端请求) |
307 | 重定向(服务器要求客户端重新请求一个新的URL) |
401 | 未授权,需要身份认证 |
403 | 服务端禁止访问 |
404 | 请求的资源未找到(比如url写错了,页面被删除等) |
405 | 请求方法不允许(比如服务端的POST类型,客户端使用GET方式请求) |
5xx | 服务端内部错误(服务器由于遇到错误而不能完成该请求) |
10、一个接口请求不通该如何排查?
可能的原因是:
1. 检查请求四要素:请求方式,请求路径,请求头,请求参数是否写错。
2. 客户端和服务端网络不通
3. 服务端项目没有部署起来,接口无法访问。
4. 请求被服务器的防火墙拦截了
5. 服务端程序内部发生了错误
6. 没有访问权限(比如缺乏token、cookie之类)
7. 客户端设置了网络代理(比如打开了Fiddler/Charles等抓包工具) 8.如果是浏览器访问,是不是绑定了错误的hosts
11、接口测试中的加密或签名的接口如何处理?
加密接口:
1) 首先要先了解接口使用的加密方式(如:base64、md5、sha系列加密、rsa加密等)
2) 检查接口测试工具是否支持这种加密方式,如果支持的话,直接使用对应功能就行了(比如Jmeter
支持md5);如果加密方式是公司内部特有的算法,可以在接口测试工具中调用公司的加密算法代码
(如jar包)来实现加密。
签名接口:
了解签名规则之后,在接口请求之前先对参数按照签名规则加密之后再发送请求。签名sign一般通过请 求头传值。
12、你们项目中有哪些接口,举几个例子
结合项目去说:一般不低于3-5个接口案例(不能包括登录和注册接口),记住一条原则就是:凡是有数 据交互的地方就一定有接口。比如:增,删,改,查的功能接口。自动化测试技术交流群: 321255410
13、没有接口文档,如果做接口测试?
方式一:可以使用Fiddler、Charles等抓包工具抓取接口数据之后整理成接口文档,接口中不清楚的字 段,找时间集中找开发解答。然后再进行接口测试;
方式二:可以通过Jmeter的代理录制功能,先把接口请求录制下来,然后再逐一进行接口测试。
14、依赖于第三方数据的接口如何进行测试?
可以通过Postman搭建mock服务,但是Postman的mock服务有访问次数限制,每天只能访问1000 次,也可以通过Flask,Servlet等技术搭建接口Mock服务器。
15、依赖于登录状态的接口如何测试?
答:依赖登录状态的接口的本质上是在每次发送请求时需要带上session或者cookie才能发送成功,
postman会自动关联cookie,jmeter通过添加http cookie管理器来处理cookie关联。
16、常见的请求头以及它们的作用是什么?
Accept: (客户端可以接收的数据格式)
X-Requested-With:(ajax请求,异步请求) User-Agent: (客户端的用户)
Content-Type: application/x-www-form-urlencoded; charset=UTF-8(内容的格式)
Cookie: csrf_token=2c76c391ab3922fe; (cookie信息)
17、工作中常用的jmeter自带函数有哪些
1) random():随机数函数
2) randomString():随机字符串函数3) time():获取当前时间戳函数
4) md5():加密函数
5) setpropty():跨线程组设置属性值函数
18、使用jmeter如何做接口之间的数据关联
接口数据关联指的是上一个接口的某个返回值,作为下一个接口的请求参数。
如果上一个接口返回的是json格式的,可以用json提取器把数据保存到一个变量里,如果是其他格式 的,可以使用正则提取器保存数据。
那么在下一个接口中,直接使用${变量名}就能使用这个数据。
19、Jmeter中常用的断言方式
1、Json断言,可以通过Json路径表达式判断接口返回的Json字符串中某些字段是否符合预期
2、响应断言,可以判断响应头/响应体中是否包含预期的字符串。区别在于:Json断言只能判断Json格式;响应断言只要是文本格式都可以判断,应用范围更广
3、beanshell断言,可以判断当一个接口经过CSV数据驱动之后,对返回的正常结果和异常结果同时进 行判断。
总结
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面
自动化测试相关教程推荐:
2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili
2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili
测试开发相关教程推荐
2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili
postman/jmeter/fiddler测试工具类教程推荐
讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili
2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili
2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili
总结:
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!