——线程组
添加线程组路径 Threads-Thread——group
意思是虚拟用户组
setup thread group 执行与测试操作,类似loadrunner的init
teardown thread group 执行测试后的操作,类似loadrunner的end
2.Ramp-Up Period是什么意思
Ramp-Up Period的意思是一次线程组中的所有线程在多少秒内逐个启动
假设10个线程,100秒的Ramp-Up period。10秒启动一个线程
3.用到jar包什么时候用
解析json,连接mysql等的情况会用到
4.数据含义
Error%(异常):错误请求的数量/请求的总数
Throughput()
samples(样本):一个发出了多少个请求
5.元件的作用域
配置元件(config elements)会影响其作用范围内的所有元件
前置处理程序(per-processors)在其作用范围内的每一个sampler元件之前执行
定时器(timers)对其作用的每一个sampler有效
后置处理程序(post-processors)在其作用范围内的每一个sampler元件之后执行
断言(Assertions)对其作用范围内的每一个sampler元件执行后的结果执行校验
监听器(Listeners)收集齐作用范围内的每一个sampler元件的信息并呈现
聚合报告可以用来显示多个子目录的总报告,也可以用来显示单个线程组的聚合报告。
6.参数化
CSV Data Set Config是用来参数化数据的,可以同时传入很多条数据
https://www.cnblogs.com/tigertank/p/10099879.html
也可以传入CSV的文件进行参数化
Tools中的函数助手对话框可以生成一个函数表达式,选择Random随机数的函数,可以输入最小值100,最大值200,点击生成 ${__Random(100,200,)},可以把这个函数表达式传入参数中,用随机数进行接口测试。
7.Jmeter或postman的传参
传json举例:
取得查询库存接口
查询库存的接口
http://222.190.142.14:8025/LsErp/xs/cpcktzd.shtml?
action=qureyKyCmxx
¶m=[{“WLBH”:”00000000000”,”CM”:”110”,”CBXM”:”无标”},
{“WLBH”:”00000000000”,”CM”:”120”,”CBXM”:”无标”}]
其实就是json结构
[
{
“WLBH”: “00000000000”,
“CM”: “110”,
“CBXM”: “无标”,
“CMSL”: “86”
},
{
“WLBH”: “00000000000”,
“CM”: “120”,
“CBXM”: “无标”,
“CMSL”: “87”
}
]
8.集合点
就是用来启动真正的并发,在需要压力的地方设置集合点
我集合点设置为50,那么不满足50个请求的时候,这些请求都会集合在一起,处于等待状态,当达到50的时候,就一起执行。从而达到并发的效果。
那么Jmeter中可以通过同步定时器 Synchronizing Timer 来完成。
——————————————————
Number of Simulated Users to Group by:集合多少人后在执行请求(也就是执行的线程数),如果设置为0,等同于设置为线程组中的线程数量。
注意:等同于设置为线程组中的线程数,一定要确保设置的值不大于它所在的线程组包含的用户数。
Timeout in milliseconds:指定人数 多少秒没集合到算超时(设置延迟时间以毫秒为单位)。
注意:如果Timeout in milliseconds为0,表示无超时时间,会一直等下去,除非手动终止!
——————————————————-
作用域:
1、Synchronizing Timer是在每个sampler之前执行的,而不是之后,不管这个定时器的位置放在sampler之后,还是之前。
当执行一个sampler之前时,和sampler处于相同作用域的定时器都会被执行;
2、如果希望定时器仅应用于其中一个sampler,则可以把该定时器作为子节点加入。
3.Synchronizing timer 仅作用于同一个JVM中的线程,所以,如果使用并发测试,确保”Number of Simultaneous Users to Group by”中设置的值不大于它所在线程组包含的用户数。
4.Synchronizing Timer是在每个sampler(采样器)之前执行的,而不是之后,不管这个定时器的位置放在sampler之后,还是之前。
9.发送JDBC请求
做JDBC请求,首先需要两个jar包:mysql驱动-mysql-connector-java-5.1.13-bin.jar 和 sqlServer驱动-sqljdbc4.jar,将这两个jar包放到Jmeter目录中的lib文件下,然后重启Jmeter。
添加 JDBC Connection Configuration
配置 JDBC Connection Configuration 基本参数(注意Variable Name命名必须和之后JDBC Request中的Variable Name 命名一致) Driver Class 可写成org.gjt.mm.mysql.Driver,也可写成com.mysql.jdbc.Driver,以响应正确为基准
添加 JDBC request
JDBC request 中,键入sql查询语句
10.逻辑控制器—用来输入条件来控制选择哪个请求
1.循环控制器 ——还不知道设置在哪里
如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘。
2.foreach控制器—-是post的时候可以用,还是get的时候可以用?
ForEach控制器一般和用户自定义变量一起使用,用于可以遍历读取相关的返回值。该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值
foreach控制器通常和正则表达式提取器一起使用。表达式提取值应为-1,表示取全部值,然后sampler在foreach控制器下执行遍历。
3.仅一次控制器和简单控制器有啥用?
4.事务控制器(Transaction Controller)怎么用?
5.if控制器—-还需要实操
参数:
Interpret Condition as Variable Expression?:选中这一项时表示:判断变量值是否等于字符串true(不区分大小写) Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式 示例一:使用变量表达式的方式进行判断:
示例二:选中Interpret Condition as Variable Expression?,使用变量的方式判断变量的方式判断
简单来说就是if控制器里的参数如果是从其他请求里得来的,并且是 满足了XX条件,就执行if控制器下的请求。
6.Switch控制器—这个有什么实际应用呢
这个控制器是用来选择执行控制器下的那哪个子元素,默认索引是0。
可以输入数值,或者指定子元素的名称。
7.吞吐量控制器(Throughput Controller)—-这个总线程分配到每个子节点以后,为啥要这么分配呢,有什么好处?
作用:控制其下的子节点的执行次数与负载比例分配,别被名字迷惑了,跟吞吐量没任何关系。也有两种方式:
一种是填线程数,线程组里10个线程,线程数填5个
一种是填线程组的百分比,线程组里10个线程,线程数填50,百分比勾选了以后,数字就是百分比的线程数。
8.随机控制器(Random Controller)
没啥用,这个控制器下有三个请求,随机跑一个请求
9.随机顺序控制器(Random Order Controller)
与Random Controller不同的是,这个控制器会先将需要随机的内容均执行一遍,但次序不定
应用场景: 页面的随机访问,但均需要访问,且次序不限
这个暂时也没发现有啥用。
10.关键部分控制器(Critical Section Controller)
作用:用于核心部分的控制,确保其子节点下的取样器或控制器在一个线程中仅会执行一次
应用场景: 用户登录
配制说明
Lock name: 锁名称,这里可以填入其子节点下执行的线程的名称,这个线程作为一个全局锁存在
11.交替控制器,模块控制器
都没什么用,模块控制器是跳转到目标控制器,可能控制器太多了,相当于find的作用,立即搜出模块的所在位置。
12.While控制器 输入javascript的脚本—-还需要实操,看怎么用
11.Jmeter函数
1.研究了一下发现主要是函数助手里的函数使用,这个也要结合实际操作,没有什么需要字面理解的东西。
12.获取JDBC的响应数据做接口关联
1.这个需要找文章实操。教程的截图不全。
13.图形结果 这个已经在工具中用过并已经知道怎么用了,但是表示什么含义还需要百度学习。
14.FTP请求,用到再说
get从服务器获取资源,put把文件传到ftp上,这个功能用FTP专用的软件更方便,不知道用jmeter有什么优点。
15.连接数据库
13.Beanshell中常用的Java工具类
一. org.apache.commons.io.IOUtils
closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块
toString:转换IO流、 Uri、 byte[]为String
copy:IO流数据复制,从输入流写到输出流中,最大支持2GB
toByteArray:从输入流、URI获取byte[]
write:把字节. 字符等写入输出流
toInputStream:把字符转换为输入流
readLines:从输入流中读取多行数据,返回List
copyLarge:同copy,支持2GB以上数据的复制
lineIterator:从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够,则失败
二. org.apache.commons.io.FileUtils
deleteDirectory:删除文件夹
readFileToString:以字符形式读取文件内容
deleteQueitly:删除文件或文件夹且不会抛出异常
copyFile:复制文件
writeStringToFile:把字符写到目标文件,如果文件不存在,则创建
forceMkdir:强制创建文件夹,如果该文件夹父级目录不存在,则创建父级
write:把字符写到指定文件中
listFiles:列举某个目录下的文件(根据过滤器)
copyDirectory:复制文件夹
forceDelete:强制删除文件
三. org.apache.commons.lang.StringUtils
isBlank:字符串是否为空 (trim后判断)
isEmpty:字符串是否为空 (不trim并判断)
equals:字符串是否相等
join:合并数组为单一字符串,可传分隔符
split:分割字符串
EMPTY:返回空字符串
trimToNull:trim后为空字符串则转换为null
replace:替换字符串
四. org.apache.http.util.EntityUtils
toString:把Entity转换为字符串
consume:确保Entity中的内容全部被消费。可以看到源码里又一次消费了Entity的内容,假如用户没有消费,那调用Entity时候将会把它消费掉
toByteArray:把Entity转换为字节流
consumeQuietly:和consume一样,但不抛异常
getContentCharset:获取内容的编码
五. org.apache.commons.lang3.StringUtils
isBlank:字符串是否为空 (trim后判断)
isEmpty:字符串是否为空 (不trim并判断)
equals:字符串是否相等
join:合并数组为单一字符串,可传分隔符
split:分割字符串
EMPTY:返回空字符串
replace:替换字符串
capitalize:首字符大写
六. org.apache.commons.io.FilenameUtils
getExtension:返回文件后缀名
getBaseName:返回文件名,不包含后缀名
getName:返回文件全名
concat:按命令行风格组合文件路径(详见方法注释)
removeExtension:删除后缀名
normalize:使路径正常化
wildcardMatch:匹配通配符
seperatorToUnix:路径分隔符改成unix系统格式的,即/
getFullPath:获取文件路径,不包括文件名
isExtension:检查文件后缀名是不是传入参数(List)中的一个
七. org.springframework.util.StringUtils
hasText:检查字符串中是否包含文本
hasLength:检测字符串是否长度大于0
isEmpty:检测字符串是否为空(若传入为对象,则判断对象是否为null)
commaDelimitedStringToArray:逗号分隔的String转换为数组
collectionToDelimitedString:把集合转为CSV格式字符串
replace 替换字符串
delimitedListToStringArray:相当于split
uncapitalize:首字母小写
collectionToDelimitedCommaString:把集合转为CSV格式字符串
tokenizeToStringArray:和split基本一样,但能自动去掉空白的单词
八. org.apache.commons.lang.ArrayUtils
contains:是否包含某字符串
addAll:添加整个数组
clone:克隆一个数组
isEmpty:是否空数组
add:向数组添加元素
subarray:截取数组
indexOf:查找某个元素的下标
isEquals:比较数组是否相等
toObject:基础类型数据数组转换为对应的Object数组
九. org.apache.commons.lang.StringEscapeUtils
参考十五: - org.apache.commons.lang3.StringEscapeUtils
十. org.apache.http.client.utils.URLEncodedUtils
format:格式化参数,返回一个HTTP POST或者HTTP PUT可用application/x-www-form-urlencoded字符串
parse:把String或者URI等转换为List
十一. org.apache.commons.codec.digest.DigestUtils
md5Hex:MD5加密,返回32位字符串
sha1Hex:SHA-1加密
sha256Hex:SHA-256加密
sha512Hex:SHA-512加密
md5:MD5加密,返回16位字符串
十二. org.apache.commons.collections.CollectionUtils
isEmpty:是否为空
select:根据条件筛选集合元素
transform:根据指定方法处理集合元素,类似List的map()
filter:过滤元素,雷瑟List的filter()
find:基本和select一样
collect:和transform 差不多一样,但是返回新数组
forAllDo:调用每个元素的指定方法
isEqualCollection:判断两个集合是否一致
十三. org.apache.commons.lang3.ArrayUtils
contains:是否包含某个字符串
addAll:添加整个数组
clone:克隆一个数组
isEmpty:是否空数组
add:向数组添加元素
subarray:截取数组
indexOf:查找某个元素的下标
isEquals:比较数组是否相等
toObject:基础类型数据数组转换为对应的Object数组
十四. org.apache.commons.beanutils.PropertyUtils
getProperty:获取对象属性值
setProperty:设置对象属性值
getPropertyDiscriptor:获取属性描述器
isReadable:检查属性是否可访问
copyProperties:复制属性值,从一个对象到另一个对象
getPropertyDiscriptors:获取所有属性描述器
isWriteable:检查属性是否可写
getPropertyType:获取对象属性类型
十五. org.apache.commons.lang3.StringEscapeUtils
unescapeHtml4:转义html
escapeHtml4:反转义html
escapeXml:转义xml
unescapeXml:反转义xml
escapeJava:转义unicode编码
escapeEcmaScript:转义EcmaScript字符
unescapeJava:反转义unicode编码
escapeJson:转义json字符
escapeXml10:转义Xml10 这个现在已经废弃了,建议使用commons-text包里面的方法。
十六. org.apache.commons.beanutils.BeanUtils
copyPeoperties:复制属性值,从一个对象到另一个对象
getProperty:获取对象属性值
setProperty:设置对象属性值
populate:根据Map给属性复制
copyPeoperty:复制单个值,从一个对象到另一个对象
cloneBean:克隆bean实例
16种最流行的工具类方法,你就不必要再自己写工具类了,不必重复造轮子。大部分工具类方法通过其名字就能明白其用途,如果不清楚的,可以看下别人是怎么用的,或者去网上查询其用法。