接口和协议组成 熟悉 http 协议对测试和问题定位很有帮助?能不能给个栗子?

kawa · April 25, 2018 · Last by 黑水 replied at April 28, 2018 · 2696 hits

最近在学习接口测试,发散学习到http协议,讲解挺多的,但是没get到测试工作中http协议的侧重点。看到一句话“熟悉http协议对测试和问题定位很有帮助”,然而没有实际体验。所以想问问大家,结合实际说一下怎么帮助的?

共收到 14 条回复 时间 点赞

http://www.notedeep.com/note/36/page/280 http的学习资源汇总
https://www.cnblogs.com/ranyonsue/p/5984001.html http的基础知识讲的很清楚

kawa #2 · April 25, 2018 作者

两年前吧,用过wireshark抓包,但当时只是对请求的URL分析,看有没有不符合需求的请求地址,别的就没怎么接触了。做接口测试是手工检查,也没怎么接触到协议这块儿。

你是怎么做接口测试的?

kawa #4 · April 26, 2018 作者
Ikaros灬 回复

开发提供个链接,这边通过修改url携带的参数的,检查返回的内容节点的值是否正确

kawa 回复

你知道携带参数可以分为GET和POST两种方式,GET是在URL后面添加参数,POST在哪里添加参数呢?而且使用GET的方式请求,参数会在URL里,对于某些参数比较敏感的使用GET方式提交合适吗?有些WEB服务会检查cookie,你知道怎么修改cookie么?服务器登录之后是怎么保持登录的,验证信息都存在哪里。HTTP头部的还可以约定返回的数据格式。这些都是很基本的

kawa #6 · April 26, 2018 作者
Ikaros灬 回复

嗯,之前接触到的接口是很简单的GET接口,post接口的测试没有测过。之前接触的接口测试比较简单也比较少想的也比较少,现在接触到新的工作环境,想自己先提升下,争取能接下这个项目的接口测试。

我举个例子吧,
开发刚刚部署了一个测试环境,然后提供了测试环境的地址:
https://www.qq.com/docs/create?node=&is_markdown=1
并且按要求配置了host: 10.0.0.5 www.qq.com。

这个时候,你用浏览器打开链接是ok的。
如果你了解dns,会知道浏览器访问的过程是先通过dns服务器查询到www.qq.com这个域名对应的ip是10.0.0.5,然后再通过ip向真实的服务器发起请求的。
按这个道理,那我去掉host,然后直接访问https://10.0.0.5/docs/create?node=&is_markdown=1是不是也可以呢?
实际情况是可能不行。

这里我用python的requests分别模拟了两种情况,把请求和响应通过log打印出来了:

send: b'GET /docs/create?node=&is_markdown=1 HTTP/1.1\r\nHost: 10.0.0.5\r\nUser-Agent: python-requests/2.18.4\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\n\r\n'
reply: 'HTTP/1.0 503 Service Unavailable\r\n'
header: Cache-Control header: Connection header: Content-Type <Response [503]>

send: b'GET /docs/create?node=&is_markdown=1 HTTP/1.1\r\nHost: www.qq.com\r\nUser-Agent: python-requests/2.18.4\r\nAccept-Encoding: gzip, deflate\r\nAccept: */
*\r\nConnection: keep-alive\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Server header: Content-Type header: Transfer-Encoding header: Connection header: Cache-Control header: Date header: Set-Cookie <Response [200]>

对比发现,对于配置了host的情况,实际发出请求时,header中的Host字段用的还是域名;对于直接使用ip访问的情况,Host则是使用的ip。
然后因为服务器会对Host进行校验,所以,直接用ip在浏览器中是无法访问的。但是,通过代码或工具人为修改了header中的Host字段,就一切正常了。

kawa #8 · April 26, 2018 作者
edsion 回复

懂了,你举得例子很清晰明了,以后遇到bug时会多想一层。

除了cookie之外,还有token这些.个人感觉http这些协议了解越清晰,更容易帮助我们去分析和定位问题.还有一点就是,基本上很多面试都会问起来,多了解一点总是不错的.😂

kawa #10 · April 28, 2018 作者
程明远 回复

面试确实会问到,我之前回答说,之前用过抓包工具,用selenium的时候学习过一段时间的http协议。面试官鄙视的看了我一眼,也没问我啥问题,虽然问了我也不一定答得出来😹

kawa #11 · April 28, 2018 作者
程明远 回复

上个公司业务量非常大,考核也是按照bug量考核的,所以发现bug基本都直接丢给开发了,定位到出发原因就完了,很少深层次定位,现在想深入学习下,可是知识太多有点不知所措,没有重点,没有实操经验

kawa 回复

给他从osi开始讲网络,再不行从交换机物理层开始讲,给他整的服服帖帖

kawa #13 · April 28, 2018 作者
程明远 回复

哎,想起那个面试就伤心,我被他整的沮丧的很,生生把我的等级往下压了

找了几个帖子,你看看
web 接口测试总结
接口测试除了功能,还有安全
资金的 bug 怎么测?怎么防资损?

看一些讲 HTTP 接口设计的书会给你很多设计用例的灵感的《RESTful Web Services》之类的

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up