zoukankan      html  css  js  c++  java
  • Jmeter

    Jmeter概述

    Jmerter简介

    Apache Jmeter是Apache组织的开源项目,是一个纯Java桌面应用,用于压力测试和性能测试。它最初设计用于Web应用测试后来扩展到其他测试领域。

    Jmeter功能

    能够对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试(通过JDBC)。

    • 完全的可移植性和100%纯java。
    • 完全Swing(java设计的GUI工具包)和轻量组建支持。
    • 完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样
    • 精心的GUI设计允许快捷操作和更精确的计时
    • 缓存和离线分析/回访测试结果

    Jmeter接口测试

    jmeter接口测试的简单操作包括做Http脚本编辑(发get/post请求,cookie设置、header设置,权限认证)、参数化、断言、关联和数据驱动等。


    Jmeter初级实践

    Jmeter脚本编写一般分五个步骤:

    1. 添加线程组
    2. 添加http请求
    3. 在http请求中写入接入url、路径、请求方式和参数
    4. 添加查看结果树
    5. 调用接口、查看返回值

    测试接口:

    http://httpbin.org

    httpbin.org 这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等,且支持 GET、POST 等多种方法,对 web 开发和测试很有帮助。

    发送GET请求

    请求URL如下:

    http://httpbin.org/get

    在jmeter配置如下图所示:

    在查看结果树选择Json path Tester 如下图所示可以看到返回结果:

    发送POST请求

    请求URL如下:

    http://httpbin.org/post

    Jmeter配置如下图所示:

    响应结果:

    HTTP请求默认值

    Web服务器中的协议和服务器名称或IP这两个值是一样的,每次重复输入起始比较麻烦,英雌可以试用HTTP请求默认值来管理这样的公共配置数据。

    添加步骤:线程组——添加——配置元件——HTTP请求默认值 然后进行如下配置, 并吧元件防止在请求前面。

    经过请求默认值的配置后,后续我么年增加新的请求,如果这两项是一样的话则无需重复填入该值

    断言设置

    断言设置步骤如图:

    Jmeter可以针对每一个请求响应进行断言。常用断言模式匹配规则如下:

    • 包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式
    • 匹配:效应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达式
    • Equals:响应内容要完全等于匹配的内容才代表成功,大小写敏感,需要匹配的内容是字符串正则表达式
    • Substring:返回结果包含指定结果的字串,但是不支持正则字符串
    • 否:不进行匹配

    测试:如下图所示,断言返回的字符串是否包含 “”httpbin.org/get“”

    如果断言成功,结果树显示为绿色标志,失败则为红色标志,下图中将post请求故意断言失败:

    参数设置

    Jmeter支持通过Query String Parameters 或者 Request body 请求体来传递数据

    Query String Parameters

    如果希望在请求URL中添加参数,则可以在HTTP请求界面的Paeameters选项里面添加参数。该参数会通过Query String Parmeters方式传递给服务器,也就是在URL中传递参数。如下图所示设置参数:

    Request body

    在Post请求中参数一般在body中传递,Jmeter也支持在body中传递数据。如传递Json格式的参数,在Body Data 编辑框输入参数,另外还需要指定参数的格式,因此需要添加HTTP信息头管理器。并在管理器里添加参数类型 Content-Type:appication/json 如下图所示:

    变量

    Jmeter支持以下类型变量

    • 用户自定义变量
    • 函数生成变量
    • BeanShell变量
    • csv数据文件变量

    用户自定义变量

     设置步骤:

    Tips:

    每次迭代更新一次:如果有多个用户/使用变量时勾选,如果不勾选,所有线程用的是同一个值,需要不同的线程用不同的值,需要勾选此选项

    在请求时变量引用格式为:${heroname}  如下图所示:

    请求数据:

    函数生成变量

    Jmeter由许多内置的函数,可以生成随机数。

    创建步骤:|

    生成变量:

    请求结果:

    BeanShell变量

    什么是Bean Shell?

    • Beanshell是一种完全符合java语法规范的脚本语言,并且由用由自己的一些语法和方法;
    • Beanshell是一种松散类型的脚本语言(与JavaScript类似);
    • Beanshell是用Java写成的,一个小型的、免费的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简;
    • Beanshell实行标准Java语句和表达式,另外包括一些脚本命令和语法;

    官网:http://www.beanshell.org/

    Jmeter有哪些BeanShell

    • 定时器:BeanShell TIme
    • 前置处理器:BeanShell PreProcessor
    • 采样器:BeanShell Sampler
    • 后置处理器:BeanShell Postprocessor
    • 断言:BeanShell 断言
    • 监听器:BeanShell Listener

    Bean Shell 常用内置变量

    Jmeter在它的BeanShell中内置了变量,用户可以通过这些变量与Jmeter进行交互,其中主要的变量及其使用方法如下:

     vars - (JmeterVariables):操作Jmeter变量,这个变量试剂引用了Jmeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

    //定义Jmeter变量
    
    var.put(String key,string value);
    
    //从Jmeter中获取变量
    
    vars.get(String key);

    BeanShell实践案例

    1、创建一个Http请求,请求地址为:http://httpbin.org/get同时设置传递的参数为beanshell_user

    2、创建BeanShell PreProcessor 变量设置如下所示:

    3、变量已经生效

      

    csv数据文件变量

    csv数据文件变量是指从外部csv文件读取数据来作为变量。

    1、添加步骤:

    2、创建csv文件

    文件名:user_data.csv

    文件内数据:leesin,6666

    3、csv文件设置:

    返回数据如下:

    POST http://httpbin.org/post
    
    POST data:
    user=leesin&passwd=6666
    
    [no cookies]
    
    Request Headers:
    Connection: keep-alive
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 23
    Host: httpbin.org
    User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)

    csv参数化

    针对刚刚POST接口进行如下参数遍历测试:

    接口如下:

    http://httpbin.org/post

    发送参数:user_data.csv

    leesin,6666
    zed,3333
    jawen,rrrr

    1、在之前的csv数据文件设置更改配置如下:此操作表示把所用数据读取一遍,且不重复

    2、在请求名称后面加上变量可以方便我们后期擦好看数据遍历情况:

    3、将线程组的数量更改,比如csv文件中有3组数据,线程数就更改为3。最后运行结果如下:

    正则匹配

    在接口测试过程中经常需要接口之间关联调用,比如获取上一个接口的返回值,作为另一个接口的请求参数。此时就需要使用jmeter的正则表达式提取器,通过对响应的数据来提取指定的数据。的

    操作案例

    从请求Http-get的响应数据中匹配随机数num的值,然后创建请求get-num来引用num的作为请求参数

    操作步骤

    1、在函数助手中设置一个1-100的随机数,待会提取使用:

    2、创建正则表达式提取器

    3、配置正则表达式提取器

    4、新建请求get-num,在新的请求中将http-get返回的数据作为传递参数:

     

    此时发送请求,两个HTTP请求的请求数据是一样的

    正则表达式配置表:

    • 引用名称:请求要引用的变量名称,如填写result_num,则可用${result_num}引用它;
    • 正则表达式:匹配需要的内容;
    • 模板:用$num$引用起来,如果在正则表达式中有多个匹配数据,num表示匹配到的第几个值给变量。如:$1$表示匹配到的第1个值储存在变量中;
    • 匹配数字:0代表随机取值,1代表取全部值;
    • 缺省值:如果参数没有取得到值,那默认给一个值让他取;

    案例中正则表达式说明:

    • ()括起来的部分代表要提取的值;
    • .匹配任何字符;
    • +匹配一次或多次
    • ?在找到的第一个匹配项后停止

    相关资料:正则表达式教程

    用例数据分离

    之前用例数据都是配置在Jmeter Http请求中,每次需要增加,修改用例都需要打开Jmeter重新编辑,当用例越来越多的时候,用例维护起来就越来越麻烦。那么我们就可以将用例的数据存放在csv文件中,然后通过csv文件配置来读取用例中的数据,执行测试。用例数据如下图所示:

    用例名称变量含义:

    • ${caseSeq}:用例编号
    • ${apiType}:api类型
    • ${apiSeq}:api版本号
    • ${apiName}:api名称
    • ${priority}:优先级
    • ${url}:api路径
    • ${methids}:请求方法
    •  ${parameter}:请求参数
    • ${expectValue}:期望值,用于断言

     案例演示:

    1、新建一个线程组,命名:数据驱动

    2、创建一个Http请求默认值,设置如下:

    3、添加一个循环控制器,位置:线程组--添加--逻辑控制器--循环控制器。()循环控制器可以控制整个用例循环执行的次数)默认值是1根据用例数量修改为4.

    4、在循环控制器节点系阿创建csv文件设置,配置内容如下:

    5、创建一个if控制器,位置:线程组--添加--逻辑运算器--if控制器

    if控制器的作用为根据不同条件执行不同的用例,例如这里根据不同的接口请求类型,分别创建了GET和POST控制器。

     GET设置的条件语句如下:

    "${methods}"=="GET" 其中${methods}表示引用csv的methods中的值

    参数:

    • interpret Condition as Variable Expression?:如果这项被选中,将不会使用js解析;条件表达式的值必须是true(忽略大小写),这里我们取消勾选状态
    • Evaluate for all children:如果心中这一项,在每个子节点执行前都会计算表达式

    Post条件语句设置为:“${methods}”=="POST"

    6、创建GET请求类型用例如下:

    用例名称格式:${caseSeq}_${apiSeq}_${apiName}

    断言设置:

     

    添加查看结果树,运行后看到的结果如下:
     

    通过数据驱动当面临大量用例时其Jmeter设置和用例后期维护工作就会非常高效

    Cookie设置

    HTTP Cookie 管理器

    如果你有一个HTTP请求,其返回值结果包含一个cookie,那么使用Jmeter Cookie管理器会自动将该Cookie保存起来,而且以后所有对该网站的请求都是用同一个Cookie。每个Jmeter线程都有自己独立的“cookie保存区域”

    案例实践:

    发送两个请求,将第一个请求的cookie值保存,第二个请求进行复用

    请求URL:http://httpbin.org/cookies/set

    设置的cookie内容:hero/leesin

    1、添加HTTP Cookie 管理器:

    2、新增一个HTTP请求,名称为:set-cookie,方法为:GET,路径为:/cookies/set/hero/leesin

    3、添加查看结果树,运行可以看到cookie数据

     

    4,、新增一个HTTP请求,名称为:get-cookie,方法为:GET,路径为:/cookies,运行后可以看到get-cookie也包含的cookie数据

      

    授权设置

    上一个学习Postman的文章中,使用过对各种授权协议的接口进行测试,在Jmeter中同样也支持对授权的接口进行测试。关于各个授权协议的内容请参考Postman内容中的介绍

    Basic Auth

    案例实践:

    接口:http://httpbin.org/basic-auth/{username}/{passwd}

    用户名:hero

    密码:leesin

    1、新建http请求名称为:basic-auth

    2、添加HTTP授权管理器,添加路径:选中请求--添加--配置元件--HTTP授权管理器

    执行结果如下:

    请求内容:

    GET http://httpbin.org/basic-auth/hero/leesin
    
    GET data:
    
    
    [no cookies]
    
    Request Headers:
    Connection: keep-alive
    Host: httpbin.org
    User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
    Authorization: Basic aGVybzpsZWVzaW4=

    请求内容中带有授权信息Authorization:BasicaGVybzpsZWVzaW4=,而aGVybzpsZWVzaW4=这个数值就是将 “用户名:密码” 经过Base64编码后计算出来的。

      

    Digest Auth

    案例实践:

    接口:http://httpbin.org/digest-auth/{qop}/{username}/{passwd}

    {qop}这个参数规定server支持保护方案。client能从列表中(auth,auth-int)选择一个。

    • auth表示仅仅进行身份验证;
    • auth-int表示进行验证外,另一些完整性保护;

    用户名:hero

    密码:leesin

    测试报告

    批量执行完接口测试之后,我们需要查看测试报道,之前单个接口调试是通过 “查看结果树”来查看结果,但是当大批量执行接口测试后依旧这样查看坑定会很低效。

    聚合报告

    聚合报告是一个比较精简的报告元件,可以查看每个接口的性能情况与执行结果。

    添加路径:

    运行结果:

    各个参数含义如下:

    • Label----每个请求的名称,比如HTTP请求等
    • Samples----发给服务器的请求数量
    • Average----单个请求的平均响应时间 毫秒ms
    • Median----50%请求的响应时间  毫秒ms
    • 90%Line----90%请求响应时间 毫秒ms
    • 95%Line----95%请求响应时间 毫秒ms
    • 99%Line----99%请求的响应时间 毫秒ms
    • Min----最小的响应时间 毫秒ms
    • Max----最大的响应时间 毫秒ms
    • Error%----错误率=错误的请求的数量/请求的总数
    • Throughput----吞吐量即表示每秒完成的请求数
    • Received KB/sec----每秒从服务器端接收到的数据量
    • Sent KB/sec----每秒从客户端发送的请求的数量

    HTML报告

     工作中会碰到将测试报告以HTML附件的方式发送给各个项目成员,那么需要生成测试报告。Jmeter3.0以后引入了Dashboard Report,用于生成HTML页面格式图形化报告的扩展模块。

    生成步骤:

    打开cmd进入jmeter目录bin目录

    执行命令:

    jmeter -n -t C:UserscclDesktopdata_driver.jmx -l httpbin.jtl -e -o C:UserscclDesktop
    eport

    命令参数:

    • -n:以非GUI形式运行Jmeter
    • -t:Jmeter脚本路径
    • -l:result.jtl 运行结果保存路径(.jtl)此文件必须不存在
    • -e:在脚本运行结束后生成html报告
    • -o:用于存放html报告的目录,不加改参数默认生成到bin eport-output

    生成的测试报告样式如下:

  • 相关阅读:
    爬虫的基本原理
    爬虫的分类
    gcc编译
    C++字符串总结
    PE文件格式学习笔记
    学习SDR过程中的参考网页
    Linux下源码编译安装遇到的问题
    web | jsp考试复习要点整理
    爬虫 | php封装 | file_get_contents
    re | [NPUCTF2020]EzObfus-Chapter2
  • 原文地址:https://www.cnblogs.com/youngleesin/p/11042421.html
Copyright © 2011-2022 走看看