随着市场需求的变化,大部分企业在招聘测试人员时,都会提出接口自动化测试的相关要求,为什么会这样呢?
目前,软件构架基本上都是前后端分离的,软件的主要功能由服务端提供。从整个软件测试市场来看,大部分的测试人员还是以功能测试和 UI 自动化测试为主,即以前端的页面测试为主,并不涉及过多的服务端测试。但由于软件开发成本提高,开发周期和迭代周期缩短,仅仅做前端的页面测试已不能满足软件对质量的各项要求。
服务端测试的主要对象是由服务端所提供的接口,因此也被称为接口测试。接口测试的优势在于,在一个前端页面的开发还未完成时,测试就可以提前介入。测试工作介入得越早,解决 Bug 的成本越低,产品也会更加稳定,因此接口自动化测试几乎成了 UI 自动化测试人员发展的必经之路。
接口测试也分为手工接口测试及接口自动化测试。手工接口测试一般可以通过 posman 或者 jmeter 等接口工具来完成;在接口的功能趋于稳定之后,便可以实现代码级的接口自动化测试及持续集成。
从目前的市场需求来看,接口自动化测试人才在市场中所占比例较低,薪资高,市场缺口巨大。
本文内容摘自《接口自动化测试项目实战:Python 3.8+Requests+PyMySQL+pytest+Jenkins 实现》一书(详情见文末),书中采用项目驱动模式,并通过Python库建立起一套基础的、实用的接口自动化测试框架。
01、本文基于的被测系统
本书将ZrLog 博客系统(https://www.zrlog.com/)作为被测系统。
选择ZrLog 的原因如下:
部署过程相对简单,功能和业务逻辑不复杂。
其接口资源包含了增、删、改、查等常用操作,服务端响应的数据也是标准的JSON格式,这一些条件均为学习接口自动化测试框架提供了便利。
ZrLog 有多种部署方式,包括 Docker 的方式,本书采用该方式进行部署。Docker 是一种容器技术,容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会销毁。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。所以,有了 Docker,就不用担心环境问题。
下面展开如何设计 ZrLog 项目的测试用例。
02、提取接口信息并分析
接口测试主要是测试对服务端资源的增删改查操作,所以在 ZrLog 系统中提取了 5 个与增、删、改、查有关联的接口信息,分别是登录接口、发布文章接口、修改文章接口、删除文章接口、查询文章接口。在设计接口测试用例之前,需要对这5 个接口进行初步的了解与分析,并了解接口之间的关联关系,以便为设计接口用例做准备。
1. 登录接口信息的提取与分析
通过 Fiddler 工具获取到的登录接口的信息如图 1 所示。
■ 图 1 登录接口的信息
登录接口的信息分析如下。
从图 1 所示的信息可以看到,登录接口采用的是 POST 请求方法, 请求的数据类型为 JSON 格式,采用的是用户名和密码的登录方式。登录成功后,服务器在响应头当中封装了 cookies 信息,这说明如果下游的接口想请求服务器中的资源,需要在请求头当中携带此 cookies 信息。
在接口测试用例中,如何让下游的接口引用上游接口的 cookies 信息呢?需要将cookies 中的 admin-token 字段的值提取出来,放在一个变量中。下游接口直接引用这个变量就可以获取到 cookies 的值。
需要注意的是,当使用错误的用户名或密码进行登录时,会提示用户名或密码错误,且此时响应的业务状态码为 1。
2. 发布文章接口信息的提取与分析
通过 Fiddler 工具获取的发布文章接口的信息如图2 所示
■ 图2 发布文章接口的信息
发布文章接口的信息分析如下。
从图2 所示的信息可以看到,发布文章接口采用的是 POST 请求方法, 请求的数据类型为 JSON 格式,且携带了 cookies 信息,这说明发布文章的接口在请求的信息中引用了登录接口所设置的变量信息(为 admintoken 字段的值所设置的变量)。
从请求的正文可以看到,title 的值为“付出”,这说明此次发布文章的标题就是“付出”。
从响应的正文可以看到,当文章发布成功后,服务端生成了一个 id 的参数,这个参数为文章的 id 号,此次发布文章的 id 为 1。但需要注意的是,此 id 号是动态变化的,因为每发布一次新的文章,生成的 id 号都是不一样的。如果下游接口要修改或删除此文章,则需要引用此 id 号。
在接口测试用例当中,如何让下游的接口引用上游接口的 id 信息呢?需要将 id 的值提取出来,放在一个变量中,下游接口直接引用这个变量就可以获取 id 的值。
3. 修改文章接口信息的提取
通过 Fiddler 工具获取的修改文章接口的信息如图3 所示。
■ 图3 修改文章接口的信息
修改文章接口的信息分析如下。
从图3 所示的信息可以看到,修改文章接口采用的是 POST 请求方法,请求的数据类型为 JSON 格式,且携带了 cookies 信息,这说明修改文章的接口在请求的信息中引用了登录接口所设置的变量信息(为 admintoken 字段的值所设置的变量)。
从请求的正文可以看到,此次修改的是 id 为 1 的文章,并且将文章的标题由原来的“付出”修改成“付出才能杰出”。但由于文章 id 是动态变化的,所以修改文章时需要引用发布文章接口所设置的 id 的变量。
4. 删除文章接口信息的提取
通过 Fiddler 工具获取的删除文章接口的信息如图4 所示。
■ 图4 删除文章接口的信息
删除文章接口的信息分析如下。
从图4 所示的信息可以看到,删除文章接口采用的是 POST 请求方法,请求的数据类型为表单格式,且携带了 cookies 信息,这说明删除文章的接口在请求的信息中引用了登录接口所设置的变量信息(为 admintoken 字段的值所设置的变量)。
从请求的正文可以看到,此次删除的是 id 为 1 的文章,但由于文章的id 是动态变化的,所以删除文章时需要引用发布文章接口中为 id 设置的变量。
5. 查询文章接口信息的提取
此次查询的内容为“付出才能杰出”,通过 Fiddler 工具获取的查询文章接口的信息如图5 所示。
■ 图5 查询文章接口的信息
查询文章接口的信息分析如下。
从图5 所示的信息可以看到,删除文章接口采用的是 GET 请求方法,所以要查询的内容直接放在接口地址里面,而不是放在请求的正文中。查询文章接口同样在请求头中携带了 cookies 信息,这说明查询文章接口在请求头中引用了登录接口所设置的变量信息(为 admin-token 字段的值所设置的变量)。
从响应的正文可以看到,error 字段的值为 0,说明业务查询成功,并且total 和 records 字段的值均为 0,这说明“付出才能杰出”这篇文章已彻底删除,已查询不到任何记录。
6. 接口关联总结
通过以上的接口分析,可以得出以下的结论。
发布文章接口和登录接口相关联。
修改文章接口既和登录接口相关联,又和发布文章接口相关联。
删除文章接口既和登录接口相关联,又和发布文章接口相关联。
查询文章接口和登录接口相关联。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源【免费】。