Jmeter

BeanSehll

在接口之前的动作

import org.apache.commons.codec.digest.DigestUtils;
import java.text.SimpleDateFormat;
import java.util.Date;

Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
//String time = "2019091816355";
String time = dateFormat.format(date);
String clicode = vars.get("clicode");
String usertype = vars.get("usertype");
String serviceno = vars.get("serviceno");
String key = "epg_Henan_points2019";
String str = clicode+'&'+serviceno+'&'+ time+'&'+ usertype+key;
String token = DigestUtils.md5Hex(str);
vars.put("token",token);
vars.put("time",time);

取样器Sampler:进行脚本逻辑控制(各种请求)

线程组:场景设置

线程数:用户数(虚拟用户数)

Ramp-Up Period(in seconds): 加压策略

调度器:持续压测时间 需要把循环的勾选上

监视器:监控我们脚本运行,取得性能指标

注意做性能测试的时候最好不要使用断言,jemter有这个bug

监听器可以添加断言结果,查看断言结果

jmeter变量

用户定义的变量 添加->配置元件->用户自定义的变量 ,使用时 ${变量名称}

文件参数化

1、函数助手__csvRead:选项->函数助手

csv文件分隔符是逗号

把csv路径写入

csv文件列号

生成函数:把这个粘贴 复制到实际使用的地方

2、csv data set config

  1. 如果文件是txt,需要使用,分割
  2. 如果文件是csv,直接在表格中输入,实际用记事本打开也有,

变量名 a,b,c 使用时${a}

函数助手__randomstring

随机字符串

Jmeter查看结果树:

JSON PATH Tester: $.xxx.xxx $是根节点的意思

Regexp Tester: xxx(.*?)xxx ?是非贪婪匹配

xpath tester:可以在浏览器复制出XPATH

信息头管理器

User-Agent:可以copy浏览器访问的粘贴过来,模拟浏览器访问,某些接口不带这个头不能正常返回

断言

  1. xpath Assertion:用的比较多的是响应断言
  2. json 断言 $.xxx.xxx $是根节点的意思
  3. 正则断言

必备正则表达式

image

  1. 在响应结果里拿到某个值:后置处理器->正则表达式提取器 前面的(.+?)后面的 模板:$1$ 匹配第几个
  2. 可以在线程组添加 Debug Sampler 用于查看正则表达式提取的值对不对
  3. 正则表达式可以使用逗号分割,写几个,模板是 $1$ $2$ 使用的时候 ${变量名_g1} $

后置处理器

JSON path:

如果返回结果是json格式的数据,可以使用jsonpath获取结果$ 代表根节点 如何获得数组类型的: $.data.files[*].fileid $.data.files[0:3].fileid

正则:

获取数组:匹配数字是0,返回的随机的匹配到的 如果一次性全都匹配到 匹配数字填写-1 ,可以配合逻辑控制器foreach使用 ,把控制器放到http请求的后面处理获得的数组

后置提取器(正则、json详细使用方法)

HTTP cookie管理器

当测试某个接口需要先登录的时候

方法1:线程组添加http cookie管理器

方法2:登录接口添加正则表达式处理器,把id值取出来,然后再接下来的接口添加HTTP cookie管理器 讲取得的id赋值(有可能需要填入path和域:IP地址)

token处理

有的接口入参需要token,token的值一般是在这个请求之前的某个接口返回的,可以用fidller抓包后查看

返回编码问题,看不出来中文是什么

可以把请求代理设置为127.0.0.1 端口8888 投到fidller查看

写入结果到excel

下载jxl.jar包放到jmeter的lib下,需要利用beanshell写java代码讲结果写入excel中

用例编号、用例标题、测试数据、预期结果、实际结果、执行结果
得先写一个java程序,导出成jar,放到jmeter的lib的ext下使用

image

import com.cw.CWOutputFile;
CWOutputFile t=new CWOutputFile();
String filepath=t.cOutputFile("测试");
vars.put("filepath",filepath);

import com.cw.CWOutputFile;
CWOutputFile s = new CWOutputFile();
s.wOutputFile("${filepath}","1","用例名称1","{xxxx}","预期结果","预期结果");
import com.cw.TestReport;
import org.json.JSONObject;

TestReport s = new TestReport();

String response_data = prev.getResponseDataAsString();//获取接口返回的response数据 

JSONObject response = new JSONObject(response_data);

testResult=false;

if(response.get("code").toString().equals("0"))
{ 
	testResult=true;
}

String oriData = prev.getSamplerData();
int start = oriData.indexOf("{");
int end = oriData.lastIndexOf("}") + 1;
String requestData = oriData.substring(start, end);

s.writeResult(vars.get("filepath"),prev.getSampleLabel(),prev.getUrlAsString(),requestData,prev.getResponseDataAsString(),testResult);

测试用例csv

用例编号、用例标题、预期结果

参数化数据csv

入参:参数化数据也可以和测试用例设计成一个csv

单个上传文件

files upload

文件名称:本地路径

参数名称 :file

MIME类型:docx

批量完成文件上传

需要用到参数化 ,单个用户批量文件上传

将文件地址、大小进行参数化放到csv文件中

image

jmeter插件

TPS插件

Transactions Per Second(每秒传输的事物处理个数)即服务器每秒处理的事务数

下载地址

插件安装方法:将lib目录下的jar包拷贝到jemterlib对应目录下

重启 JMeter,发现监听器中已经支持 TPS、TRT 等视图了:

使用方法:线程数设置为50,循环时间为60秒,观察TPS

自动重定向和跟随重定向区别

集合点:flag可以放到运行参数中用来测试强并发,

  • 就是在一时刻同时发送,而不是一个时间段陆陆续续发送

  • 需要用到if控制器【控制是否启用集合点】 ${__jexl3("${flag}"=="1")}

  • 在if控制器中添加定时器Synchronizing Timer,在定时器中输入用户数

  • 在控制器下再添加一个BeanShell取样器 log.info("线程数量:>${__threadNum}")

内置变量

pre:

  • pre.getResponseCode()
  • pre.setSuccessful(true)

Failure

使用JDBC Request 到数据库查询内容 ,在beanshell中 使用 ${变量_#} 可以获得行数

json的数量是 ${变量_matchNr}

线程组与循环的误区
image

image

image

posted @ 2022-01-04 10:11  bagdje  阅读(67)  评论(0)    收藏  举报