常见的接⼝测试⾯试题

根据⽹络资料,总结了以下⼀些常见的接⼝测试⾯试题:

1. 为什么要做接⼝测试?

        在讨论为什么要做接⼝测试之前,我们先稍微了解下接⼝是什么?
接⼝可以很不准确的理解成是与资源打交道,这个资源可能是本系统的,也可能是其他系统的。
举个例⼦,假如我们在开发1bug管理系统,该系统需要拿到公司的所有开发和测试⼈员的信息,这样开发和测试⼈员不⽤注册都可以登录进去了,这应 该很好理解。
        那么这些⼈员的信息储存在哪⾥呢?⼀般存储在hr系统⾥。现在的需求更加明确了,我们要到hr系统中去拿到⼈员信息,获取hr系统中的⼈员资源。
        怎么拿呢?很多种⽅式,可以直接把hr系统的数据库拷贝⼀份放到bug管理系统⾥,不过这样不好,因为数据的同步会有点⿇烦;还可以直接连hr系统的数据库去查,这样也不太好,这样我们就需要了解hr系统的数据存储结构和逻辑,⼀旦hr系统的数据字段发⽣改变,bug管理系统也要去该,以便同步。
        ⽐较好的做法是,hr系统暴露⼀些接⼝,通过这些接⼝去获取⼈员信息资源,这样bug系统就不需要关⼼hr系统的数据存储实现了。
这些接⼝可能是这样的:
  • 登录的接⼝,提供⼈员的⽤户名和密码,去hr系统中判断该⼈员是否存在,如果存在验证⽤户名和密码,如果验证通过就返回1token,该token是这个⼈员的通⾏证,通过token可以登录到bug管理系统中去;
  • 获取⼈员信息的接⼝,返回该⼈员的职位:测试还是开发,以及⽤户名,昵称等信息;
综上:接⼝可以理解成是不同系统或模块之间资源交流⽅式。
接⼝测试实际上是⿊盒测试,基本的测试思路是根据输⼊和输出判断被测系统或对象的逻辑。获取⼈员的信息,我需要把⼈员的⽤户名传给hr系统接⼝,
这样hr系统的接⼝会返回给我⽤户的⼀些更加具体的信息。这⾥的输⼊是⽤户名,输出是⽤户的详细信息。
既然是接⼝获取和操作资源的⽅式,⽽⼤部分系统和产品中,资源⼀般都是产品的核⼼,⽐如微信核⼼资源就是通讯录关系链和聊天记录等,因此资源是
必测的。
另外接⼝中⼤部分的内容是数据,通过数据的对⽐我们能推测到系统和产品的逻辑,测接⼝就是测逻辑。
最后接⼝中的返回相对单纯,不像web页⾯,html代码中有太多ui的东西,ui最不稳定,变化太快,接⼝相对稳定⼀点点,但是⾥⾯的⼲扰信息更少,断⾔
相对容易很多。
请看以下⼀个案例,如下图⼀个提现功能

2. 接⼝测试能发现哪些问题?

接⼝测试能发现哪些问题

这个问题其实回到起来很简单,只要做过接⼝测试的,总能发现⼏个BUG吧,把你平常发现的bug2-3个就可以了。

⾯试官出这个题,主要是想知道你是不是真的做过接⼝测试,毕竟现在很多⼩伙伴简历都是写的假的(你要不写估计⾯试机会都没有,没办法,为了⽣

存,能理解)

⽐如上⾯说的,提现输⼊框,在页⾯上输⼊负数,肯定是⽆法提交过去(前端页⾯会判断⾦额),如果我不⾛前端,直接⽤接⼝⼯具发请求,输⼊⼀个负

数过去。

(假设服务端没做提现⾦额数据判断)

余额=当前余额(100-提现⾦额(-100),那么提现-100,余额就变成200了,也就是越提现,余额越⼤了

可以⽤接⼝⼯具去直接请求接⼝,也可以fiddler抓包,抓到接⼝后修改⾦额为负数所以,接⼝测试的必要性就体现出来了:

1.可以发现很多在页⾯上操作发现不了的bug

2.检查系统的异常处理能⼒

3.检查系统的安全性、稳定性

4.前端随便变,接⼝测好了,后端不⽤变

5.可以测试并发情况,⼀个账号,同时(⼤于2个请求)对最后⼀个商品下单,或不同账号,对最后⼀个商品下单

6.可以修改请求参数,突破前端页⾯输⼊限制(如⾦额)

3. 接⼝测试怎么测?

接接⼝⼝测测试试怎怎么么测测

通过性验证:⾸先肯定要保证这个接⼝功能是好使的,也就是正常的通过性测试,按照接⼝⽂档上的参数,正常传⼊,是否可以返回正确的结果。

参数组合:现在有⼀个操作商品的接⼝,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有⼀个是必传的,type2的时候是删除

商品,

商品id是必传的,这样的,就要测参数组合了,type1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

接⼝安全:

1、绕过验证,⽐如说购买了⼀个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把

钱改成-3,是不是我的余额还要增加?

2、绕过⾝份授权,⽐如说修改商品信息接⼝,那必须得是卖家才能修改,那我传⼀个普通⽤户,能不能修改成功,我传⼀个其他的卖家能不能修改

成功

3、参数是否加密,⽐如说我登陆的接⼝,⽤户名和密码是不是加密,如果不加密的话,别⼈拦截到你的请求,就能获取到你的信息了,加密规则是

否容易破解。

4、密码安全规则,密码的复杂程度校验

异常验证:

所谓异常验证,也就是我不按照你接⼝⽂档上的要求输⼊参数,来验证接⼝对异常情况的校验。⽐如说必填的参数不填,输⼊整数类型的,传⼊

字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传⾮必传、参数类型、⼊参长度。

性能测试

接⼝并发情况,如上⾯提到的:⼀个账号,同时(⼤于2个请求)对最后⼀个商品下单,或不同账号,对最后⼀个商品下单

接⼝响应时间,响应时间太长了,肯定需要优化,⼀般都是毫秒级别

4. ⽤什么⼯具测接⼝?

⽤⽤什什么么⼯⼯具具测测接接⼝⼝

: 推荐。基本功能免费。最简单的基于http接⼝的调试和测试⼯具;

:后置处理器配合断⾔基本上可以满⾜接⼝测试需求,就是测试报告要做⼆次开发

⾃⼰撸代码:推荐。配合类似xunit测试框架,基本可以满⾜⼀切需求;

: 收费的;

:强⼒推荐。postman的弱化版,基本功能免费,重要的是⼯具代码开源,可以⾃⼰改;

: 强⼒推荐。mac上最强,淘宝买个授权好像就百把块钱;

5. WebService接⼝是如何测试的?

webService接⼝⽤SoapUI

6. 没有接⼝⽂档如何做接⼝测试?

        没有接⼝⽂档,那还能咋办,瞎测呗!⼀个公司的开发流程⾥⾯,如果接⼝⽂档都没有,是⽆法展开接⼝测试的,你都不知道这个接⼝⼲什么的,也不知道具体每个字段代表什么意思,那还测啥呢?

        --当然,你肯定不能回答⾯试官不测(⼼理mmp,脸上笑嘻嘻),接下来就是扯犊⼦时间

1.没有接⼝⽂档,那就需要先跟开发沟通,然后整理接⼝⽂档(本来是开发写的,没办法,为了唬住⾯试官,先说⾃⼰整理了)

2.没有接⼝⽂档,可以抓包看接⼝请求参数,然后不懂的跟开发沟通

        本题主要靠情商,通俗来说就是忽悠能⼒,先唬住⾯试官了再说,进去了也是瞎测测,随时做好背锅的准备

7. 在接⼝测试过程中,上下游接⼝有数据依赖如何处理?

在在接接⼝⼝测测试试过过程程中中,,上上下下游游接接⼝⼝有有数数据据依依赖赖如如何何处处理理

⽤⼀个全局变量来处理依赖的数据,⽐如登录后返回token,其它接⼝都需要这个token,那就⽤全局变量来传token参数

8. 依赖第三⽅数据的接⼝如何进⾏测试?

        这个标准答案是:mock

        接着⾯试官会问你,如果mock的,然后你就顺着坑继续挖,搭建mock服务,参考这篇

9. 当⼀个接⼝出现异常时,你是如何分析异常的?

        1.抓包,⽤fiddler⼯具抓包,或者浏览器上f12,app上的话,那就⽤fiddler设置代理,去看请求报⽂和返回报⽂了。

        2.查看后端⽇志,xhell连上服务器,查看⽇志。

10. 如何模拟弱⽹测试?

        fiddlercharles都可以模拟弱⽹测试,平常说的模拟丢包,也是模拟弱⽹测试

 

11. 如何分析⼀个bug是前端的还是后端的?

        平常提bug的时候,前端开发和后端开发总是扯⽪,不承认是对⽅的bug 。

        这种情况很容易判断,先抓包看请求报⽂,对着接⼝⽂档,看请求报⽂有没问题,有问题就是前端发的数据不对。请求报⽂没问题,那就看返回报⽂,返回的数据不对,那就是后端开发的问题。


 

WebService接接⼝⼝是是如如何何测测试试的的

webService接⼝⽤SoapUI没没有有接接⼝⼝⽂⽂档档如如何何做做接接⼝⼝测测试试

### 如何在Java中实现Comparable口 #### Comparable口简介 `Comparable<T>` 口用于定义对象之间的自然顺序。当类实现了 `Comparable<T>` 口时,意味着该类型的实例可以相互比较大小。这通常通过重写 `compareTo(T o)` 方法完成。 #### 实现Comparable口的方法 要使自定义类支持排序功能,需让此类继承 `Comparable<YourClass>` 并覆盖其唯一的抽象方法——`int compareTo(YourClass other)` 。此方法返回负数表示当前对象小于参数对象;零代表两者相等;正数则说明前者大于后者[^1]。 #### 示例代码:按年龄升序排列的人类实体 下面是一个简单的例子展示怎样创建一个能够依据成员变量age进行升序排序的Person类: ```java class Person implements Comparable<Person> { private int age; private String name; public Person(int age, String name){ this.age = age; this.name = name; } @Override public int compareTo(Person p) { return Integer.compare(this.age, p.age); } @Override public String toString(){ return "Name:"+this.name+", Age:"+this.age; } } ``` 在这个例子中,`Integer.compare()` 函数被用来简化整型数值间的对比操作。如果希望改变默认的排序方向(比如改为降序),可以在调用 `compare()` 前加上负号 `-` 或者交换两个参数的位置[^2]。 对于更复杂的场景下可能还需要考虑多个字段共同决定最终的结果,在这种情况下应该遵循一定的逻辑组合各个属性来进行综合评判。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lifewange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值