接口测试 接口测试的问题,急~

徐旻 · 2017年03月04日 · 最后由 ting 回复于 2017年03月28日 · 2896 次阅读

背景:手工测试外包项目经理,接触自动化以后感觉能稳定提高产品质量。提议公司引入自动化,但是客户觉得没有必要,自己学习然后去朋友公司里去构建自动化测试框架。(请假去搭建框架,所以每去一次必须要获得很多信息。)

经过:我按照我自己对于接口的理解,参考了 home 里以前大家写的框架,搭建了一套自动化接口测试的框架。朋友这里给我一个项目做试点,这个项目包括 app 和 web 两个部分。但是他给我出了一个难题,就是要先做 web 的接口测试。开始我以为 web 的接口和 app 的接口一样,接触下来完全不一样。今天越设计越感觉不对,所以和项目开发沟通了一下。我把和他沟通话放出来,请大家给我解惑。

起源是我在测试一个接口,这个接口的功能是根据 lid 的值(lid 可以理解为一个频道的号码)然后提交提问请求。
我开始设计测试用例。 我设计 lid 为-1,0,1,19,999,@
我发现只要我用整数去发请求,得到的返回都是一样的。

{"HasError":false,"ErrMessage":"","ObjectValue":1860,"HRESULT":"0"}

我就纳闷了,这是什么情况。以为没有-1 , 0 , 999 这些频道,尽然也返回数据处理正常。

这个是开发对我的回答的回复
一、跨系统交互的接口需要验证的约束和明确的协议,页面和异步接口主要用作用户预期的交互和展现,不是接口标准,所以只对表现和交互负责。这个需要跟接口区分开来。
我的理解:web 页面的接口大多数是异步接口,和我们平时说的接口不一样。所以做自动化测试有很大的难度。目前自动化测试接口一般是 app 和后台交互的那种。

二、这个是接口标准验收的边界和非预期数据的安全测试用例,不适用于页面和页面的用户异步接口,您要我写的是系统间调用的接口,而非用户基于 UI 逻辑的预期数据交互接口。
我的理解,这种接口的验收标准,其实只要在正确的逻辑下跑同乐就可以了。那种边界值,非预期的数据测试属于 安全测试。

三、那是客户端系统和后端系统自定义的通讯和交互,我们这个直接是基于展现的页面,没有客户端的概念,要说客户端那就是用户浏览器,协议就是 http1.1 数据协议就是 HTML
我的理解,这个就是 app 和 web 本质的区别,其实 web 没有什么所谓的接口,他们都是直接用 html 显示的。(换句话说 web 做接口测试 是不存在的。)

四、嗯,缺少对非用户操作的异常值引起的空引用做响应的反馈,基本上这种情况我们会在安全测试环节做处理的,如果是自动化测试仅仅自动运营用户的用例也就行了,如果按这样测页面,那估计得考虑是不是做自定义客户端了
我的理解,他又提到了安全性测试,安全性测试到底是个什么东西,网上的解释太多了,我还是没有搞清楚他说的事情,但是猜的话应该是边界值之类的。

五、这个也是 bS 和 APP 不一样的地方,browser 有它自己的地址栏让用户随便输入,APP 没有,但是在安全测试环节会对客户端接口做异常请求测试。
我的理解,安全测试好像是在很底层的测试。

六、可以明确一下项目开展的目的,目的是做自动化测试,那么由于是网站,肯定是按照 “用户操作” 的预期去录制相应的请求和包,用此来验证用例,也请忽略我所编写的 “接口文档”,它不是用户用例,自动化的初级目标是验证预期是否达成,所以我们只要找到预期就行。那些非预期的边界测试多半是应用在测试人员手动执行用户数据交互的功能测试场景的。如果功能测试和安全测试也要做自动化测试,那么就是自动化测试的高级标准了,不过一般的自动化安全测试工具或服务也仅仅做特征不匹配,不做逻辑验证,乌云安全还是得人工手动,且收费的。
我的理解,功能测试和安全测试做自动化,属于高级标准。啥时候还有这种标准。他提到了乌云,但是我去乌云看了下,好像网站关闭了。

太多问题需要思考了,我打算周一就请假过去,但是在过去前,当然要先做好功课,如果有谁知道的,请指点一二,哪怕给点资料也可以。

问题一,web 存在接口测试这种说法吗?
问题二,那种接口边界值的测试也会被叫做安全性测试吗?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 9 条回复 时间 点赞

一、跨系统交互的接口需要验证的约束和明确的协议,页面和异步接口主要用作用户预期的交互和展现,不是接口标准,所以只对表现和交互负责。这个需要跟接口区分开来。
我的理解:web 页面的接口大多数是异步接口,和我们平时说的接口不一样。所以做自动化测试有很大的难度。目前自动化测试接口一般是 app 和后台交互的那种。

这个要看设计,有些应用,是网页一套接口,app 一套接口,分开来的,比如我们 T 站,因为网页的诉求和 app 的诉求不太相同。有些是网页和 app 都是一套,比如很多的 H5 应用,这类应用通常 bs 端不是重点。

理论上来说,接口应该都是一样的,没有什么 bs 和 app 的区别,同样也可以做接口测试,至于异步和接口没有什么关系,我想你应该是说 ajax 吧?

二、这个是接口标准验收的边界和非预期数据的安全测试用例,不适用于页面和页面的用户异步接口,您要我写的是系统间调用的接口,而非用户基于 UI 逻辑的预期数据交互接口。
我的理解,这种接口的验收标准,其实只要在正确的逻辑下跑同乐就可以了。那种边界值,非预期的数据测试属于 安全测试。

这个应该也算是功能测试吧,边界值的测试。正确的逻辑对应会有不正确的逻辑,用户的操作不能琢磨的。

三、那是客户端系统和后端系统自定义的通讯和交互,我们这个直接是基于展现的页面,没有客户端的概念,要说客户端那就是用户浏览器,协议就是 http1.1 数据协议就是 HTML
我的理解,这个就是 app 和 web 本质的区别,其实 web 没有什么所谓的接口,他们都是直接用 html 显示的。(换句话说 web 做接口测试 是不存在的。)

这个协议只是数据传播的协议。https 表示数据加密。web 肯定有接口测试啊,举个例子,你给我这个回复点赞,就是发起了 ajax 请求,请求的就是点赞的接口。

四、嗯,缺少对非用户操作的异常值引起的空引用做响应的反馈,基本上这种情况我们会在安全测试环节做处理的,如果是自动化测试仅仅自动运营用户的用例也就行了,如果按这样测页面,那估计得考虑是不是做自定义客户端了
我的理解,他又提到了安全性测试,安全性测试到底是个什么东西,网上的解释太多了,我还是没有搞清楚他说的事情,但是猜的话应该是边界值之类的。

我认为这里还没到安全的范畴。举个安全的例子,比如一个登录的页面,用户密码登录之后,其他人拿到他的 cookie 里的值也可以登陆。这种就是安全的考虑了。

恒温 回复

首先,表示十分感谢。

这个应该也算是功能测试吧,边界值的测试。正确的逻辑对应会有不正确的逻辑,用户的操作不能琢磨的。

我也觉得是功能测试,很奇怪就是开发那里竟然说是安全测试。因为平时接触的不多,所以才会被反问。有你这个判断,底气有了。

这个协议只是数据传播的协议。https 表示数据加密。web 肯定有接口测试啊,举个例子,你给我这个回复点赞,就是发起了 ajax 请求,请求的就是点赞的接口。

这种接口我们改如何测试呢,因为是 web。所以他可能都不返回数据给你的。刚才查了 ajax,应该就是这种技术把点赞的数据更新了。就好像我前面举到一个列子。
我发现只要我用整数去发请求,得到的返回都是一样的。

{"HasError":false,"ErrMessage":"","ObjectValue":1860,"HRESULT":"0"}

我个人觉得这种应该属于功能测试了,和接口测试没有什么关系。
如果真的要测试的话,这个接口只有用登录状态和非登录状态才会有不一样的返回值。
感觉 web 的接口测试真的很变扭。感觉开发说的数据接口(指的是 app 和后台之间的通信)才是属于我们普通默认的接口测试。

徐旻 回复

额,web 也要数据接口啊。多看看那些用 js 做 mvc 的网站吧。

1.做接口测试前需拿到接口设计文档或相关资料,里面会定义接口的请求方式、编码、content-type、请求参数、返回报文结构等定义,没有这个就失去了接口测试的衡量标准。
2.ajax 只是支持异步返回结果,它也支持同步返回,和异步接口是两个概念,异步接口一般会有相应的回调接口。
3.有些开发对接口的理解也有误区,跨系统调用接口获得最原始的数据,一般都会在业务层包装后由控制层暴露,这一层的接口才负责和前端页面或客户端交互。当然,复杂系统可能包三层的都有。

扫地僧 回复

谢谢 ,我找了半天资料,发现你说的很对,尤其是第一条,我好像是自己想的太多了,结果把自己绕进去 了。把接口测试看成了功能测试。其实我只要考虑接口的事情就可以了。考虑的方向错了。
@chenhengjie123 https://testerhome.com/topics/3701 提到了也提到了这点。

我的理解是接口测试其实就是测每个接口的意图是否正确。接口其实也是为我们的需求服务。所以在接口测试的时候,首先了解这个接口是干嘛的,确认接口设计文档满足需求,再确认接口测试中实际返回符合接口设计文档及其完成的动作符合需求(比如:相应的持久化动作)

看完收获颇深。

其实主要还是得看你自动化接口想怎么去做
1、如果你是想实现功能测试,那么你可以将接口中传的 parameters 进行迭代下发,将边界值 正常值 异常值都进行操作,其实一个参数可以生成多个用例
2、如果你想做安全测试,例如跨站式脚本攻击、存储型脚本攻击 (钓鱼) 等等 都可以用自动化接口测试来做,只是传的参数不同;
主要还是看你怎么想,当然我说的不一定就是对的

你发过去的异常值虽然不同,但处理逻辑相同,所以你得到了同样的返回值。实际上说明了你的那些数字都是同一个等价类的东西。

而接口的测试要对异常值测到什么程度取决于实际项目。你说的那些在有的项目里属于功能测试,在另一些项目里也可以划入安全测试。我们以前项目开发 api 给客户公司用,api 是待测产品本身,即使这样,我们仍很少测异常输入,因为默认网页开发不会去使用异常数据调用。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册