Jmeter使用讲解

  1. 提取某值用作全局变量使用
    a.设置JSON提取器,提取token
    b.用BeanShell后置处理程序,将token设为全局变量,script下填入如下:
    String token = bsh.args[0];
    KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(ne…{app_token},)}
    备注:str = bsh.args[0],表示获取数组参数
    KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(全局…{引用值为Json提取器中设置的名称},)}
    c.引用全局变量token,在需要使用的位置引用:引用方式写成 KaTeX parse error: Expected group after '_' at position 2: {_̲_P(newtoken)} 或{__property(newtoken)} 都可
  2. 获取时间戳、格式化时间
    通过函数助手,生成一个_time 函数,如果参数为时间戳,公式如下:
    ${__time(,)} : 默认该公式精确到毫秒级别, 13位数
    ${__time(/1000,)} : 该公式精确到秒级别, 10位数
    3、 如果参数需要为当前日期,那公式为:
    ${__time(yyyy-MM-dd,)}
    ${__time(YMDHMS,)}
    4.MD5加密
    最简单的是使用内置函数digest和MD5
    Jmeter使用讲解_第1张图片
    Jmeter使用讲解_第2张图片
  3. 拼接参数进行加密
    a.前置处理器中进入拼接
    Jmeter使用讲解_第3张图片

b.提交处引用
在这里插入图片描述

  1. 如何模拟的批量用户来自不同的IP地址
    为什么要IP伪装和iP欺骗:第一是绝大部分服务器出于安全考虑会对同一IP地址做过滤;第二是做压测时有这样的场景,比如某些业务同一个ip频繁请求,请求的数据会被服务器做丢弃处理。
    内网压测:ip欺骗是在局域网里面找一些没有被使用过的ip地址,然后以这些ip地址发请求过去,这样的话,服务端接收到的ip地址,都是你局域网里面的ip,它的确是模拟了其他ip的。
    外网压测:是把咱们的系统部署到外网上了,所有的人都可以访问,ip欺骗模拟的ip还是局域网里面的那些ip,你公司里面整个网络的出口都是一样的,所以外网压测ip欺骗无用。

Jmeter实现IP欺骗
a.给电脑添加10个虚拟IP,打开cmd用管理员身份输入for /l %i in (起始数字,1,结束数字) do netsh interface ip add address “以太网” IP前缀.%i 子网掩码
例如:for /l %i in (10,1,210) do netsh interface ip add address “以太网” 10.200.10.%i 255.255.254.0
b.将新增的200个ip参数化,储存在本地的scv文件中
c.在需要ip欺骗的http请求中,修改Source Address(选择IP/Hostname),指定请求要用到的本地地址(参数化)
Jmeter使用讲解_第4张图片
d.如何批量删除上面添加的ip地址呢?
1.以管理员身份运行cmd,第一步,输入:netsh -c int ip dump >c:\ip.txt输入后,在C盘根目录看到一个ip.txt的文件,内容为当前网卡的设置信息
2.编辑ip.txt文件,把想要删除的ip在ip.txt里删除掉,并保存修改后的文件。
3.输入:netsh -f c:\ip.txt 。重启电脑后生效。
8. Jmeter写回结果到Excel
a.下载jxl.jar包放在Jmeter的安装lib目录下(jxl.jar的作用是完成对Excel的读写以及修改操作),

  1. Jmeter操作数据库
    批量删除数据:条件id存放在CSV中,且id都必须存在。 Jmeter使用讲解_第5张图片
    Jmeter使用讲解_第6张图片

批量添加数据: Jmeter使用讲解_第7张图片
Jmeter使用讲解_第8张图片

批量修改数据: 同理
批量查询语句:例如查询年龄大于等于35到45之间的人员 Jmeter使用讲解_第9张图片
多条语句查询:
Jmeter使用讲解_第10张图片

  1. 如何解决增加(insert into)和修改(update)数据库出现的乱码(在Database URL后添加characterEncoding=UTF-8,该处编码跟数据库的编码保持一致,例如mysql查看编码:选某个表–右键–设计表–选项—字符集)在这里插入图片描述
    Jmeter参数化时,中文乱码问题解决:
    第一种方法:参数化文件中文乱码,可在“csv文件设置”将编码改为“GB2312”即可 Jmeter使用讲解_第11张图片
    第二种方法:将csv文件后缀修改txt,然后另存为时将下方的编码格式修改为UTF-8保存
  2. 查询多条语句时,选Callable Statement与Prepared Select Statement的区别
    callable statement会把多条语句查询的结果显示出来,而Prepared Select Statement只显示第一条语句的查询结果。
  3. 查询的结果放在变量里(Variable names)或结果集里(Result variable name)的区别
    取值方式不一样:Variable names的引用 n a m e 数 字 ,而 R e s u l t v a r i a b l e n a m e 是在 B e a n s h e l l S a m p l e r 中写代码从结果集取值作为变量,之后在需要引用的地方 {name_数字},而Result variable name是在Beanshell Sampler中写代码从结果集取值作为变量,之后在需要引用的地方 name,而Resultvariablename是在BeanshellSampler中写代码从结果集取值作为变量,之后在需要引用的地方{代码中保存的变量名字}即可,Beanshell Sampler中的代码如下:
#结果集中取值作为变量
columnvalue=vars.getObject("结果集的变量名").get(结果集的索引值,从0开始).get("对应列的字段名");
#把数据保存起来
vars.put("变量名字",columnvalue)

Jmeter使用讲解_第12张图片
Jmeter使用讲解_第13张图片

  1. 取样器的Debug Sampler和后置处理器的Debug postprocessor区别
    在写测试脚本过程中,需要先调试脚本是否能够跑通,这是可以使用Debug Sampler取样器辅助调试。

  2. 线程数和循环次数的区别Jmeter使用讲解_第14张图片

  3. 准备的测试数据,只想执行奇数或偶数编号的用例(只想执行指定的几个测试数据)?答:推荐使用if控制器Jmeter使用讲解_第15张图片
    Jmeter使用讲解_第16张图片
    备注:
    执行奇数用例判断条件:KaTeX parse error: Expected group after '_' at position 2: {_̲_jex13({id}%21,)}
    执行偶数用例判断条件:KaTeX parse error: Expected group after '_' at position 2: {_̲_jex13({id}%2
    0,)}
    执行随机指定用例:5条以内用 ||,5条以上在数据表的一列构造数据标签run,执行标记1,不执行标记0,再在csv data set配置中添加一个名称run,表达式KaTeX parse error: Expected group after '_' at position 2: {_̲_jex13({run}==1,)}
    Jmeter使用讲解_第17张图片
    16.Jmeter把查询出来的数据保存到txt文件中
    Jmeter使用讲解_第18张图片
    Jmeter使用讲解_第19张图片
    Beanshell中代码如下:

//将查询的结果保存在test.txt文件中
FileWriter fstream=new FileWriter("E:/test.txt",false);
//这里需要注意false是覆盖写入,true是追加
BufferedWriter out=new BufferedWriter(fstream);
for(int num=1; num<=3; num++){
	//拼接变量名称
   	name = "name"+"_"+num;
   	password = "password"+"_"+num;	
	//把拼接的名称赋值给 username
//	vars.put("username",name);
//	vars.put("passw",password);	
	out.write(vars.get(name)+"  ");
	out.write(vars.get(password)+",");
} 
//out.write(columnvalue+",");
out.close();
fstream.close();

你可能感兴趣的:(接口测试,测试工具)