0
点赞
收藏
分享

微信扫一扫

接口测试 02 -- JMeter入门到实战

booksmg2014 2024-01-21 阅读 17
测试工具

前言

JM eter毕竟是做压测的工具,自动化这块还是有缺陷。

如果公司做一些简单的接口自动化,可以考虑使用JMeter快速完成,如果想做完善的接口自动化体系,建议还是基于Python来做。

为什么学习接口测试要先从JMeter开始?

工作中,并不是一开始我们就写代码来测接口

只有接口通了,才能开始做接口自动化

即便真的不需要做功能测试,但是做自动化之前,务必要先确保单接口已经调调试通了( JMeter、poastam)


1. JMeter简介及安装

1.1 JMeter的优点

 1.2 JMeter的安装

① 安装JDK

② 安装JMeter(windows)

进入官网:点击下载

下载好之后解压文件 -> 运行/bin目录下的 jmeter.bat

即可打开JMeter的图形化界面进行脚本的编写。

建议放在c盘(不用配置环境变量),我尝试了放在D盘,配置环境变量怎么配都启动不了

启动后:会出现左边的cmd,使用过程中不要关闭cmd,关闭了cmd就相当于关闭了jmeter

③ jmeter界面设置

初次启动,界面上的字体小的感人,眼睛快戳瞎了……

界面调整:

中文模式:

但是关掉重启之后,又恢复了一开始那么小的字体、语言又显示成了英文

 找到JMeter的配置文件jmeter.properties,用记事本打开,修改字体设置,找到这两行代码:

前两行默认是注释掉的,把前面的#去掉,最后一行放开并修改后面的数字

jmeter.hidpi.mode=true   #放开
jmeter.hidpi.scale.factor=2.0   #放开
jmeter.hidpi.scale.factor=2.357948  #放开并修改后面的数组

waht?再重新打开还是这么小

然后重新点一下放大,就不需要点很多次,点一次就这么大了

凑合着用吧,目前没找到一次修改配置能够永久性设置的方法

修改语言为中文:配置文件jmeter.properties找到language=这行,改为:下面第一行这样

Preferred GUI language. Comment out to use the JVM default locale's language.
language=zh_CN

#Preferred GUI language. Comment out to use the JVM default locale's language.
#language=en  这是原本的

重新打开,文字显示为中文了

1.3JMeter常用的核心组件介绍

Jmeter常用组件的功能

前、后置处理,对应的页面按钮: 


2. 使用jemter接口测试实战

2.1 接口请求分析

目标网站接口信息

 ● 目标网站域名:http://xxx.com?

 ● 目标网站公共参数

目标网站注册_请求urlapi/user/reg

目标网站注册_请求参数:

参数名

是否必须

类型

默认值

描述

accounts

string

用户名

pwd

string

密码

type

string

类型

公共参数是所有接口都必须带的参数,请求参数对应每个具体接口的参数


接口分析

body请求数据类型:

得到请求参数(目标网站的body格式josn)

type有手机号、邮箱、自定账号;这里我们使用自定义账号,即username

{accounts":"username",
"pwd":"password",
"type":"username" }

响应数据:

注册接口测试用例示例 


2.2 单个执行接口测试用例

① 添加线程组

jmeter属于半自动工具,需要有人的介入,一定数量的用户表示一个【线程组】

右击【测试计划】--> 添加 --> 添加线程组:

② 添加取样器

我们需要做什么?发送一个接口请求:【取样器】

右键【线程组】右击 --> 添加 --> 选择HTTP请求(我们这里是接口请求属于http) 

 ③ 填写请求信息

上面我们得到的注册接口完整的url是:

http://xxx.com?s=api/user/reg&application=app&application_client_type=weixin

路径从?开始,截图中漏了

④ 添加监听器

添加监听器,是为了方便执行后查看结果

右键接口名 --> 添加 --> 监听器 --> 查看结果树

⑤ 执行接口测试: 

上面截图字打错了,是保存;根据个人需要,也可以不保存 

点击保存后,等1~2秒即出来执行结果:

响应中显示的响应结果,对应这个接口请求的实际结果

测试用例的结果,是我们的期望结果

当然实际工作中,我们不可能一个个点进去,肉眼去确认接口返回的实际结果

那么:我们可以通过添加断言,来看接口的返回是否和我们的期望结果一致

⑤ 添加断言

比如,我就想断言这个注册接口返回的响应josn信息中,msg是否为注册成功

需要对哪个接口进行断言,就右键对应的接口 --> 添加 --> 断言 --> 选择JSON断言

JSON断言中,默认使用的是JOSN path,这个json path填写有一定的规则 

可以先取查看结果树种测试一下,写的对不对,具体见下图备注:

填写断言信息:

重新执行一遍:

查看断言信息、断言失败(只有失败了下面才会显示断言,成功的话不会显示短信信息)

2.3 多个接口执行测试用例

jmeter配置原件 

我们的接口是HTTP,那么就选择 HTTP请求默认值 

把域名和协议类型,填在默认请求页面里

下面的注册 和 登陆接口页面中的 域名和协议类型就可以删掉了

重新运行一下:

设置环境变量

根据上面的配置原件使用思路,同理可得:

特别适用于环境切换的修改,比如有测试环境、生产环境,有100个接口

我不需要再两个环境中都去各写100遍接口,只需要加一个【请求默认值】,根据不同环境的域名填写即可

执行哪个环境,就把另一个环境给禁用掉;

比如现在我要在测试环境,把就把生产环境的禁用

禁用后,它的字体颜色就变浅了

设置变量

定义变量:

在【用户定义的变量】 中定义账号、密码

引用变量:

重新运行一下:可以看到,注册和登陆都成功了


2.4 Jmeter数据驱动测试

再新建一个线程组,可以使用复制黏贴的方式:

选中登陆&注册--ctrl+c  --> 点击测试测试计划  ctrl+v即可

然后把登陆&注册这个case禁用掉:点击登陆&注册 右键 --> 禁用即可

准备数据:

在桌面新建一个文件夹:

这里使用Notepad++这个软件(它不会带任何格式),编写登陆接口的不同测试场景

注意:使用英文逗号,不用加双引号把字符串引起来,jmeter也可以处理

添加配置元件 --> csv

配置csv文件信息

添加循环控制器

因为是一个接口对应4条用例,需要让它循环来执行:

数据驱动tab右键 --> 添加 --> 逻辑控制器  --> 选择‘循环控制器’

注意层级关系:需要让jmeter循环读数据,然后循环进行登录,

所以把数据文件配置、 登陆接口拖到循环控制器的下面

并且在循环控制器中,修改循环次数(根据自己的用例条数,是几条写几)

修改断言

执行测试用例

上面的逐步都配置好了之后,就可以运行用例了

下面三条用例为什么失败了呢?

是因为断言里的预期结果的文案与接口文档中的不一致,需要一致才行

重新修改一下文件中的期望结果文案、重新执行一下,然后全部成功

结果查看--优化

重新运行一下:查看结果时,清晰明了


2.5 Jmeter接口关联测试

看看上面运行登录接口的接口, token在响应数据的body中

添加后置处理器

前面有了解过,后置处理器,就是处理在请求之后的工作

配置josn提取器

添加下游接口

添加配置信息头管理器

这里,我们添加HTTP信息头管理器的目的:是因为josn格式的body请求信息,需要与请求头当中的 Content-Type一一对应

设置content-type的格式为:application/ison(请求参数格式为josn)

运行接口用例:


2.6 JDBC驱动及数据断言

数据库连接JDBC驱动下载

点击 DOWNLOADS,把页面滚动到最下面,点击 MySQL Community (GPL) Downloads

点击 Connector/J ----进入后选择Platform Independent ---选择zip格式(windows系统选zip)

注意下载驱动的版本要与mysql的版本相匹配,如果驱动版本比msql版本高,可能用不了

点击下载:

下载后,将mysql-connector-java-5.1.48-bin.jar这个文件放到jmeter的bin目录下

Jmeter中关联jar包

配置连接数据库的配置信息

选择要添加的线程组 --> 添加 --> 配置元件 --> 选择JDBC Connection Configuration

添加JDBC请求配置

JDBC Connection Configuration页面:相当于mysql的链接信息配置 

拉到最下面,把数据库连接的4项信息填上 

Database URL:dbc:mysql://xx域名:3306/数据库地址  (3306是端口号)

添加配置JDBC Request

注意层级关系,把它拖到循环控制器的下面

引用JDBC Connection Configuration中的数据库名字

正常写sql就行 

上面的【HTTP请求默认值】不变(协议、域名),还是使用上面的测试网址信息

【用户定义的变量】,变量信息指明,账号与密码为前面已注册成功的

添加一个【HTTP请求】 ,请求名称使用上面的SQL查询结果变量

【用户定义的变量】中指定了账号与密码的变量,所以使得【JDBC Request】中的查询结果就是查询变量中的账号/密码:

登陆接口基于【JDBC Request】的查询结果,拿到的账号密码执行登录,所以执行成功

这就是为什么登录接口的名称中要引用查询的变量

举报

相关推荐

0 条评论