jmeter测试方法(JMeter接口测试)

一、接口测试步骤

  • 第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;
  • 第二步:从接口说明文档中整理出接口测试用例,里面要包括详细的入参和出参数据以及明确的格式和检查点。
  • 第三步:和开发一起对接口测试用例进行评审。
  • 第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。
  • 第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发

二、接口自动化适用场景:

目前设计的自动化接口测试案例有两个运行场景:

  • 测试前置、开发自测:

一个新的自动化接口测试案例开发完成后,直接发给接口对应的开发,安排在开发本地环境执行,一旦开发确认完成接口开发,就开始执行接口测试案例,基本上可以实时拿到测试结果,方便开发快速做出判断。【开发本地运行的方式就是打开Jmeter工具,导入JMX文件,开始执行可。】

  • 回归测试:

开发本地测试通过后,或整个需求手工测试通过后,把自动化的接口测试案例做分类整理,挑选出需要纳入到回归测试中的案例,在持续集成环境重新准备测试数据,并把案例纳入到持续集成的job中来,这些用于回归的接口测试案例需要配置到持续集成平台自动运行。

三、实战一:

  • 接口信息:

登录接口

接口地址:http://192.168.239.3:80/freshO2O/login.action

请求方法:POST

输入参数

URL参数

名称

类型

长度

选项

描述

account

string

11

必填

登录用户账号

password

string

32

必填

密码

verifycode

string

12

可选

eg:http://192.168.3.223:8080/freshO2O/login.action?account=fu&password=123456

输出结果

Result

名称

类型

长度

选项

描述

account

string

16

必填

用户账号

addr

string

20

必填

用户地址

msg

string

32

可选

状态信息

password

string

11

必填

用户密码

result

string

16

必填

返回结果,ok或 error

eg:

{"account":"fu","addr":"深圳市宝安区中南花园","msg":"账户名不存在","password":"123456","result":"ok"}

  • 操作步骤

1)添加线程组:

右键点击“测试计划” -> “添加” -> “线程(用户)” -> “线程组”

jmeter测试方法(JMeter接口测试)(1)

2) 添加Http请求

右键点击“线程组” -> “添加” -> “Sampler” -> “HTTP请求

jmeter测试方法(JMeter接口测试)(2)

3) 填写Http请求参数

  • Web服务器 的协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
  • 服务器名称或IP :HTTP请求发送的目标服务器名称或IP
  • 端口号:目标服务器的端口号,默认值为80
  • Http请求方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
  • 路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)
  • Content encoding :编码方式,默认为ISO-8859-1编码,这里配置为utf-8

同请求一起发送参数 ,在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”

jmeter测试方法(JMeter接口测试)(3)

4) 添加察看结果树

右键点击“线程组” -> “添加” -> “监听器” -> “察看结果树”

jmeter测试方法(JMeter接口测试)(4)

5) 运行Http请求,检查结果树

运行Http请求,修改响应数据格式为“HTML Source Formatted”,可以看到本次搜索响应结果

jmeter测试方法(JMeter接口测试)(5)

jmeter测试方法(JMeter接口测试)(6)

6) 配置线程组(测试性能)

线程组名称,线程数,准备时长(Ramp-Up Period(in seconds))循环次数,调度器等参数

  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
  • Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
  • 环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
  • Delay Thread creation until needed:直到需要时延迟线程的创建。
  • 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
  • 持续时间(秒):测试持续时间,会覆盖结束时间
  • 启动延迟(秒):测试延迟启动时间,会覆盖启动时间

jmeter测试方法(JMeter接口测试)(7)

7) 添加用户自定义变量

  • 可以添加用户自定义变量用以Http请求参数化,右键点击“线程组” -> “添加” -> “配置元件” -> “用户定义的变量”

jmeter测试方法(JMeter接口测试)(8)

  • 新增两个参数,存放登录帐号和密码:

jmeter测试方法(JMeter接口测试)(9)

  • 并在Http请求中使用该参数,格式为:${wd}

jmeter测试方法(JMeter接口测试)(10)

8) 添加断言

右键点击“HTTP请求” -> “添加”-> “断言” -> “响应断言”

jmeter测试方法(JMeter接口测试)(11)

校验返回的文本中是否包含帐号信息的词,添加参数到要测试模式中

jmeter测试方法(JMeter接口测试)(12)

右键点击“HTTP请求” -> “添加”-> “监听器” -> “

jmeter测试方法(JMeter接口测试)(13)

9) 查看断言结果

运行一次脚本就可以看到断言结果是成功还是失败,如果失败,则会出现断言找不到的提示信息,如图:

jmeter测试方法(JMeter接口测试)(14)

10) 添加聚合报告

右键点击“线程组” -> “添加” -> “监听器” -> “聚合报告”,用以存放性能测试报告

jmeter测试方法(JMeter接口测试)(15)

一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。

jmeter测试方法(JMeter接口测试)(16)

11) 聚合报告参数详解

  • Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
  • #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
  • Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
  • Median:中位数,也就是 50% 用户的响应时间
  • 90% Line:90% 用户的响应时间
  • Min:最小响应时间
  • Max:最大响应时间
  • Error%:错误率——错误请求数/请求总数
  • Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数 (按请求数来展示的,比如说1.9/sec,就是每s发送1.9个请求)
  • 最后面两个就是每秒接收数据量和发送数据量,不过这两个值,有些情况下会没有

备注:

jmeter测试方法(JMeter接口测试)(17)

  • 右上角,小框框里面显示的是脚本的运行时间,小三角形前面的数字,代表jmeter运行过程中的异常数,这个异常数和脚本里的错误是两码事。比如连接不上服务器,这里就会有异常。小圈圈前的0/1代表当前正在运行的线程数和脚本运行中的最大线程数,因为现在脚本已经停止运行了,所以没有线程在运行,所以前面就是0。而且我的脚本运行时,只启了一个线程,所以最大线程数就是1。在察看结果树里,没有结果输出,代表没有错误的请求,重点看聚合报告
  • 使用Jmeter工具开发的接口测试案例,一个子系统建议放在同一个“测试计划”中,流程测试可以通过“线程组”来区分,这样也便于设定不同的测试数据个数。比较独立的接口,可以统一放在一个线程组内,顺序完成测试。  
  • 流程性接口的测试:如果要测试的接口可以组成一个流程,只需要顺序添加多个“HTTP 请求”的Sampler,各请求之间可以提取需要在上下文传递的数据作为参数,以保证流程中数据的一致性。

四、实战二 :

  • 接口信息:

名称

用户登录

描述

用户登录接口

URL

http://192.168.3.223:8080/freshO2O/login.action

方法

post

参数

account 用户账号 password 密码

返回结果

{ "account": "fu", "addr": "深圳市宝安区中南花园", "msg": null, "password": "123456", "result": "ok"}

  • 操作步骤

1) 设计测试用例

  • 正常参数

account=fu password=123456

  • 异常参数,比如用户密码错误。

account=admin password=123456

2) jmeter 设置

  • 新建测试计划,名字为:菜篮子接口测试。
  • 在测试计划上添加线程组,名字为:用户登录接口测试。
  • 在线程组上添加2个采样器,即2个测试用例,类型选择HTTP请求。

第一个名字为:正常用户登录,

第二个为异常用户登录,分别输入IP地址,端口号与路径,方法选择POST,并添加对应的参数。

  • 添加断言,选择响应断言,正常用户登录用例包含关键字: "result":"ok"
  • 异常用户登录用例包含关键字:"result":"error"添加查看结果树 添加->监听器->察看结果树 添加聚合报告 添加->监听器->聚合报告

3) 运行测试并查看结果:

点击绿色小三角图标,通过察看结果树与聚合报告确认结果,察看结果树是绿色表示测试成功,红色表示测试失败。如下图,测试成功。

4) 测试用例参数化(两种)

以上的例子不管IP地址还是具体的参数都是直接赋值,这样如果服务器地址或者接口的参数有变化,维护起来比较麻烦,最好用参数化的方式来编写测试用例。参数化的方式有两种:

jmeter测试方法(JMeter接口测试)(18)

jmeter测试方法(JMeter接口测试)(19)

  • (1). 添加CSV Data Set Config参数化设置。(逗号分隔值:Comma-Separated Values)

比如接口用例的地址中的IP地址,有可能服务器的IP地址会修改,最好做参数化,以下以用户登录的例子来讲解如何做参数化设置。

  • 编辑文件host.txt,内容包含IP地址与端口号,比如以下内容。192.168.142.143, 80把文件保存到D盘。
  • 添加 CSV Data Set Config

由于IP地址与端口号每个测试用例都用到,故在整个测试计划下面添加CSV Data Set Config

  • 右击测试计划->添加配置元件->CSV Data Set Config -> 修改配置如下:

名称:改成一个有意义的名称,比如IP地址。filename:指定为上面编辑的文件,并带路径,d:\host.txt 。变量名:定义2个变量,host获取文件中的IP地址,port获取文件中的端口号。Delimiter:变量分隔符,随便指定一个标点符号,这里用逗号,文件中IP地址的值与端口号之间也需要是逗号。

  • 变量引用格式:${}
  • (2). 利用函数助手完成参数化。

通过界面操作直接设置参数,比如要设置用户登录接口的account与password的值。

  • 同样需要编辑一个文件,文件内容包含account的值与password的值。内容为:fu,123456 保存文件为jmeter_account.txt,保存到D盘。点击 选项-->函数助手 调出函数助手对话框 选择 _CSVRead 函数(下图第一个框)函数参数:第一个参数:填写文件路径,如:d:\jmeter_account.txt第二个参数:文件列号是从0开始的,第一列为0、第二列为1、第三列为2、依次类推,然后点击【生成】按钮,则会自动生成我们需要的参数化函数。
  • 复制生成的参数化参数到需要使用的地方即可。比如把生成的账号参数拷贝到用户登录用例的account,值为${__CSVRead(d:\jmeter_account.txt,0)}

jmeter测试方法(JMeter接口测试)(20)

函数参数

描述

名称

设置从哪个文件读取(或者*ALIAS)

列数

从文件的哪一列读取。

0=第一列, 1=第二列,依此类推。“next”为走到文件的下一行。*ALIAS为打开一个文件,并给它分配一个别名

5)参考答案截图:

jmeter测试方法(JMeter接口测试)(21)

jmeter测试方法(JMeter接口测试)(22)

jmeter测试方法(JMeter接口测试)(23)

五、实战三:

  • 接口信息:

百度搜索接口

接口地址: http://www.baidu.com/s?ie=utf-8&wd=jmeter性能测试

请求参数:

  • ie:编码方式,默认为utf-8
  • wd: 搜索词

返回结果:

  • 搜索结果,我们可以通过校验结果中是否含有搜索词wd来判断本次请求成功或失败
  • 操作步骤

1) 添加线程组:

右键点击“测试计划” -> “添加” -> “线程(用户)” -> “线程组”

jmeter测试方法(JMeter接口测试)(24)

2) 配置线程组

线程组名称,线程数,准备时长(Ramp-Up Period(in seconds))循环次数,调度器等参数

  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线

程数。

  • Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备

时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。

  • 环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。 Delay Thread creation until needed:直到需要时延迟线程的创建。 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远) 持续时间(秒):测试持续时间,会覆盖结束时间 启动延迟(秒):测试延迟启动时间,会覆盖启动时间

jmeter测试方法(JMeter接口测试)(25)

3) 添加Http请求

右键点击“线程组” -> “添加” -> “Sampler” -> “HTTP请求

jmeter测试方法(JMeter接口测试)(26)

4) 填写Http请求参数

  • Web服务器 的协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
  • 服务器名称或IP :HTTP请求发送的目标服务器名称或IP
  • 端口号:目标服务器的端口号,默认值为80
  • Http请求方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
  • 路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)
  • Content encoding :编码方式,默认为ISO-8859-1编码,这里配置为utf-8

同请求一起发送参数 ,在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”

jmeter测试方法(JMeter接口测试)(27)

5) 添加察看结果树

右键点击“线程组” -> “添加” -> “监听器” -> “察看结果树”

jmeter测试方法(JMeter接口测试)(28)

6) 运行Http请求,检查结果树

运行Http请求,修改响应数据格式为“HTML Source Formatted”,可以看到本次搜索响应结果标题为“jmeter性能测试_百度搜索”

jmeter测试方法(JMeter接口测试)(29)

7) 添加用户自定义变量

可以添加用户自定义变量用以Http请求参数化,右键点击“线程组” -> “添加” -> “配置元件” -> “用户定义的变量”

jmeter测试方法(JMeter接口测试)(30)

新增一个参数wd,存放搜索词:

jmeter测试方法(JMeter接口测试)(31)

并在Http请求中使用该参数,格式为:${wd}

jmeter测试方法(JMeter接口测试)(32)

8) 添加断言

右键点击“HTTP请求” -> “添加”-> “断言” -> “响应断言”

jmeter测试方法(JMeter接口测试)(33)

校验返回的文本中是否包含搜索词,添加参数${wd}到要测试模式中

jmeter测试方法(JMeter接口测试)(34)

右键点击“HTTP请求” -> “添加”-> “监听器” -> “断言结果”

jmeter测试方法(JMeter接口测试)(35)

9) 查看断言结果

运行一次脚本就可以看到断言结果是成功还是失败,如果失败,则会出现断言找不到的提示信息,如图:

jmeter测试方法(JMeter接口测试)(36)

10) 添加聚合报告

右键点击“线程组” -> “添加” -> “监听器” -> “聚合报告”,用以存放性能测试报告

jmeter测试方法(JMeter接口测试)(37)

这样,我们就完成了一个完整Http接口的JMeter性能测试脚本编写。

11) 执行性能测试

  • 配置线程组

点击线程组,配置本次性能测试相关参数:线程数,循环次数,持续时间等,这里我们配置并发用户数为10,持续时间为60s

jmeter测试方法(JMeter接口测试)(38)

  • 执行测试

点击绿色小箭头按钮即可启动测试,测试之前需要点击小扫把按钮清除之前的调试结果。

jmeter测试方法(JMeter接口测试)(39)

  • 分析测试报告

待性能测试执行完成后,打开聚合报告可以看到:

一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。

六、总结:

  • 压力测试
  • 压力测试分两种场景:

第一种是单场景,压一个接口的;

第二种是混合场景,多个有关联的接口。

  • 压测时间,一般场景都运行10-15分钟。如果是疲劳测试,可以压一天或一周,根据实际情况来定。
  • 压测任务需求的确认

压测前要明确压测功能和压测指标,一般需要确定的几个问题:

  • 固定接口参数进行压测还是进行接口参数随机化压测?
  • 要求支持多少并发数?
  • TPS(每秒钟处理事务数)目标多少?响应时间要达到多少?
  • 压服务器名称还是压服务器IP,一般都是压测指定的服务器
  • 压测设置线程数:并发数量,能跑多少量。具体说是一次存在多少用户同时访问Rame-Up Period(in seconds):表示JMeter每隔多少秒发动并发。理解成准备时长:设置虚拟用户数需要多长时间全部启动。如果线程数是20,准备时长为10,那么需要10秒钟启动20个数量,也就是每秒钟启动2个线程。循环次数:这个设置不会改变并发数,可以延长并发时间。总请求数=线程数*循环次数调度器:设置压测的启动时间、结束时间、持续时间和启动延迟时间。压测结果查看
  • 聚合报告

运行完后,聚合报告会显示压测的结果。主要观察Samples、Average、error、Throughput。

Samples:表示一共发出的请求数

Average:平均响应时间,默认情况下是单个Request的平均响应时间(ms)

Error%:测试出现的错误请求数量百分比。若出现错误就要看服务端的日志,配合开发查找定位原因

Throughput:简称tps,吞吐量,默认情况下表示每秒处理的请求数,也就是指服务器处理能力,tps越高说明服务器处理能力越好。

  • 压测结果的分析有错误率同开发确认,确定是否允许错误的发生或者错误率允许在多大的范围内;Throughput吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加;若在压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数;压测结束,登陆相应的web服务器查看CPU等性能指标,进行数据的分析;最大的tps:不断的增加并发数,加到tps达到一定值开始出现下降,那么那个值就是最大的tps。最大的并发数:最大的并发数和最大的tps是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数。压测过程出现性能瓶颈,若压力机任务管理器查看到的cpu、网络和cpu都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题。影响性能考虑点包括:数据库、应用程序、中间件(tomact、Nginx)、网络和操作系统等方面。
,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页