资讯专栏INFORMATION COLUMN

如何使用 JMeter 实现 API 接口自动化测试?

joyvw / 3191人阅读

摘要:将响应断言放入请求下,会对该请求调用的响应结果进行断言。异步调用,等待一定时间后获取调用结果数据某支持客户进行异步调用,先发送一个异步请求提交数据获取一个,然后隔一断时间后再使用获取到的请求上一个请求的返回结果需要用到定时器组件。

由于segmentfault编辑器上传图片错误,小编试过多种方式试图拯救,还是未能成功,所以如要看完整文章请至http://t.cn/R8njjaT

miaomiao   高级测试工程师
7年测试工作经验,参与产品的功能/自动化/性能测试;目前负责 Red.Q、Warden 产品的质量保障工作。
背景

Red.Q 是岂安为客户提供业务风险情报服务的产品。API 是该产品的一个模块,客户可以通过输入不同的参数获取不同的风险数据。
在测试该 API 的过程,就是对这个接口的测试,不同的 Token 对应不同的订单,对应不同的标签,对应不同的返回。本文主要介绍在测试该接口时总结的一些场景用法。

工具介绍

目前接口测试的工具,例如 Postman/SoupUI,等大多都提供了接口的发送、响应结果的获取、以及针对响应结果的断言,都可以用来做接口的自动化测试,我们目前选用的工具是 JMeter,各种工具大同小异。如对 JMeter 工具不了解的同学请戳 Bioneck 分享的 Jmeter+Jenkins 文章。
实现本次自动化测试用到的组件介绍 :

Threads--> 线程组

配置元件--> HTTP 请求默认值

配置元件--> JDBC Connection Configuration

配置元件--> HTTP 信息头管理器

定时器--> 高斯定时器

Sampler--> HTTP 请求

Sampler--> JDBC Request

后置处理器--> 正则表达式提取器

断言--> BeanShell 断言

断言--> 响应断言

监听器--> 查看结果树

测试场景与测试实现 1使用Token调用API

一个最简单的 HTTP 请求,由 host+ 端口 + 路径 + 参数构成,调用 API 的设置如下:

1) HTTP 请求默认值,设置好服务器 IP 和端口,所有作用范围内的 HTTP 请求可以不再指定

2) HTTP 请求,设置路径和参数

Red.Q 的请求是 GET 方法,参数可以加入 Parameters ; 如果是 POST 方法的 JSON body,参数可以放入 Body Data 内。

POST 请求时,参数内有中文,需要设定 Content encoding 为 utf8

3) 调用完成后,通过查看结果树查看调用结果。

2Mock-server 的机制

需要每次请求时,把 request_id 放到 Header 内,随请求一起调用(HTTP 信息头管理器)。
1) HTTP 信息头管理器
将 HTTP 信息头管理器放入 HTTP 请求下,该 HTTP 信息头管理器内的参数,只对该 HTTP 请求生效。
右边的设置,每次 HTTP 请求 Mock-server 时,会将 REQUEST-ID 加入到请求 Header 内。

2)查看结果树内,可以看到发送的 Header。

3断言:响应结果的文本断言

每次执行测试后,需要了解本次执行的结果正确与否,以上的步骤只能知道我们返回了什么,不能确认到底返回的对不对。这个时候需要用到断言,对响应结果进行验证。

1)响应断言,提供对所有请求的响应结果内的内容进行断言,一般为文本断言。

将响应断言放入HTTP请求下,会对该HTTP请求调用的响应结果进行断言。
要测试的文本放入测试的模式内,可添加多个验证文本。

2) 查看结果树内,如果与指定的内容不一致,请求会标记为失败,并给出失败原因。

4断言:响应的结果与数据库内的字段比较

部分场景下,要求每次调用 API 后,需要验证对应的 [风险等级] 符合预期。而 [风险等级] 保存在数据库内,需要通过 JDBC Request 来实现对数据库的操作。

1)JDBC Connection Configuration,提供对数据库的连接配置。

2) JDBC Request,设置查询 SQL

验证结果一般是查询类的 SQL,QueryType 选择 Select Statement;
如果需要在某个请求开始前对数据库内的数据做新增修改删除,则需要选择 QueryType为Update Statement;

3)在 JDBC Request 下,添加响应断言,验证响应结果与字符串一致。

5断言:使用 BeanShell 编写手工断言

每次调用 API 后,需要验证 Token 的 [最近调用时间字段] 。该时间字段是存在数据库内的时间戳,而我们需要验证 token 的最近调用时间在 15s 以内,而响应断言组件无法做到日期的比对,需要用正则表达式提取器将请求的响应结果提取出来,然后作为一个变量,在 Bean Shell 内进行比对。

1)调用完请求后
添加 JDBC Request,设置查询条件如下

响应结果

2) 在 JDBC Request 下添加正则表达式提取器,提取数据库返回的时间戳字段,保存到变量内。

3) 在 JDBC Request 下添加 BeanShell 断言,对正则表达式提取器内提取的变量与当前时间进行比对。

6异步调用,等待一定时间后获取调用结果数据

某 API 支持客户进行异步调用,先发送一个异步请求提交数据(获取一个 token),然后隔一断时间后再(使用获取到的 token)请求上一个请求的返回结果;需要用到定时器组件。
1)异步调用请求接口设置。

2)异步调用请求成功后,返回一个 query_id,如果要拿到真正的处理结果,需要在调用获取结果的请求时,把 query_id 作为一个参数。

3) 在异步请求下添加一个‘正则表达式提取器’,将异步调用返回的 query_id 保存到参数内。

4) 获取异步调用结果的请求内,引用正则表达式提取出来的 query_id ,并作为参数提交。

5) 异步调用一般不会马上出结果,需要在获取异步调用的结果请求之前等待一段时间

BeanShell Timer 内可设置线程等待 5s;
添加高斯定时器、固定定时器等定时器也可达到等待的效果;
定时器放在 HTTP 请求下,会先执行定时器,如果与 HTTP 请求是同级目录,则每个 HTTP 请求都会受定时器的时间影响。

总结

现在几乎所有从事 Web 测试的同学都会使用 JMeter 或某种 API 工具来调用几把接口,而需要做到接口自动化,免不了要加入参数化、关联、断言等高级用法,本文仅列出工作中用到的常见场景中的用法,有不对之处或测试之间的交流欢迎指出,谢谢。

以上。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8804.html

相关文章

  • 聊聊 Jmeter 如何并发执行 Python 脚本

    摘要:前言大家好,我是测试君最近有小伙伴后台给我留言,说自己用写了一个大文件上传的接口,现在想本地检验一下接口并发的稳定性,问我有没有好的方案本篇文章以文件上传为例,聊聊并发执行脚本的完整流程实现文件上传大文件上传包含个步骤, ...

    王岩威 评论0 收藏0
  • 使用jMeter对基于SAP ID service进行Authentication的Restful

    摘要:因为这个项目最后会在年月日于上海举行的云大会上展示,所以当时完成集成工作后心想,还是得提前测试一下咱们的在响应并发请求时的性能做到心里有数。 这篇文章本来Jerry只在SAP社区上写了英文版的,可以通过点击文末的阅读原文获得。后来有两位做Marketing Cloud开发的德国同事,写邮件询问关于文章的更多细节,声称这种方式对他们自己的API性能测试很有用,所以我觉得还是值得用中文再写...

    longmon 评论0 收藏0
  • 不用写代码,也能做好接口测试

    摘要:接口测试形式单个接口测试包含性能测试和通过接口调用进行场景测试。充分来说就是接口测试相对容易实现自动化持续集成。 本文你将了解到 1、接口测试基本概念,包含什么是接口,什么是接口测试,为什么要做接口测试2、接口测试用例设计3、怎样不用写代码,也能快速的根据开发的API文档完成接口自动化测试脚本 注:如果你对接口基本概念和接口测试用例已熟悉,可以直接跳过,其实看一遍也无防,就当作 温故知...

    idisfkj 评论0 收藏0
  • 使用 EOLINKER 进行接口测试的最佳路径 (上)

    摘要:创建测试环境并导入到用例集操作步骤如下动态图创建测试环境并导入到用例集动态图说明第一个页面为测试项目列表页面。第三个页面为前置用例集列表页面。 本文内容: 测试脚本管理:讲述如何在 EOLINKER 上设计测试项目目录结构。 编写测试脚本:讲述如何在 EOLINKER 上编写接口测试脚本。 测试脚本执行及报告:讲述如何在 EOLINKER 上执行接口测试脚本,及如何查看和下载测试报告...

    lordharrd 评论0 收藏0

发表评论

0条评论

joyvw

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<