《软件测试技术指南》:6.4 接口测试工具
6.4 接口测试工具
6.4.1 接口测试
接口测试主要是对系统各组件之间的接口进行测试,其主要用于检测系统内部模块之间以及与外部系统之间的交互情况。接口大致分为两大类:程序接口和协议接口。
1)程序接口主要指程序模块之间的接口,具体到程序中就是提供了输入输出的类、方法或函数。对于程序接口的测试,一般需要使用与开发程序接口相同的编程语言,通过对类、方法和函数的调用,验证其返回结果来进行测试。这个属于接口的白盒测试,需要有良好编程能力的测试人员来完成。
2)协议接口主要指系统通过不同的协议提供的接口,例如 HTTP、SOAP 协议等。这种类型的接口对底层代码做了封装,通过协议的方式对外提供调用。因为不涉及底层程序,一般不受编程语言的限制,可以通过测试接口工具进行测试。
在介绍接口工具之前先了解一下接口测试中返回的数据格式,通常返回的数据格式主要有 JSON 和 XML 两种格式,其中 JSON 数据格式应用比较广泛。
JSON是一种轻量级的数据交换格式。采用独立语言和平台来存储和表示数据,JSON 解析器和 JSON 库支持不同的编程语言。JSON 具有自我描述性,比较容易理解。
下面代码是一个 JSON 数据格式的例子。
JSON 数据语法是 JavaScript 对象表示语法的一个子集,数据放在键-值对里面,所有数据用大括号括起来。值里面如果有多项数据需要用方括号括起来,相当于 Python 中的列表。语法特征如下:
● 数据在键-值对中。
● 多项数据用逗号分隔。
● 大括号把数据项括起来。
● 中括号括起多组数据。
XML(Extensible Markup Language,可扩展标记语言),可以用来标记数据、定义数据类型,是一种允许用户对自己的语言进行标记定义的标记语言。XML 仅仅是一个纯文本,只用来结构化、存储以及传输数据信息。XML 数据语法格式跟 HTML 类似,与其不同的是,在 XML 中的标签是可以自己定义的。语法特征如下:
● 所有 XML 元素必须能够关闭标签,只要有起始标签都必须有一个结束标签。
● XML 标签对大小写特别敏感。
● XML 标签必须按正确的顺序进行嵌套,在标签内打开的元素,必须在标签内结束。
● 所有的特性必须都有值,而且属性值比较加上双引号。
● 在 XML 中,空格会被保留。
做好接口测试的三个维度是:请求(接口地址、方法)、参数、返回值。如何获取这些维度?通常需要开发人员提供接口文档。编写接口文档是接口开发中非常重要的一个环节。
开发的接口一般是给其他开发人员调用的,所以需要提供参考的接口文档。接口文档一般需要内容准确无误,并且要及时更新。通常接口文档一般包括:接口名称、接口的描述、接口的地址(URL)、调用方法、接口的参数、返回结果,见表 6-8。
表 6-8 接口文档
接口测试的重点有以下几点:
1)状态的检查:请求返回是否正确,比如请求返回成功是 200 或 OK。
2)检查返回数据的正确性,一般用 JSON 格式数据,检查关键字是否正确。
3)边界和异常扩展检查,主要关注参数是否必填、是否有空缺、参数的类型、参数的默认值、参数错误的检查等。
4)接口之间的关联测试:比如测试购物流程,依次要调用登录接口,商品加入购物车接口,提交订单接口,支付接口。需要按照接口的逻辑流程进行测试,通常前一个接口会动态产生一个特定的数据关联到下一个接口。
常用的接口测试工具有:Postman、Jmeter、SoapUI 等。
6.4.2 Postman
Postman 是一款 API 调试工具,它的使用简单方便,而且功能非常强大。最早 Postman 存在于 Chrome 浏览器的插件中。从 2018年开始 Postman 提供了独立的安装包,不再依赖于 Chrome 浏览器了。
1.Postman 安装
可以去官网直接下载 Postman 安装包进行安装即可,启动后的界面,如图 6-71 所示。
https://www.postman.com/downloads/
图 6-71 Postman 启动界面
2.Postman 接口测试
启动 Postman 后,根据表 6-8 接口文档描述,首先在 Postman 中选择 POST 请求,再输入接口地址,然后在 Body 中输入参数,单击「Send」按钮就可以进行接口测试,如图 6-72 所示。Postman 接口测试操作比较简单,就不详细介绍了。
3.Postman 生成代码
利用 Postman 生成多种语言的代码,来实现自动化测试。在图 6-64 中,单击「Code」按钮后自动生成,如图 6-73 所示(Python 代码)。
6.4.3 Jmeter
目前使用 Jmeter 主要对软件进行接口测试和性能测试,它最初用于 Web 应用测试。
开源软件免费,大大降低了测试成本
具有直观的图形用户界面
支持多种协议的性能测试,包括 HTTP、TCP、SOAP、JDBC、LDAP、JMS 和 POP3 等
它100%由java开发,是独立于平台的工具。支持 Linux/Windows
JMeter 也可用于执行应用程序的自动化测试和手工的功能测试
配置过程详细,测试计划的可制订性强,可有效把控测试过程中的每一步
1.Jmeter 的安装配置
由于它是基于 Java 的,首先需要安装并配置 1.8版本以上的JDK
(1)JDK 安装
在官网下载 jdk-8u261-windows-x64.exe,直接单击运行,进行安装。待安装完成后,再配置环境变量。安装时需要注意,安装的路径最好不要含中文、特殊字符以及安装的路径不要太深(一般小于 3 级路径),建议最好安装在 D 盘根目录。其安装步骤简单这里不做介绍了,主要介绍一下配置环境变量。具体操作步骤如下:
第一步:单击「我的电脑」→ 然后右键点击「属性」→ 再次单击「高级系统设置」→ 在系统属性中「高级」选项下 → 单击「环境变量」,出现如图 6-74 所示的对话框。
JAVA_HOME
D:\javaweb\Java\jdk1.8.0
CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
PATH
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
第五步:配置好上述环境变量后,验证 JDK 的配置是否成功。单击「开始」→ 在「运行」命令中 → 输入「cmd」按〈Enter〉键确认,进入命令提示窗口。然后输入:「Java」、「Javac」或者「Java -version」进行验证,出现以下相关信息表示配置成功,如图 6-77 所示。
图 6-77 JDK 版本信息
(2)Jmeter 安装
Jmeter 的安装比较简单,在官网 http://jmeter.apache.org/download_jmeter.cgi 下载最新版压缩包,解压后配置环境变量即可。具体操作步骤如下:
第一步:配置 JMETER_HOME 环境变量。在「系统变量」中 → 单击「新建」按钮 → 弹出新建系统变量的对话框,在变量名处输入「JMETER_HOME」,在变量值处输入 Jmeter 的安装路径,如图 6-78 所示。
JMETER_HOME
D:\javaweb\apache-jmeter-5.3
CLASSPATH
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
PATH
%JMETER_HOME%\bin;
第三步:单击「开始」→「运行」输入 cmd 进入命令行提示窗口。然后输入「jmeter」按〈Enter〉键即可启动 Jmeter。
第四步:由于 Jmeter 默认安装是英文版,为了方便读者使用,在这里介绍一下 Jmeter 汉化的方法:
进入 Jmeter 安装的 bin 目录下,用记事本打开 jmeter.properties 文件,找到「#language=en」该行,将注释「#」号去掉,并将值 en 修改为 zh_CN,重新启动 Jmeter 即可,用此方法修改,每次启动都是中文版软件。
进入「bin」目录,双击执行「jmeter.bat」文件,即可启动 JMeter
2.Jmeter 组件介绍
(1)测试计划(Test Plan)
测试计划是使用 Jmeter 进行测试的开始,是其他测试元件的容器。
(2)线程组(Thread Group)
线程组就是运行的一组线程,所有的其他类型组件必须是(线程组)节点的子节点,通俗地讲就是所有的测试都是在线程组下进行。
如果进行性能测试,线程组可以理解为虚拟用户数,可以将每个线程理解成一个虚拟的用户。
(3)配置元件(Config Element)
配置元件和 Sampler 取样器一起工作,主要用来配置 Sampler 如何发起请求来访问服务器,配置元件是有作用域的。
配置元件主要提供对静态数据配置的支持,如初始化默认值和变量等。利用配置元件可以对 cookie 以及 HTTP 请求的默认数据进行管理。
(4)前置处理器(Pre processors)
前置处理器主要是在采样器发出请求前对一些变量的值(这些变量的值不在服务器响应中获取)进行特殊处理。
(5)定时器(Timer)
定时器有一个作用域的概念,主要来控制采样器或者逻辑控制器的子项的延迟。也可以理解为请求之间的等待时间。
(6)采样器(Sampler)
采样器就是告诉 Jmeter 发送一个请求到指定服务器(比如最常见的 HTTP 请求),并等待服务器的响应。采样器会按照其在测试树中的顺序去执行,还可以用逻辑控制器来改变采样器运行的重复次数。
(7)后置处理器(Post processors)
后置处理器就是对发出请求之后得到服务器响应的数据进行特殊处理,也就是请求之间的依赖关系,可以理解为请求之间的关联。
(8)断言(Assertions)
断言主要用来检查在测试中从服务器获得的响应内容是否符合预期,也可以理解为判断一下返回的结果是否满足期望。
(9)监听器(Listener)
监听器主要收集 Jmeter 在测试期间的结果,并将结果数据给出一些展示的方式。常用的展示结果的元件有察看结果树、聚合报告(从里面可以统计到测试的 TPS、响应时间)、图形结果、断言结果等。
(10)逻辑控制器(Logic Controller)
逻辑控制器可以控制 Jmeter 的测试逻辑,特别是何时发送请求。逻辑控制器可以改变其子测试元件的请求执行顺序。
3.Jmeter 接口测试实例
(1)创建测试计划
进入 Jmeter 的 bin 目录,双击 jmeter.bat 文件启动 Jmeter。将测试计划中改名为接口测试,如图 6-80 所示。
(2)添加线程组
右键「登录接口测试」→ 添加 →Threads(Users)→ 线程组(改名为用户登录),如图 6-81 所示。通常测试接口线程数设置为 1,循环次数根据测试数据的个数来设置。
(3)添加 HTTP 请求
右键「用户登录」→ 添加 →Sampler→HTTP 请求(改名为接口地址),如图 6-82 所示。
图 6-82 添加 HTTP 请求
(4)添加用户参数
右键「接口地址」→ 添加 → 前置处理器 → 用户参数,再将用户参数进行参数化,如图 6-83 所示。
图 6-83 添加用户参数
(5)添加 CSV 数据文件
右键「接口地址」→ 添加 → 配置元件 →CSV 数据文件设置(改名为数据文件),再设置数据文件的选项,如图 6-84 所示。
图 6-84 添加 CSV 数据文件
其中 userdata.txt 参数文件,如图 6-85 所示。
图 6-85 参数文件
(6)添加响应断言
右键「接口地址」→ 添加 → 断言 → 响应断言,断言结果从 userdata 中读取,如图数据文件中读取,如图 6-86 所示。
图 6-86 添加响应断言
(7)添加监听器
右键「接口地址」→ 添加 → 监听器 → 查看结果树,如图 6-87 所示。
图 6-87 添加监听器
(8)设置循环次数
根据测试数据文件中的参数个数设置循环次数(次数设置为 2),运行得到结果,如图 6-88 所示。
通常对接口进行功能测试时,只需要查看结果是否正确,来判断接口是否存在异常问题,上述例子是一个简单的接口测试实例。Jmeter 还可以实现多接口的自动化测试以及对接口进行压力测试。如果进行接口的性能测试,操作基本同上。如果对接口进行性能测试,需要理解线程组就是虚拟用户数,还需添加聚合报告、图形结果等。
图 6-88 运行结果
下面再介绍一下如何利用 badboy 录制脚本,再导入 Jmeter 进行性能测试。
4.Jmeter 性能测试实例
(1)使用 Bodboy 录制脚本
安装 Bodboy 工具(官网下载直接安装即可)后可以录制脚本,类似于 Loadrunner 的录制,输入 URL 地址,单击录制按钮。录制完成后的界面,如图 6-89 所示。
图 6-89 Bodboy 录制界面
注意:这里的 step 的功能相当于 Loadrunner 中的事务,在录制时为每一步操作添加一个新的 step,方便对脚本进行编辑。
(2)导出 JMX 文件
单击菜单栏 File→ 选择「Export to JMeter」导出后缀为「.jmx」的文件,取名为登录脚本,如图 6-90 所示。
(3)在 Jmeter 导入 JMX 文件
启用 Jmeter,单击菜单栏文件 → 打开,选择导出的「.jmx」的文件,导入后的界面,并修改 Step(事务),如图 6-91 所示。
图 6-90 导出 JMX 文件
图 6-91 JMX 文件导入 Jmeter
(4)添加用户参数
找到 POST 请求(http://127.0.0.1/WebTours/login.pl),对请求中的数据(用户名,密码)进行参数化,再添加「用户参数」,右键「POST 请求」→ 添加 → 前置处理器 → 用户参数,如图 6-92 所示。
注意:POST 请求中有 userSession 需要进行关联。
(5)添加 CSV 数据文件
右键「POST 请求」→ 添加 → 配置元件 →CSV 数据文件设置(改名为数据文件),再设置数据文件的选项,如图 6-93 所示。
(6)添加响应断言
找到登录后成功的「请求」右键添加断言,如图 6-94 所示选中请求右键 → 添加 → 断言 → 响应断言,然后在「要测试的模式」添加断言的文本内容:Welcome,<b>{username}</b>。
图 6-92 添加参数
图 6-93 设置数据文件
图 6-94 添加断言
(7)添加 Session 关联
Jmeter 提供了很多后置的处理器,可以用来做关联用,通常关联都是采用正则表达式提取器。首先找到出现 userSession 的位置,然后在选中请求右键 → 添加 → 后置处理器 → 正则表达式提取器,如图 6-95 所示。
图 6-95 添加关联
关联参数「userSession value=124378.456460105zDQHHVzpiftVzzzHDiDizpDAVVcf>」中的数据。其正则表达式为:「userSession value=(.*)>」,如图 6-96 所示。
图 6-96 关联设置
图中:模板 $1$,表示第一个值,$2$ 表示第二个值,依次类推 $n$ 表第 n 个值。匹配数字 1 代表第一个匹配,依次类推,2、3、…n,代表第 2、第 3、…第 n 个匹配。
(8)添加监听器
通常做性能测试,需要添加查看结果树、聚合报告、图形结果等监听器。通过这些监听器来对测试结果进行统计分析,如图 6-97 所示。
图 6-97 添加监听器
(9)添加集合点
Jmeter 的集合点在定时器中设置,选中登录的 POST 请求,然后右键 → 添加 → 定时器 →Synchronizing Timer(改名为登录集合点),在把「登录集合点」拖到事务「点击登录按钮」前,即可。如图 6-98 所示。
注:Jmeter 不能监控系统资源,需要通过插件或其他工具进行监控。
图 6-98 添加集合点
(10)设置用户数
最后根据参数的个数,设置线程数(虚拟用户数),运行结果,如图 6-99 所示。图中单击「Save Table Data」按钮,还可以将测试数据导出到文件中,以供后续分析。
图 6-99 运行结果
Jmeter 性能测试的简单操作介绍到此。最后介绍一下查看结果树、图形结果、聚合报告监听器里面的关注点以及聚合报告中的参数的含义,见表 6-9。
「查看结果树」监听器:会展示采样器中每个请求和响应的细节。
「图形结果」监听器:会将系统吞吐量、响应时间绘制在一张图片中。
「聚合报告」监听器:可以查看总体的吞吐量、响应时间等。
表 6-9 聚合报告参数含义