1. JMeter中的一些性能指标
- Throughput::吞吐率
- Transactions per Second:每秒事务数
- Avg Rps: 平均每秒的Request数量 = 总request数量/秒数
- Successful Hits Per Second:每秒成功点击数
- Failed Hits Per Second: 每秒失败点击数
- Successful Rounds: 成功的请求
- Failed Rounds: 失败的请求
- User Connections: 用户连接数,也就是数据库连接数量
- Number of Deadlocks: 数据库死锁
- Butter Cache Hit:数据库Cache的命中情况
2. JMeter的下载和安装
(1)下载并安装JAVA开发环境(JDK的安装,以及环境变量的添加)
(2)下载:http://jmeter.apache.org/download_jmeter.cgi
解压缩后,在apache-jmeter的bin文件中点击ApacheJMeter.jar或者jmeter.bat来运行JMeter。
3. 一个简单的例子
(1)添加一个”Thread Group”,并设置并发线程数。
(2)在”Thread Group”添加一个”HTTP Request”。
(3)添加一个”View Results Tree”, 以便观察request的返回结果。
(4)通过不停的增加并发用户数,来分析被测网站的”Throughput”(吞吐率)。
4. HTTP Cookie Manager
这个管理器可以自动管理Cookie, 比如你请求一个站点,然后他的Response设置了Cookie,Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。此外,该管理器也支持用户手动添加Cookie。
但如果想要正常使用该功能,用户必须编辑bin文件夹下的jmeter.properties文件,向其中添加/修改:CookieManager.save.cookies=true
编辑完成后,最好可以重新启动JMeter。
5. JMeter的Webdriver插件
(1) 下载JMeterPlugins-WebDriver:http://jmeter-plugins.org/downloads/all/
(2) 解压缩,将bin文件夹copy到JMeter文件夹内(和JMeter的bin文件夹合并)。
(3) 重新启动JMeter。
(4) 添加jp@gc - Firefox Driver Config和jp@gc- Web Driver Sampler。
(5) 在jp@gc - Web Driver Sampler添加Webdriver脚本。
下面贴段Webdriver脚本,毕竟Jmeter中webdriver脚本和标准的还是有区别的:
var r = newjava.util.Random()
var pkg =JavaImporter(org.openqa.selenium, org.openqa.selenium.support.ui)
var wait = newpkg.WebDriverWait(WDS.browser, 10)
WDS.browser.get('http://www.portal2016.ef.com.br/riovolunteer/login/test/')
wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath("//input[@name='userName']")))
WDS.sampleResult.sampleStart()
var username =WDS.browser.findElement(pkg.By.xpath("//input[@name='userName']"))
username.sendKeys("#########")
var password =WDS.browser.findElement(pkg.By.xpath("//input[@name='password']"))
password.sendKeys("#########")
var login =WDS.browser.findElement(pkg.By.xpath("//button[@type='submit']"))
login.click()wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath("//a[@class='et’]”)
WDS.sampleResult.sampleEnd()
6. JMeter的ServerAgent插件
(1) 下载ServerAgent插件:http://jmeter-plugins.org/downloads/all/
(2) 在服务器上解压缩该插件,并在服务器上执行: startAgent.bat --udp-port 0 --tcp-port 3450
(3) 编辑jmeter.properties文件,添加:jmeter.save.saveservice.thread_counts=true
(4) 下载JMeterPlugins-Standard:http://jmeter-plugins.org/downloads/all/
(5) 在本机解压缩后,将lib文件夹copy到JMeter文件夹中,并重启JMeter。
(6) 添加Listenal / jp@gc - PerfMon Metrics Collector,并添加Metricparameter。
(7) 运行JMeter脚本,这样就可以监控服务器的性能状况了。
7. Assertion and Timer
Assertion是用来判断response的数据是否满足一定的条件,比如size要大于50K之类的。而Timer可以让线程delay一定的时间。
8. 参数化
(1) 添加”CSV Data Set Config”
其中Recycle on EOF表示是否循环读入多行数据;Variable Names表示每一列的用户定义的列名。
(2) 这样,在JMeter中就可以通过${host}和${path}来获取数据了。
9. JMeter录制
第一种方法:
下载badboy进行录制:http://www.badboy.com.au/download/send?svId=118
第二种方法:
(1) 添加“线程组”,然后在线程组下添加“录制控制器”
(2) 添加“HTTP代理服务器”
目标控制器:“测试计划>线程组”
分组:每个组放入一个新的控制器
端口:9999(必须确保该端口没有被占用)
排除模式:.*\.(bmp|css|gif|ico|jpe?g|png|swf|woff|js)
(3) 在“HTTP代理服务器”中点击“启动”按钮
(4) 打开浏览器,并设置代理:(必须确保端口号和“HTTP代理服务器”的端口号一致)
(5) 输入网址,进行想要的操作。
(6) 点击“HTTP代理服务器”中的“停止”按钮,录制完成。
10. JMeter 分布式测试
单台电脑处理线程的能力有限,如果需要并发大量的线程(有人认为,一个JMeter客户端线程数不应超过100),那就不得不用到JMeter的分布式测试。使用多台机器产生负载的操作步骤如下:
(1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent 。然后运行所有 agent 机器上的jmeter-server 文件(假定使用两台机器192.168.0.100 和192.168.0.101 作为agent)
(2)在controller机器的jmeter的bin目录下,找到jmeter.properties 文件,编辑该文件:
查找:remote_hosts=127.0.0.1
修改为:remote_hosts=192.168.0.100:1099,192.168.0.101:1099
此外, 端口号要确保没有被占用,并关闭防火墙。
(3)启动controller 机子上的jmeter应用,选择菜单“运行”--->“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来将所有的agent启动。
11. JMeter的SQL测试
(1) 下载sqljdbc4.jar,并copy到JMeter的lib文件夹中
(2) 重启JMeter
(3) 添加JDBC Connection Configuration,并设置:
Database URL: jdbc:sqlserver://jzf2013:1433;DatabaseName=MyTest
JDBC Driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver
Username: sa
Password: #####
(4) 添加JDBC Request,并输入具备代表性的SQL语句。
(5) 运行并查看结果。
其它类型数据库的设置如下:
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 |
MSSQL | com.microsoft.sqlserver.jdbc.SQLServerDriver or net.sourceforge.jtds.jdbc.Driver | jdbc:sqlserver://IP:1433;databaseName=DBname or jdbc:jtds:sqlserver://localhost:1433/"+"library" |