第四篇:添加一个线程组

1.测试需求:建立20个用户,访问www.baidu.com,查看在负载达到 30QPS的时候的一个平均的响应时间;

QPS:query per second每秒查询率,是查询服务器每秒能处理的查询次数,在因特网上,作为域名系统服务器的性能常用每秒查询率来衡量;

2.测试步骤:

线程数:虚拟用户数,一个虚拟用户占用一个进程和线程,设置多少虚拟用户数在这里也就是设置多少线程数;

准备时长:单位s:设置虚拟用户需要多少时间全部启动,例如:设置20个,准备时长是10,那么需要10秒钟启动20个线程,也就是每秒钟2个;

循环次数:每个线程发送请求的次数,如果线程数目为20个,循环次数为5,那么每个线程发送5个请求,总请求为20*5,如果勾选了“永远”那么所有的线程会一直发送请求,直到选择停止运行脚本;

3.HTTP请求的配置:

名称:用于标识一个取样器,建议使用有意义的名称;

注释:对于测试没啥用,仅用来备注;

服务器IP:HTTP请求发送的目标服务器或者IP地址;

端口号:目标服务器的端口号,默认是:80

timeouts:设置请求和响应时间的超时时间;

协议:HTTP或者HTTPS

方法:发送HTTP的方法:get post ,head put options trace delete等等

content encoding:内容的编码方式,默认是:ISO8859

路劲:目标URL,注意不包括服务器的地址和端口

自动重定向:如果选中该项,当发送的HTTP请求是302/301的时候,jmeter自动重定向到新的页面;

use keep alive:jmeter和目标服务器之间使用keep-alive方式(又称持久链接,链接重用)进行HTTP通信,默认是选中的

use multipart /from -data for HTTP POST :当发送HTTP请求的时候,使用use multipart /from -data 方法发送,默认不选中;

通请求一起发送参数:

可以在发送的请求的时候把参数一起发送;

通请求一起发送文件:在请求发送文件,通常HTTP文件上传行为可以通过这种方式模拟

从HTML获取资源:默认不勾选,如果勾选,jmeter在发出请求后,得到响应后,会对HTML的文件进行分析并获取HTML的内容,包括图片,flash等等;

用作监视器:此取样器被当做监视器,在监视结果中可以看到取样器的图形化统计信息,默认不选中;

save response as md5 hash :选中该项,在执行时仅仅记录服务端返回的MD5的值,而不记录完整的响应数据,在需要进行数据量非常大的测试的时候,建议选中该项,以减少取样器记录响应数据的开销;

tips:默认时间单位是毫秒,报告输出文件后缀。jtl

3.设置QPS限制:

jmeter提供了一个非常有用的定时器:Constant Throught Timer(常数吞吐量定时器),该定时器可以方便的控制给定的取样器发送请求的吞吐量;

Constant Throughtput Timer :的主要的属性:

Target throughtput(in samples per minute):目标吞吐量,这里是每分钟发送的请求数量,实际填的数量为:60*QPS 其次,Calculate Throughput based on :有5个选项,分别是:

This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的target Throught 乘以该线程的数量;

all active threads :设置的target throughput 将分配在每个活跃的线程上,每个活跃的线程在上次运行结束后,等待合理的时间后再次运行,活跃线程,指的是同一个时刻,同时运行的线程;

all active threads(shared):与all active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃的线程上一次运行结束后,等待合理的时间后再次运行;

all active threads in current threads group:设置的target throughput 将任务分配在当前线程租的每一个活跃的线程上,当测试计划中只有一个线程组时,该选项和all active threads的效果一样,

all active threads in current threads group(shared)和all active threads in current threads group基本相同,唯一的区别是,每个活跃的线程都会在所有活跃线程的上一次运行结束后等待,合理时间后再次运行;

第四步:添加监听器:

脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,在本例中我们只关心,请求响应时间;

Jmeter 中使用监听器元件,收集取样器记录的数据并以可视化的方式来呈现,Jmeter有各种不同监听类型,因为HTTP请求,我们可以在添加聚合报告,更为直观的查看测试结果。

添加聚合报告:右键点击线程组,在弹的菜单(添加---监听---聚合报告)中选择聚合报告。

添加查看结果树(添加---监听---查看结果树)

5、运行脚本

6、聚合报告分析

label:每个jmeter 的element(例如:HTTP request)都有一个,Name属性,这里是显示的就是 Name 属性的值;

samples:表示这次测试中一共发出了多少请求,如果模拟10个用户,每个用户迭代,10次,那么这里显示100

Average:平均响应时间,---默认情况下是单位,request,的平均响应时间,当使用了Transaction Controller 时,也可以Transaction 为单位显示平均响应时间。

median :中位数,也就是50%用户的响应时间;

90%Line:90%用户的响应时间

MIn:最小的响应时间;

Max:最大响应时间;

Error%:本次测试中出现错误的数量/请求的总数。

Throughput:吞吐量,---默认情况下表示每秒完成的请求数,(request per second)当使用了,transaction controller时,也可以表示类似(loadrunner)的 Transaction per Second数;

响应时间单位:毫秒,见脚本:

7.Jmeter 断言(检查点):

断言是在请求的返回层面增加一层判断机制。因为请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性,下面介绍常用的jmeter三种断言;

1.响应断言:

2.Size Assertion(Size断言)

3.Duration Assertion (持续时间断言)

如果响应时间大于设置的响应时间,则断言失败,否则失败,否则成功!

8.Jmeter参数化:

1.用户参数:这里讲一下,CSV data setconfig

3.随机参数化:

9.JMETER的集合点:

操作步骤----step--定时器---Synchronizing Timer

注意:集合点需要放在集合的元件的前面;

10.jmeter关联:

1.正则表达式的提取器:

添加---后置处理器---正则表达式提取器:

正则表达式部分配置说明:

1.引用名称:下一个请求要引用的参数名称,如填写activityID,则可用${activityID}引用它;

2):正则表达式:

()括起来的部分就是要提取的

.匹配任何字符串

+:一次或者多次

?:在找到第一个匹配项后停止

3)莫版:用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来的东东),则可以是$2$3$3等等,表示解析到的第几个值给title,如:$1$2表示解析道德第1个值;

4)匹配数字:0代表随机取值,1代表全部取值

5)缺省值:如果参数没有取值得到值,那默认给一个值让他取

原文地址:https://www.cnblogs.com/surewing/p/8988459.html

时间: 2024-08-30 10:55:32

第四篇:添加一个线程组的相关文章

JAVA学习笔记(四十一)-多线程与线程组

线程组ThreadGroup /* * 线程组ThreadGroup * * 结论: * 如果在设置线程组优先级之前设置线程优先级,则线程优先级不受线程组优先级限制 * 如果在设置线程组优先级之后设置线程优先级,则线程优先级不能超过线程组优先级 * * 线程的优先级,默认与启动它的父线程相同,但受到所有线程组的限制 */ public class Test02 { public static void main(String[] args) { System.out.println(Thread

多线程第四篇秒杀 一个经典的多线程同步问题

前<秒杀多线程第三篇原子操作 Interlocked系列函数>中介绍了原子操作在多进程中的作用,如今来个复杂点的.这个问题涉及到线程的同步和相互排斥,是一道很有代表性的多线程同步问题,假设能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础. 程序描写叙述: 主线程启动10个子线程并将表示子线程序号的变量地址作为參数传递给子线程. 子线程接收參数 -> sleep(50) -> 全局变量++ -> sleep(0) -> 输出參数和全局变量. 要求: 1.子线程输出

第十四篇:一个文本查询程序的实现

前言 本文将讲解一个经典的文本查询程序,对前面所学的容器相关知识进行一个从理论到实际的升华,同时也对即将学习的面向对象知识来一次初体验. 程序描述 要求实现这样一个程序:读取用户指定的文件,然后允许用户从中查找某个单词所在的位置. 一个面向过程的落后的设计思想 将待检索文件以行为单位存放到Vector容器中,然后遍历容器,将容器内元素依次转存到字符串流对象中,然后在内层遍历这个字符串流对象,检索是否存在与给定单词匹配的单词.如果有则输出该行内容以及该行序号. 落后的原因及先进的设计思想 这是我以

Java多线程编程7--拾遗增补--线程组

可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程.这样的组织结构有些类似于树的形式,如图所示. 线程组的作用是,可以批量的管理线程或线程组对象,有效地对线程或线程组对象进行组织. 1.线程对象关联线程组:1级关联 所谓的1级关联就是父对象中有子对象,但并不创建子孙对象.这种情况经常出现在开发中,比如创建一些线程时,为了有效地对这些线程进行组织管理,通常的情况下是创建一个线程组,然后再将部分线程归属到该组中.这样的处理可以对零散的线程对象进行有效的组织与规划

jmeter http请求+线程组+事务+断言

简介 jmeter是一款非常强大的软件,可以在测试中做你想的到任何测试,虽然有些会非常复杂,jmeter和协议有关,它支持http,https,mq,ftp等非常多的协议.所以能对web测试,app测试,小程序测试等非常多的测试.一般面试中问测试场景,就是无数个测试用例.在性能测试中被称为测试场景. 线程组中要知道的内容 线程数:有多少个用户,比如设置为10就有10个用户进行用例操作. ramp-up:在多少秒内启动设置的用户数 循环次数:设置的线程数,循环多少次 简单的get请求 我们先添加一

010-ThreadGroup线程组

线程组ThreadGroup表示一组线程的集合,一旦一个线程归属到一个线程组之中后,就不能再更换其所在的线程组.那么为什么要使用线程组呢?个人认为有以下的好处:方便统一管理,线程组可以进行复制,快速定位到一个线程,统一进行异常设置等.ThreadGroup它其实并不属于Java并发包中的内容,它是java.lang中的内容.但是掌握对其的于理解,在实际应用中有很大的帮助. 一.基本方法 1.获取当前线程组名 Thread.currentThread().getThreadGroup().getN

从Thread.start()方法看Thread源码,多次start一个线程会怎么样

这篇文章作为Thread类源码剖析的补充,从一个侧面来看Thread源码.也解答了面试高频问题:"多次start一个线程会怎么样?" 答案是:java.lang.IllegalThreadStateException   线程状态非法异常   继承关系是:--->extends IllegalArgumentException--->extends RuntimeException一个运行时异常,下面我们从源码来透彻分析一下start()时做了什么. 1 /** 2 * C

线程组

http://www.cnblogs.com/xrq730/p/4856072.html 线程组 可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式,如图所示: 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织. 线程关联线程组:1级关联 所谓1级关联就是父对象中有子对象,但并不创建孙对象.这种情况在开发中很常见,比如创建一些线程时,为了有效对这些线程进行阻止管理,通常情况下是创建一个线程组,然

java 多线程 24 : 线程组

线程组 可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式,如图所示: 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织. 线程关联线程组:1级关联 所谓1级关联就是父对象中有子对象,但并不创建孙对象.这种情况在开发中很常见,比如创建一些线程时,为了有效对这些线程进行阻止管理,通常情况下是创建一个线程组,然后再将部分线程归属到该组中,以此来对零散的线程对象进行有效的管理. 看一下简单的1级关联的