@Author: Basil Guo @Date: Feb. 20, 2021 @Description: HTTP接口测试 @Keyword: test, http interface @Type: tutorial
学习方式:先方法,后工具(接口测试常用工具有SoupUI、JMeter)
学习建议:
- 了解接口是做什么的。
- 理解接口的业务处理逻辑。
- 熟悉接口核心的三组件:地址、入参、返回包。
- 依据参数校验和逻辑校验设计入参组合。
- 学习JMeter或者SoapUI。
常说的接口测试都是在指代HTTP接口测试。接口测试属于功能测试的一部分。测试重点在于检查数据的交换、传递和控制管理过程,以及流程测试中系统间的相互依赖关系等。
接口(Application ProgrammingInterface, API),可以把提供资源的一方称为服务端,把请求资源的一方称为客户端,而“接口”可以理解为服务端或服务端内的某个模块提供的一个可供“他人”调用其内部资源的“入口”。
https://api.douban.com/v2/music/search
,该URL包括3个部分,分别是采用的协议(https)、服务器地址(api.douban.com)、请求资源路径(/v2/music/search)。把此URL称为豆瓣网音乐搜索模块的一个接口,也称为接口地址。
可以为此接口附加参数,使用GET形式的就使用?
,多个参数使用&
连接,例如https://api.douban.com/v2/music/search?q=义勇军进行曲&count=1
测试人员是直接通过接口来测试系统的,而不是通过用户的交互页面来测试的,这就是为什么向服务端发送https://api.douban.com/v2/music/search?q=漫步人生路&count=2
请求时,返回的并非是正常的网页元素而是原始的文本字符串。
再通俗一点说,HTTP接口测试的实质就是数据的传输和接收,传输的是接口地址中的参数,接收的是文本字符串,然后对比文本字符串是否正确。在进行HTTP接口测试时,服务端返回的一般都是JSON格式字符串。
- 接口测试可以在用户界面还没有被开发出来之前就对系统或系统中的模块进行测试,不用等到系统提供了可测试的功能界面之后再进行测试。
- 用户的交互界面封装了系统中各模块的接口。有用户界面时,通过用户界面传递数据到系统中的接口去;没有用户界面时,可以直接通过接口传递数据。也就是说,系统中各模块的接口是实现用户界面功能的基础。越早进行测试,就能越早发现Bug,与此同时开发人员修复Bug的成本就越低,这便是接口测试的意义所在。
- 前端的页面和后台模块是两组人开发的,后台开发完后,再将前端的页面套在后台的接口上。也就是说,只要后台模块测试好了,前端页面不管怎么改变都可以适用。同时还要注意,数据通过前端页面输入时,前端页面通常只做一些基础校验,核心业务还要靠后台来处理。因为接口测试是跳过前端页面这一层框架提前对后台模块进行测试的,所以它的意义更重大。
HTTP接口测试的依据是接口文档。接口测试人员做接口测试时,首要的任务就是拿到开发人员提供的接口文档,没有接口文档就等于没有测试的标准,也就无法开展测试工作。下面展示一个接口文档中的一部分内容。
有了此接口文档,就可以根据接口文档去设计接口的测试用例。
在这里总结一下接口文档的要素,一个接口文档至少要包括以下内容。
- URL(接口地址)。
- 请求方式POST、GET。
- 入参(请求参数)。
- 返回参数。
- 请求、返回示例。
- 返回的状态码和参数说明。
而接口测试的大体流程如下。
- 拿到接口文档。
- 设计测试用例。
- 执行用例(测试的步骤:请求接口,然后取到返回值,最后判断实际结果与预期结果是否相同)。
- 提交Bug单。
接口测试的工具除了浏览器之外,还有一款专门用于接口测试的工具——Postman。Postman的使用tutorial。
通过Postman或相关工具进行接口测试时,可以依据HTTP协议状态码来判断HTTP请求的最终结果是成功了还是失败了。常用HTTP Status Code有
Http Status Code | 描述 |
---|---|
200 | 代表你发送的请求成功了,服务端成功响应了你的请求。 |
202 | 代表你发送的请求已接受,但服务端还未完成处理。 |
301 | 你请求的资源已被永久地移动到新的URL,网页会跳转到新的地址。 |
302 | URL临时移动,与301类似。但资源只是临时被移动,客户端应继续使用原有URL。 |
400 | 客户端请求的语法错误,服务器无法理解。 |
403 | 资源不可用,服务器理解客户的请求,但拒绝处理它,通常是由于服务器上文件或目录的权限设置导致的Web访问错误。 |
404 | 服务器无法根据客户端的请求找到资源(网页),也就是代表着你请求的资源(网页)不存在了。 |
500 | 服务器的内部产生了错误,无法完成客户端的请求。 |
401 | 服务器不具备完成请求的功能,无法完成此请求。 |
抓包HTTP通信过程就不在此重新复述了。
HTTP基于请求/响应方式工作。
请求分为:请求头、请求体、请求空行、请求参数
响应分为:响应头、响应体、相应空行、响应内容
通过Python发送HTTP请求并接收响应,可以通过requests
库来完成。
import requests
url_base = "https://api.douban.com/v2/music/search"
# 打印基本信息
def print_info(r):
print(r.status_code)
print(r.headers)
print(r.cookies)
print(r.json())
print(r.text)
# get方式请求
def test_get():
test_params = "q=义勇军进行曲"
r = requests.get(url_base, params=test_params)
print_info(r)
# post方式请求
def test_post():
test_params = {"q": "义勇军进行曲"}
r = requests.post(url_base, params=test_params)
print_info(r)
def main():
test_get()
print("="*100)
test_post()
if __name__ == "__main__":
main()
标签:HTTP,请求,接口,print,测试,test
From: https://blog.51cto.com/basilguo/7435556