zoukankan      html  css  js  c++  java
  • JMeter接口测试

    一、Jmeter 的使用步骤

    在Jmeter 页面中,右键“测试计划” -> “添加” -> "Threads(Users)" -> “线程组”, 建立线程组。

    右键“线程组” -> “添加” -> “Sample” -> “HTTP请求”, 输入“服务器名称或IP”,对应的端口号,http默认端口号80,可以不写。

    以下请求为GET, 所有“方法”那选择“GET”, 输入对应的路径,添加参数及值。

    注意: “服务器名称或IP”中不用输入http://, 请求时会自动加入(eg, 输入api.test.cn).

    右键“线程组” -> “添加” -> “监听器” -> “察看结果数”, 添加“察看结果数”, 以察看运行后的结果,如果所示。

    这是一个简单的接口请求例子。

    二、接口请求实例

    1. “用户定义的变量” 的应用

    以获取学生信息接口(stu_info) 为例,添加一个“用户定义的变量”,设置变量"host" 以及值,这样在获取学生信息接口(stu_info)就可以通过"${host}"取得“服务器名称或IP”的值。

    登陆接口(login)接口也可以应用“用户定义的变量”的方法,如上图所示,在“用户定义的变量”中添加"username", "password" 变量及对应的值, 应用到登陆接口(login)接口请求中即可。

     2. "HTTP Cookie 管理器"的应用

    以金币充值接口(gold_add)为例,建立一个HTTP请求改名“金币充值”,选取请求方式POST, 输入对应的host, path以及同请求一起发送的参数和值。

    由于此接口有权限验证,需要admin用户才可以做操作,需要添加cookie, 因此需要添加"HTTP Cookie 管理器"以传递Cookie。

    添加"HTTP Cookie 管理器" 方法如下图所示, 右键“金币充值” -> “添加” -> “配置元件” -> "HTTP Cookie 管理器" 

    设置Cookie 的名称(即username 的值),值(即login Response 中的sign 值),域(已在“用户定义的变量”中设置,只需输入变量即可,格式为${host})

    最后可以通过“察看结果数”的响应数据查看结果。

    3. 建立接口间的关联

    以下以登陆接口(login)和金币充值接口(gold_add)为例,在这两个接口间建立关联,让金币充值接口(gold_add)可以实时取得登陆接口(login)的"sign" 值,不必再“HTTP Cookie 管理器”中手动输入最新的sign 值。

    从“察看结果树”可以看出,登陆接口(login)的Response 结构为Json格式, sign 在 login_info 里面一层。

    3.1 应用"jp@gc - JSON Path Extractor" 来实现

    右键“登陆” -> “后置处理器 -> "jp@gc - JSON Path Extractor" (新版jmeter中 是jp@gc - JSON/YAML Path Extractor)

    通过“察看结果数”得到Response 的结果后, 将“JSONPath Expression” 输入"$.login_info.sign", 设置变量"sign2", 给金币充值接口(gold_add)用

    因此需要在“HTTP Cookie 管理器”中将${username}的值输入${sign2},代替之前手动输入的那一串码。

    3.2 右键“登陆” -> “后置处理器 -> "正则表达式提取器" 

    输入对应的值,将“引用名称”输入"sign2",以保证和“HTTP Cookie 管理器”的一致。将正则表达式中的式用login 接口返回的 "sign": "cd2b43f1688e472e3a516b5a2c6831e8",  中的一串码用(.*) 替换即可。

    各参数的含义参考下表:

    参数

    释义

    引用名称

    在HTTP等请求中,引用此数据,需要用到的名称

    正则表达式

    用于将需要的数据提取出来

    模板

    表示使用提取到的第几个值:
    $-1$:表示取所有值
    $0$:表示随机取值
    $1$:表示取第1个
    $2$:表示取第二个
    以此类推:$n$:表示取第n个

    匹配数字(0代表随机)

    0 代表随机取值,1 代表全部取值

    缺省值

    如果正则表达式没有搜找到值,则使用此缺省值

    4. 设置断言

    以“增加学生”接口(add_stu)为例,增加响应断言,以验证添加的数据是否成功。如下图所示设置

    通过“察看结果数”可以看到“增加学生” 金币结果为绿色,同时响应数据里的确有断言中的设置的"1000"。

     

     5. “HTTP信息头管理器”的使用

    以下图中的“获取所有学生信息” 为例,右键“获取所有学生信息” -> “添加” -> “配置元件” -> "HTTP信息头管理器" , 输入对应的名称和值即可。

    注意:  这里的值需要输入完整的url, 包括http:// (eg, 输入http://api.test.cn)

    6. POST 文件的使用方法

    与其他POST请求中添加key-value, json 数据不同的是,这个需要在HTTP 请求中点击“Flies Upload” tab, 点击“添加”, 然后通过“浏览”上传本地的文件。

    注意: 参数名称必须为"file"。

    7. "CSV Data Set Config" 和 “函数助手对话框”的使用

    以增加学生接口(add_stu)为例,在本地创建一个文件,添加name 和sex的值,对脚本设置5个线程或者循环5次,以加入这5个用户。 

    右键“线程组” -> “添加” -> “配置元件” -> "CSV Data Set Config",如果仅应用于“增加学生”接口的话,可以直接在“增加学生”接口下面创建"CSV Data Set Config"。

    根据下图添加对应的,"Variable Names" 输入"name" 和"sex", 以逗号隔开,为避免插入的数据乱码,将file encoding 设置为utf-8。

    由于"CSV Data Set Config"中的变量名为name 和sex,因此在“增加学生”接口的"Body Data" 中将值分别替换为${name}, ${sex}。

    由于“phone”的唯一性,每次插入一条学生信息时phone 都要求不一样,所以对后面8位用随机函数来实现。

    8. 数据库的应用

    以下是JMeter 驱动数据库列表:

    数据库

    驱动

    数据库url

    mysql

    com.mysql.jdbc.Driver

    jdbc:mysql://host:port/{dbname}?allowMultiQueries=true

    oracle

    org.postgresql.Driver

    jdbc:postgresql:{dbname}

    PostgreSQL

    oracle.jdbc.driver.OracleDriver

    jdbc:oracle:thin:user/pass@//host:port/service

    MSSQL

    com.microsoft.sqlserver.jdbc.SQLServerDriver

    或者net.sourceforge.jtds.jdbc.Driver

    jdbc:sqlserver://IP:1433;databaseName=DBname

    或者jdbc:jtds:sqlserver://localhost:1433/"+"library"

    以下以mysql 数据库为例。添加一个"JDBC Connection Configuration", 根据上表中对mysql的要求设置下图的值。 

    添加一个"JDBC Request",Variable Name:这里填写添加JDBC Connection Configuration时填写的变量名,以便建立关联。Query Type:根据需要进行设置,例中选择查询

    在Query Type 中有insert 和select, 所以Query Type 需要选择"Callable Statement", 如果是单个的select 或者insert,可以选取对应的Select Statement 和Update Statement。

    通过察看结果数看到"JDBC Request" 请求成功,响应数据里返回insert 和select 的结果。

    登陆mysql 数据库,查询发现和Jmeter 中通过察看结果数看到的结果一致。

     **注意点:

    对于Jmeter 中中文乱码,可以将"in" 路径下的"jmeter.properties" 文件设置为 "sampleresult.default.encoding=utf-8",如下所示。

    对于Jmeter 里中文显示不出来的问题,可以打开"in" 路径下的"jmeter.properties" 文件,如下图所示,将这几个JS开头的注释去掉。

    将数据库查询结果作为参数化数据

    1、使用Variable names

    如果给Variable names参数设置了值,它会保存sql语句返回的数据和返回数据的总行数。假如,sql语句返回2行,3列,且variables names设置为A,,C,那么如下变量会被设置为:

      A_#=2 (总行数)
      A_1=第1列, 第1行
      A_2=第1列, 第2行 
      C_#=2 (总行数) 
      C_1=第3列, 第1行
      C_2=第3列, 第2行

    如果返回结果为0,那么A_#和C_#会被设置为0,其它变量不会设置值。
    如果第一次返回6行数据,第二次只返回3行数据,那么第一次那多的3行数据变量会被清除。
    可以使用${A_#}、${A_1}...来获取相应的值

    如下图,Variable names设置A,B,C。Http请求参数username设置${B_2},代表取sql语句返回结果第二列的第二行结果。
    图片描述

    图片描述

    2、正则表达式提取器

    JDBC Request配置

    右键线程组->添加->后置处理器->正则表达式提取器

    配置:

    说明:

    • 引用名称:自定义输入(参数化时会用到该名称
    • 正则表达式:用于匹配的正则表达式,例如:username=(.+?)passwd=(.+?)
    • 模板:通常的形式是:$n$,比如:$1$$2$(这里的n为第n个提取的内容,$n$即上述正则表达式中,第n个括号中的内容)
    • 匹配数字(0代表随机):0代表随机,1代表全部,除1外的正整数n代表第n个已提取的内容。
    • 缺省值:正则匹配失败时,取的默认值,通常设置为空

    引用名称的引用方式说明:

    例1:
    引用名称: name
    正则表达式:username=(.+?)passwd=(.+?)
    模板:$1$$2$
    匹配数字(0代表随机):1
    缺省值:为空

    引用时:${name_g1}表示第1个括号中的内容,${name_g2}表示第2个括号中的内容


    例2:
    引用名称: name
    正则表达式:username=(.+?)passwd=(.+?)
    模板:$1$$2$
    匹配数字(0代表随机):2
    缺省值:为空

    引用时:${name}表示第2个括号中的内容

    结论:也就说有多个需要提取的内容(即多个括号),匹配数字设置为1时,取第n个括号中的内容需要用${name_gN}来获取

     
  • 相关阅读:
    centos下安装nethogs
    Nginx+Tomcat反向代理利用certbot实现https
    Mysql主从复制读写分离
    短链接及关键字过滤ac自动机设计思路
    接口访问加密和限频方案
    算法笔记
    redis原理及使用
    memcached原理
    Spring中AOP的两种代理方式(Java动态代理和CGLIB代理-转载
    基于注解的Spring AOP的配置和使用--转载
  • 原文地址:https://www.cnblogs.com/tester-l/p/6017586.html
Copyright © 2011-2022 走看看