jmeter执行Http协议项目的接口测试

基本设置

  • 下载jmeter:https://jmeter.apache.org/
  • 下载jdk:https://www.oracle.com/technetwork/java/javase/downloads/index.html
  • 工具包存放路径:/*/apache-jmeter-5.2.1/lib/ext
  • 中文设置:打开jmeter-选项-选择语言-中文(简体)
  • 修改默认显示:打开/*/apache-jmeter-5.2.1/bin/jmeter.properties文件,搜索language=cn并注释掉,新增如下设置:
language=zh_CN
  • jmeter插件下载地址:https://jmeter-plugins.org/
  • jmeter中的参数调用:${参数名称}
  • 常用jmeter内置函数:time、timeshift
    1. time:${__time(yyyy-MM-dd)}—获取当前日期
      ${__time(yyyy-MM-dd HH:mm:ss:SSS,time)}—获取当前时间
      ${__time(,)}—获取当前时间戳13位
      ${__time(/1000,)}获取当前时间戳10位
    1. timeshift:可借助函数助手查看(若没找到该函数,表示jmeter版本过低)
      在这里插入图片描述
第三行为时间运算,实现加减日期。不使用符号时为增加,使用-号为减(使用时间加减时,需要首字母P),再搭配天、小时、分、秒对应的字母为 D\H\M\S
当只需要变量天时,可以直接使用 1D、+2D、-3D等,如:
${__timeShift( yyyy-MM-dd HH:mm:ss,,P1D,,)}
${__timeShift( yyyy-MM-dd HH:mm:ss,,P+2D,,)}
${__timeShift( yyyy-MM-dd HH:mm:ss,,P-3D,,)}
当需要变量时分秒时,则需要首字母PT,如:
${__timeShift(yyyy-MM-dd HH-mm-ss,,PT-1H-2M-3S,,)}
当前时间前1小时2分3秒
当有天时,T需要加到天的单位后,如:
${__timeShift(yyyy-MM-dd HH-mm-ss,,P-1DT-2H-3M-4S,,)}
当前时间前一天2小时3分钟4秒。
  • 日志查看:打开jmeter-选项-日志查看
  • 设置日志级别:打开jmeter-选项-日志级别

jmeter测试计划

在这里插入图片描述

  • 名称:略
  • 注释:略
  • 用户定义变量:全局变量(参数化常用变量)
  • 独立运行每个线程组:按顺序运行线程组
  • 添加jar包:添加自定义的jmeter工具包(java代码)

jmeter线程组

在这里插入图片描述

  • 名称:略
  • 注释:略
  • 在取样器遇到错误后要执行的动作:按照需求选择,一般为继续
  • 线程属性:
    1. 线程数量:运行多少个线程
    1. ramp-up时间(秒):多少时间内执行完这些线程,每个线程运行时间为ramp-up时间/线程数量
    1. 循环次数:循环多少次

Http默认请求

在这里插入图片描述

  • 名称:略
  • 注释:略
  • 基本选项:
    1. 协议:http
    1. 服务器名称或ip:服务器地址
    1. 端口号:端口号
    1. 编码:utf8

Http消息头管理器

在这里插入图片描述

  • 名称:略
  • 注释:略
  • 消息头存储在消息头管理器中:填写消息头信息一般为Content-Type(数据类型)、Content-Encoding(编码)、Accept(返回数据)

Http请求

在这里插入图片描述

  • 名称:略
  • 注释:略
  • 基本-web服务器:配置有http默认请求的不用填写
  • http请求-方法:post/get等
  • 路径:接口路径
  • 内容编码:utf8
  • 参数类型:具体参考接口文件中的要求:
    1. 参数:parameter
    1. 消息体数据:body
    1. 文件上传:upload

CSV数据文件设置

在这里插入图片描述

  • 名称:略
  • 注释:略
  • 文件名称:路径/文件名称.类型
  • 文件编码:utf8(文件保存时需要设置)
  • 编码名称:a,b,c(与文件中每列对应)
  • 忽略首行:True,False(变量名写到文件中需要设置为True)
  • 分隔符:变量区分的符号
  • 是否允许带引号?:True,False(json类型的需要设置为True)
  • 遇到文件结束再次循环:True,False(一般为False)
  • 遇到文件结束符停止线程:True,False(为True时,文件循环的设置无效)
  • 线程共享模式:所有线程,当前线程组,当前线程(按实际需要选择)

BeanShell断言

在这里插入图片描述

  • 名称:略
  • 注释:略
  • 每次调用前充值bash.interpreter:勾选则每次断言内容清空
  • 参数:传入的参数,格式${参数名}
  • 脚本文件:从脚本中读取断言代码
  • 脚本:
    注:使用脚本需要导入org.json.jar包
import org.json.*;//导入json包
String code = prev.getResponseCode();//获取返回的状态码
if (code.equals("200")){ //比较返回的状态码是否为200
	Failure = false; //设置断言失败状态
    FailureMessage = "新增成功";//设置断言返回信息
}else{
	Failure = false; 
    FailureMessage = "新增成功";
}
String response = prev.getResponseDataAsString();//获取返回值
JSONObject responseJson = new JSONObject(response);//转换为json对象
JSONArray content = responseJson.getJSONArray("content");//获取json对象中的列表
for (int i = 0;i < content.length();i++){//设置循环,次数和content列表的长度一致
	JSONObject jsonobj = content.getJSONObject(i); //遍历content中的json对象
	log.info(jsonobj+"1111111111");//在日志中打印获取的json对象
	String name = jsonobj.getString("name");//获取json对象jsonbj中的name值赋给name字符串
	if(name.equals("123")){//比较name是否为123
     Failure = false; //设置断言失败状态
     FailureMessage = "找到123";//设置断言返回信息
     return;//结束循环
     }else{
     	Failure = true; 
    		FailureMessage = "查询失败";
     	}

BeanShell后置处理器

在这里插入图片描述

  • 设置同BeanShell断言
    脚本:
    注:使用脚本需要导入org.json.jar包
import org.json.*;
String response = prev.getResponseDataAsString();//获取上一个请求的返回值
JSONObject responseJson = new JSONObject(response);//将返回值转为json
JSONArray content = responseJson.getJSONArray("content");//获取json对象中的列表
for (int i = 0;i < content.length();i++){//设置循环,次数和content列表的长度一致
	JSONObject jsonobj = content.getJSONObject(i); //遍历content中的json对象,
	String name = jsonobj.getString("name");//获取json对象jsonbj中的name值赋给name字符串
	if(name.equals("123")){//比较name是否为123
     String id = jsonobj.getString("id");//获取json对象jsonbj中的id值赋给id字符串
     vars.put("id",id);//设置id为jmeter变量
     log.info(id+"-------------");//在日志中打印id
     return;//结束循环
     }else{
     	Failure = true; 
    		FailureMessage = "查询失败";
     	}
}

String response = prev.getResponseDataAsString();//获取上一个请求的返回值
JSONObject responseJson = new JSONObject(response);//将返回值转为json
String name = responseJson.getString("name")//获取json对象responseJson的name值赋给字符串name
vars.put("name",name);//设置name为jmeter变量

响应断言

在这里插入图片描述

  • 名称:略
  • 注释:略
  • Apply to(用于可以生成子取样器的取样器。例如带有嵌入资源的HTTP取样器、Mail Reader 或者事务控制器生成的取样器):Main sample only -只能应用到主取样器;Sub-samples only - 只能应用到子取样器;Main sample and sub-samples – 可以同时应用到主取样器和子取样器;JMeter Variable Name to use –应用到指定名称的变量(对指定的变量的值进行提取)
  • 测试字段(取样模块):响应文本(响应的内容);响应代码(响应的代码);响应信息(返回的代号,如:ok,ture,success等);响应头(消息头,非http请求可能不存在);请求头(请求的消息头);URL样本(地址样本);文档(文本);忽略状态(设置状态为通过);请求数据(请求的内容)
  • 模式匹配规则:包括(字符串包含);匹配(字符串等于);相等(模式等于);字符串(模式字符串包含);否(取断言的相反值);或者(多条件,不勾为和,勾为或)

关系型数据库

注:需要依赖包cloud-mysql-connector-java-5.1.7-bin.jar
数据库配置

  • 名称:略

  • 注释:略

  • Variable Name for created pool:线程池名,必须与JDBCRequest的Variable Name of pool declared in JDBC Connection Configuration相同

  • Max Number of Connections:最大连接数,数据池允许的最大连接数,通常该值设置为0,意思是每个线程都使用单独的数据库连接,例如,配置在两个线程间不共享。如果你确实想共享连接池,那么最大连接数应当和线程数一样,以便线程不用互相等待;

  • Max Wait (ms):在连接池中取回连接的最大等待时间,如果超过改时间,将抛出一个错误;

  • Time Between Eviction Runs (ms):数据库空闲连接的回收时间间隔。回收时,会将将空闲连接物理性的关闭掉。若为非正数,则空闲连接回收器不停运行;

  • Auto Commit:自动提交。有三个选项,true、false、编辑(自己通过jmeter变量值设置)。选择true后, 每条sql语句就是一个事务,执行结束后会自动提交;否则不会提交,需要自己手动提交;

  • Transaction Isolation:数据库事务隔离的级别设置,有6个选项(对JMX加解密):TRANSACTION_NODE:事务节点;TRANSACTION_READ_UNCOMMITTED:事务未提交读;TRANSACTION_READ_COMMITTED:事务已提交读; TRANSACTION_SERIALIZABLE:事务序列化;DEFAULT:默认;TRANSACTION_REPEATABLE_READ:事务重复读;编辑。

Connection Validation by Pool,连接池有效性验证配置部分:这是Jmeter用来检验数据库连接是否有效的一种机制,超过5秒没有使用的话,就会用validation query去测试下这个连接是否有效,一般使用默认就可以。
Test While Idle:是否在空闲时进行连接有效性验证。Validation Quary被用来验证连接的有效性;

  • Soft Min Evictable Idle Time(ms):数据库连接池中的连接至少闲置多久才能被回收。额外的条件是,在连接池中至要保留有minIdle个连接

  • Validation Query:一个验证数据库仍然响应的简单查询语句。默认是JDBC驱动的 ‘isValid()’ 方法,它适合于很多数据库。可以通过jmeter.properties中jdbc.config.check.query属性设置默认的验证sql语句,有10个选项:Hsqldb select 1 from INFORMATION_SCHEMA.SYSTEM_USERS;Oracle select 1 from dual;DB2 select 1 from sysibm.sysdummy1;MySQL select 1;Microsoft SQL Server (MS JDBC driver) select 1;PostgreSQL select 1;Ingres select 1;Derby values 1;H2 select 1;Firebird select 1 from rdb$database。

  • Validatation Query:选择Select1

  • Database URL:数据库地址
    Datebase | Driver class | Database URL
    -------------|------------------|--------------------
    MySQL | com.mysql.jdbc.Driver | jdbc:mysql://host:port/{dbname}
    PostgreSQL | org.postgresql.Driver | jdbc:postgresql:{dbname}
    Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:user/pass@//host:port/service
    Ingres (2006) | ingres.jdbc.IngresDriver | jdbc:ingres://host:port/db[;attr=value]
    MSSQL | com.microsoft.sqlserver.jdbc.SQLServerDriver或者net.sourceforge.jtds.jdbc.Driver | jdbc:sqlserver://IP:1433;databaseName=DBname或者jdbc:jtds:sqlserver://localhost:1433/”+”library”

  • JDBC Driver class:驱动程序类的完全限定名;

  • Username:连接数据库的合法用户名;

  • Password:用户对应的密码。
    查询

  • 名称:略

  • 注释:略

  • Query type:数据库语句类型

    1. Select Statement:查询(常用)
    1. update Statement:更新(修改、删除等,常用)
    1. 其他略
  • Variable names:保存sql语句返回结果的变量名。

  • Result variable name:创建一个对象变量,保存所有返回的结果。

  • Query timeout:查询超时时间。

  • Handle result set:定义如何处理由callable statements语句返回的结果,有四个选项:Store as String;Store as Object;Count Records;编辑。

非关系型数据库—MQ

在这里插入图片描述

  • 名称:略
  • 注释:略
  • Server name or IP:MQ地址
  • Port Number:端口
  • MQTT version:MQ版本
  • Timeout:超时时间
  • protocols:协议(tcp或ssl)
  • User name:登陆mq的用户名
  • Password:密码
  • ClientId:使用的id

其他组建

断言结果:查看断言返回的信息
观察结果树:接口返回的信息和断言的信息

发布了8 篇原创文章 · 获赞 2 · 访问量 627

猜你喜欢

转载自blog.csdn.net/luojsjsjs/article/details/103944792
今日推荐