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

kawa · 2018年04月25日 · 最后由 黑水 回复于 2018年04月28日 · 2598 次阅读

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

共收到 14 条回复 时间 点赞

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

kawa #13 · 2018年04月25日 Author

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

你是怎么做接口测试的?

kawa #11 · 2018年04月26日 Author
Ikaros灬 回复

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

kawa 回复

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

kawa #9 · 2018年04月26日 Author
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 #7 · 2018年04月26日 Author
edsion 回复

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

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

kawa #5 · 2018年04月28日 Author
程明远 回复

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

kawa #4 · 2018年04月28日 Author
程明远 回复

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

kawa 回复

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

kawa #2 · 2018年04月28日 Author
程明远 回复

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

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

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

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