﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-qileilove-随笔分类-jmeter and badboy</title><link>http://www.blogjava.net/qileilove/category/51343.html</link><description>不想做屌丝的码农，不是好项目经理！屌丝生涯从此开始！</description><language>zh-cn</language><lastBuildDate>Fri, 26 Sep 2014 08:10:52 GMT</lastBuildDate><pubDate>Fri, 26 Sep 2014 08:10:52 GMT</pubDate><ttl>60</ttl><item><title>Jmeter在命令行运行技巧</title><link>http://www.blogjava.net/qileilove/archive/2014/09/26/418293.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 26 Sep 2014 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/09/26/418293.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/418293.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/09/26/418293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/418293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/418293.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　For non-interactive testing, you may choose to run&nbsp;<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">JMeter</strong></u></a>&nbsp;without the GUI. To do so, use the following command options</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-n This specifies JMeter is to run in non-gui mode</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-t [name of JMX file that contains the&nbsp;<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Test</strong></u></a>&nbsp;Plan].</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-l [name of JTL file to log sample results to].</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-r Run all remote servers specified in JMeter.properties (or remote servers specified on command line by overriding properties)</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　The script also lets you specify the optional firewall/proxy&nbsp;<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">server</strong></u></a>&nbsp;information:</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-H [proxy server hostname or ip address]</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-P [proxy server port]</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　Example : JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-n 该参数表示Jmeter运行在非图形化模式下（即命令行模式）。</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-t 保存有<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试用例</strong></u></a>的JMX文件</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-l 保存样本结果的JTL文件</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-r 运行所有在JMeter.properties 中定义的远程服务（或者通过命令行覆盖配置文件中定义的远程服务）。脚本还允许您指定可选的防火墙/代理服务器信息：</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-H 代理服务器主机名或者IP地址</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　-P 代理服务器的端口号</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　上面这段说明来自 JMeter 的官方用户手册。其中提到了使用命令行方式运行 JMeter 脚本的方法。只有几个简单的参数，很直观，用起来也很方便。好处是可以节省一些系统资源。</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　今天尝试 300 个虚拟用户连续运行 5 分钟时&#8212;&#8212;使用 GUI 方式，发现开始运行后不久 UI 就失去了响应，并提示一个有关 &nbsp;AWT 的错误，最终只能把 Java 进程结束掉。但是使用命令行方式时却很稳定。</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　不过当在命令行方式下尝试 500 个虚拟用户连续运行 5 分钟时，JMeter 抛出了一个 Out of Memory 的异常并退出了进程。</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Note：</strong></div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　1.执行命令前要检查当前目录是否是 %JMeter_Home%\bin 目录；</div><div style="word-break: break-all; line-height: 21.6000003814697px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　2.如果 JMeter 脚本不在当前目录，需要指定完整的路径；如果要把执行的结果保存在其他地方也要指定完整的路径。</div><img src ="http://www.blogjava.net/qileilove/aggbug/418293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-09-26 10:11 <a href="http://www.blogjava.net/qileilove/archive/2014/09/26/418293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter中使用Selenium进行测试</title><link>http://www.blogjava.net/qileilove/archive/2014/06/05/414423.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 05 Jun 2014 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/06/05/414423.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/414423.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/06/05/414423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/414423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/414423.html</trackback:ping><description><![CDATA[<h1><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;"><a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">JMeter</strong></u></a>是使用非常广泛的<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;"></strong></u></a><u style="word-break: break-all; line-height: normal !important;"><strong style="word-break: break-all;"><a target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>工具</strong></u>，而<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Selenium</strong></u></a>是ThroughtWorks 公司一个强大的开源Web&nbsp;<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">功能测试</strong></u></a>工具。Jmeter和Selenium结合使用，就可以实现对网站页面的自动化性能测试。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　这里有两种方式在Jmeter中调用Selenium测试用例。可以使用 Jmeter&nbsp;<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">JUnit</strong></u></a>&nbsp;sampler 或者 BeanShell sampler，后一种方式包含了Selenium client 和&nbsp;<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">server</strong></u></a>，因此不需要单独启动Server。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">方法一</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　准备<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>:</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　将文件selenium-server-standalone-2.*.jar拷贝到JMeter类库安装目录%JMETER_HOME%/lib/下，手动启动Selenium server。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　Jmeter JUnit sampler</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　将Selenium测试用例打包成.jar文件，并拷贝到%JMETER_HOME%/lib/junit/目录下，注意：<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试用例</strong></u></a>应该继承TestCase or SeleniumTestCase类，从而允许JMeter获取到该测试用例，且测试方法名称应该以<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">test</strong></u></a>开头。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　在Jmeter中创建test group和JUnit sampler测试计划，并在JUnit sampler中选择测试用例的名称，选择测试方法并运行。当然还可以根据需求设置其他参数。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;">　　一个测试用例例子:</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; font-size: 12px; background-color: #dddddd;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">package com.example.tests;</div><div style="word-break: break-all; margin: 10px 0px;">import com.thoughtworks.selenium.*;</div><div style="word-break: break-all; margin: 10px 0px;">import org.junit.Before;</div><div style="word-break: break-all; margin: 10px 0px;">import org.junit.Test;</div><div style="word-break: break-all; margin: 10px 0px;">import org.junit.After;</div><div style="word-break: break-all; margin: 10px 0px;">public class selenium extends SeleneseTestCase {</div><div style="word-break: break-all; margin: 10px 0px;">@Before</div><div style="word-break: break-all; margin: 10px 0px;">public void setUp() throws Exception {</div><div style="word-break: break-all; margin: 10px 0px;">. . .</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public void testSelenium_test() throws Exception {</div><div style="word-break: break-all; margin: 10px 0px;">. . .</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@After</div><div style="word-break: break-all; margin: 10px 0px;">public void tearDown() throws Exception {</div><div style="word-break: break-all; margin: 10px 0px;">selenium.stop();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　<strong style="word-break: break-all; line-height: normal !important;">方法二</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　准备工作:</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　将文件selenium-server-standalone-2.*.jar拷贝到JMeter类库安装目录%JMETER_HOME%/lib/下，不需要启动Selenium server.</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　Jmeter JUnit sampler</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　将Selenium测试用例打包成.jar文件，并拷贝到%JMETER_HOME%/lib/junit/目录下，注意：测试用例应该继承TestCase or SeleniumTestCase类，从而允许JMeter获取到该测试用例，且测试方法名称应该以test开头。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　在Jmeter中创建test group和JUnit sampler测试计划，并在JUnit sampler中选择测试用例的名称，选择测试方法并运行。当然还可以根据需求设置其他参数。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　一个测试用例例子:</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 975px; font-size: 12px; background-color: #dddddd;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">import junit.framework.TestCase;</div><div style="word-break: break-all; margin: 10px 0px;">import org.openqa.selenium.*;</div><div style="word-break: break-all; margin: 10px 0px;">import org.junit.Before;</div><div style="word-break: break-all; margin: 10px 0px;">import org.junit.Test;</div><div style="word-break: break-all; margin: 10px 0px;">import org.junit.After;</div><div style="word-break: break-all; margin: 10px 0px;">import org.openqa.selenium.WebDriver;</div><div style="word-break: break-all; margin: 10px 0px;">import org.openqa.selenium.WebElement;</div><div style="word-break: break-all; margin: 10px 0px;">import org.openqa.selenium.firefox.FirefoxDriver;</div><div style="word-break: break-all; margin: 10px 0px;">import org.openqa.selenium.firefox.FirefoxProfile;</div><div style="word-break: break-all; margin: 10px 0px;">public class selenium extends TestCase {</div><div style="word-break: break-all; margin: 10px 0px;">WebDriver driver;</div><div style="word-break: break-all; margin: 10px 0px;">@Before</div><div style="word-break: break-all; margin: 10px 0px;">public void setUp() {</div><div style="word-break: break-all; margin: 10px 0px;">FirefoxProfile profile = new FirefoxProfile();</div><div style="word-break: break-all; margin: 10px 0px;">. . .</div><div style="word-break: break-all; margin: 10px 0px;">driver = new FirefoxDriver(profile);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public void testSelenium_test() throws Exception {</div><div style="word-break: break-all; margin: 10px 0px;">. . .</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@After</div><div style="word-break: break-all; margin: 10px 0px;">public void tearDown() {</div><div style="word-break: break-all; margin: 10px 0px;">driver.quit();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;"></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px; height: 21px; position: relative; width: 627.1875px;"></div></div></h1><img src ="http://www.blogjava.net/qileilove/aggbug/414423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-06-05 13:49 <a href="http://www.blogjava.net/qileilove/archive/2014/06/05/414423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter工作基本原理</title><link>http://www.blogjava.net/qileilove/archive/2014/06/04/414373.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Wed, 04 Jun 2014 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/06/04/414373.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/414373.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/06/04/414373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/414373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/414373.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　JMeter可以作为Web服务器与浏览器之间的代理网关，以便捕获浏览器的请求和Web服务器的响应，这样就很容易地生成<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>脚本，</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　有了性能测试脚本，JMeter就可以通过线程组来模拟真实用户对Web服务器的访问压力，这与<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">LoadRunner</strong></u></a>的</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>原理基本一致。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　原理图如下：</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; text-align: center; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=46171" target="_blank" style="word-break: break-all; color: #45a2fc; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/06/14982672_201406031115311MBGo.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><img src ="http://www.blogjava.net/qileilove/aggbug/414373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-06-04 10:58 <a href="http://www.blogjava.net/qileilove/archive/2014/06/04/414373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmeter分布式部署文档</title><link>http://www.blogjava.net/qileilove/archive/2014/05/29/414237.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 29 May 2014 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/05/29/414237.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/414237.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/05/29/414237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/414237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/414237.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　很多时候，我们<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>时，如果进行大数据量的并发测试时，单个电脑的ＣＰＵ和内存可能无法承受，这个时候，我们需要进行一个分布式的测试，比如10000个并发，使用三台电脑来进行并发，<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Jmeter</strong></u></a>提供了这种功能，你可以很轻松的实现Jmeter的这种分布式测试</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　1 首先确何所有的电脑上都安装Jmeter</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　2 在所有电脑上开起Jmeter，开启命令是jmeter-server.bat，而不是以前的jmeter.bat</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　注意：你所要运行的不要开启，那些用来负载的，才开启服务器模式，这个模式没有界面，只有控制台的</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　3 在你所想要操作的电脑上，以jmeter.bat命令来启动图形化的jmeter界面</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　编辑jmeter.properties</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　remote_hosts=127.0.0.1,192.168.0.102 #remote_hosts=localhost:1099,localhost:2010</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; text-align: center; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=46038" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405231051111AFqQ.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　通过远程启动，便可驱动远程开启的jmeter同时进行并发测试，这样便同时有几个Jmeter进行并发测试了，这样可以实现了分布式的开发.</div><img src ="http://www.blogjava.net/qileilove/aggbug/414237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-05-29 11:41 <a href="http://www.blogjava.net/qileilove/archive/2014/05/29/414237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>聚合报告显示测试结果</title><link>http://www.blogjava.net/qileilove/archive/2014/05/26/414093.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Mon, 26 May 2014 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/05/26/414093.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/414093.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/05/26/414093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/414093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/414093.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　聚合报告显示<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;"></strong></u></a><u style="word-break: break-all; line-height: normal !important;"><strong style="word-break: break-all;"><a target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>结果</strong></u></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45804" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141035191AadC.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　1.Label：每个 JMeter 的 element (例如 HTTP Request )都有一个 Name 属性，这里显示的就是 Name 属性的值</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　2.#Samples：表示你这次测试中一共发出了多少个请求，如果测试计划模拟10个用户，每个用户迭代10次，这里就会显示100</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　3.Average：平均响应时间 &#8212; 默认情况下是单个 Request 的平均响应时间，当使用了事务控制器时，也可以以事务为单位显示平均响应时间</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　4.Median：中位数，也就是 50 %用户的响应时间</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　5.90% Line： 90 %用户的响应时间</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　6.Min：最小响应时间</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　7.Max：最大响应时间</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　8.Error%：错误率，本次测试中出现错误的请求的数量 / 请求的总数</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　9.Throughput：吞吐量 &#8212;&#8212; 默认情况下表示每秒完成的请求数( Request per Second )</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px;">　　10.KB/Sec：每秒从服务器端接收到的数据量</div><img src ="http://www.blogjava.net/qileilove/aggbug/414093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-05-26 10:30 <a href="http://www.blogjava.net/qileilove/archive/2014/05/26/414093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Jmeter录制web脚本</title><link>http://www.blogjava.net/qileilove/archive/2014/05/22/413957.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 22 May 2014 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/05/22/413957.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/413957.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/05/22/413957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/413957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/413957.html</trackback:ping><description><![CDATA[<h1><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　<strong style="word-break: break-all;">　1。<a target="_self" style="word-break: break-all; color: #202859;"><u style="word-break: break-all;"><strong style="word-break: break-all;">web</strong></u></a><a target="_self" style="word-break: break-all; color: #202859;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>以及web http请求基本原理。</strong></div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　再介绍录制jmeter脚本之前，我们先谈一下web性能测试。web就是调用http/https接口, 其实没有是什么复杂度可言。只是我们必须清楚，对于一个网站说，一个页面并通常不是只有一个http请求。如果需要测试一个rich web page，必须了解到这一点（测试http接口不在此类，虽然也是http协议，但是以http接口对外服务）。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　例如这样一个页面(下面是html代码）</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; text-align: center; line-height: normal !important; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45800" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141025511KNjx.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　如果向服务器请求上面的一个页面，则除了本身页面的请求本身，还有一个css和img的资源。这样打开这样一个页面，本需要有三个http请求。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　1. http1 -&gt; get the web page</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　2. the web page contain two resources</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　3. then request &nbsp;http2 and http3 to &nbsp;get the css file and image respecitively.</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　所以这样就是发起了3个http请求，才完整的打开了一个页面。浏览器实际是这么做的，但浏览器作了很多优化。 （比如多线程下载资源，缓存图片，css等资源）。说道这里，不得不佩服loadrunner的强大。他可以尽量模拟浏览器的这些行为，来保证测试的结果准确性。但这些参数都可以动态调整的。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　<strong style="word-break: break-all;">　2。实际录制脚本</strong></div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　好，那么我们现在就来实际录制脚本吧，并且体验一下真正一个页面的实际http请求过程。这里我们只谈http，https不在本文所讲范围内。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　录制脚本目前有2种方法，我们先介绍jmeter proxy方法。另一个是badboy录制的脚本转化为jmeter脚本，直接想了解badboy，请直接访问</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　http://www.badboysoftware.biz/docs/jmeter.htm</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　jmeterproxy 来了。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　1）启动jmeter，这个不多说了。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　2）选择测试计划，右键添加线程组（thread group)</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　3）选择这个线程组，右键添加config element -〉 http默认请求</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; text-align: center; line-height: normal !important; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45801" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141025512wEHC.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　4）在http默认请求单元，填入<a target="_self" style="word-break: break-all; color: #202859;"><u style="word-break: break-all;"><strong style="word-break: break-all;">server</strong></u></a>&nbsp;name 为jakarta.apache.org. 这个是我们要录制的页面。其他地方不填</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　5）然后选择刚才那个县城组，右键加入一个录制控制器。位于Add&gt;Logic Controllers -&gt; Recording Controller</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　6） 选择WorkBench，右键加入 Non-Test Elements -&gt; Http proxy server</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　7）在http proxy server里， 的patterns to include 里，写入.*\.html &nbsp;这个是正则表达式，意思是录制所有的html为后缀名的页面。 那么如果你要录制后缀名为jsp或者do的，则写入.*\.jsp &nbsp;和 .*\.do 分别。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　8）对于url怕tterns to exclude的地方，是写入不想被录制的一些资源文件url。比如图片等。　这些配置，视测试的具体场景而定。比如是否要测试静态图片等。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; line-height: normal !important; background-color: #ffffff;">　　9）为了调试录制的情况，我们选择http proxy server ，添加一个察看结果树监听器。这个以前我们曾经用过。</div><div style="word-break: break-all; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; font-weight: normal; text-align: center; line-height: normal !important; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45802" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none;"><img src="http://www.51testing.com/attachments/2014/05/14982672_20140514102551359A9.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px; text-align: left;">10）回到http proxy server然后，选择开始启动。这样proxy server 就启动了。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px; text-align: left;">　　11）这样我们打开一个浏览器，将浏览器的代理设置为jmeter proxy server 的ip和端口号。　因为proxy server 就在本地，所以就写localhost 和端口即可。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px; text-align: left;">　　12）设置好代理后，用浏览器访问http://jakarta.apache.org/jmeter/index.html</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px; text-align: left;">　　13）随便点击一些连接，然后回到jmeter 的窗口，你查看结果树就看到了录制的http请求了。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45803" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141025514MMSX.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px; text-align: left;">　　14）这样的脚本，我们就可以直接用来运行了。</div></a></div></h1><img src ="http://www.blogjava.net/qileilove/aggbug/413957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-05-22 10:12 <a href="http://www.blogjava.net/qileilove/archive/2014/05/22/413957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmeter参数化</title><link>http://www.blogjava.net/qileilove/archive/2014/05/19/413828.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Mon, 19 May 2014 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/05/19/413828.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/413828.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/05/19/413828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/413828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/413828.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">参数化：简单的来理解一下，我们录制了一个脚本，这个脚本中有登录操作，需要输入用户名和密码，假如系统不允许相同的用户名和密码同时登录，或者想更好的模拟多个用户来登录系统。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　这个时候就需要对用户名和密码进行参数化，使每个虚拟用户都使用不同的用户名和密码进行访问。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　前提：</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　假如，我们录制好了一个脚本（可以用badboy工具录制），在jmeter中打开，找到有用户名和密码的页面。如下：</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45796" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141016541Zgjm.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　1.我们需要&#8220;参数化&#8221;的数据，这里我用记事本写了五个用户名和密码，保存为.dat格式的文件。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45797" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_2014051410165425jpT.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　我将这个文件放在了我的（ D:\test.dat &nbsp;）路径下。关于如何得到成百上千的用户名和密码，首先要在<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">数据库</strong></u></a>中创建这些数据，将数据导出，整理保存，这里就不深究。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　2.好，我们要编写函数来调用这个<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">test</strong></u></a>.dat文件，怎么弄，</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　点击菜单栏&#8220;选项&#8221;----&gt;函数助手对话框，看下图。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><font color="#202859"><span style="line-height: normal !important;"><a href="http://www.51testing.com/batch.download.php?aid=45798" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141016543r9zM.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></span></font><div style="word-break: break-all; color: #333333; text-decoration: none; line-height: normal !important; margin: 10px 0px; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45798" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;">　3.把我们写好的函数复制到&#8220;登录&#8221;页面用户名和密码胡位置。</a></div><div style="word-break: break-all; color: #333333; text-decoration: none; line-height: normal !important; margin: 10px 0px; font-size: 11.818181991577148px; text-align: center;"><font color="#202859"><a href="http://www.51testing.com/batch.download.php?aid=45798" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141016544lfYh.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></font></div><div style="word-break: break-all; color: #333333; text-decoration: none; line-height: normal !important; margin: 10px 0px; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45798" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;">　　好了，现在我们的参数化设置完成，在脚本的时候，会调用我们D盘下面的test.dat文件，第一列是用户，第二列是密码。</a></div><div style="word-break: break-all; color: #333333; text-decoration: none; line-height: normal !important; margin: 10px 0px; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45798" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;">　　注意用户名和密码是一一对应的，中间用户逗号（，）隔开。</a><span style="font-size: 11.818181991577148px; line-height: 21.60000228881836px;">　3.把我们写好的函数复制到&#8220;登录&#8221;页面用户名和密码胡位置。</span><a href="http://www.51testing.com/batch.download.php?aid=45798" target="_blank"></a></div><div style="word-break: break-all; margin: 10px 0px; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45799" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405141016544lfYh.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; margin: 10px 0px; font-size: 11.818181991577148px;">　　好了，现在我们的参数化设置完成，在脚本的时候，会调用我们D盘下面的test.dat文件，第一列是用户，第二列是密码。</div><div style="word-break: break-all; margin: 10px 0px; font-size: 11.818181991577148px;">　　注意用户名和密码是一一对应的，中间用户逗号（，）隔开。</div></div><img src ="http://www.blogjava.net/qileilove/aggbug/413828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-05-19 10:15 <a href="http://www.blogjava.net/qileilove/archive/2014/05/19/413828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmeter安装 for windows</title><link>http://www.blogjava.net/qileilove/archive/2014/05/15/413687.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 15 May 2014 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/05/15/413687.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/413687.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/05/15/413687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/413687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/413687.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">总结：</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">　　一、<a target="_self" style="word-break: break-all; color: #202859;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Jmeter</strong></u></a>安装总结</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　1、配置<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Java</strong></u></a>环境变量时需要注意设置的路径需要和JDK安装的路径一样</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　2、配置Java环境变量时需要注意JDK的版本号</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　3、配置环境变量时多个变量以分号隔开，但是确保是英文输入法的分号</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">二、搭建<a target="_self" style="word-break: break-all; color: #202859;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>环境总结</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　1、检测负载机是否可以被调用，检测负载机的ip是否能被ping通</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　2、当负载机的ip不能ping通时，有可能是防火墙拦截了，可以检测防火墙是否是启用状态，如果是暂时设置禁用防火墙</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　3、测试的数据调用文件应该放在负载机上，并且在控制中心设置正确的数据访问路径</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Jmeter测试工具安装步骤：</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　1、安装Jmeter</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　下载Jmeter工具包 并把工具包放到C盘下</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　http://jmeter.apache.org/download_jmeter.cgi</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　2、安装JDK</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　下载Java的JDK并安装，一般会安装在C:\Program Files\Java目录下</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　http://java.sun.com/javase/downloads/index.jsp</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　3、Java环境变量配置</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　桌面上 右键选中计算机---&gt;属性---&gt;高级系统设置---&gt;环境变量设置</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在&#8220;系统变量&#8221;---&gt;&#8220;新建&#8221;, 在变量名中输入：CLASSPATH，变量值中输入：C:\Program Files\Java\jdk1.6.0_10\lib\dt.JAR; C:\Program Files\Java\jdk1.6.0_10\lib\TOOLS.JAR; C:\Program Files\Java\jdk1.6.0_10\BIN;再按&#8220;新建&#8221;，在变量名中输入：JAVA_HOME，变量中输入：C:\Program Files\Java\jdk1.6.0_10；修改PATH变量，添加%JAVA_HOME%/bin；然后确定即可</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　4、Jmeter环境变量配置</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　桌面上 右键选中计算机---&gt;属性---&gt;高级系统设置---&gt;环境变量设置</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在&#8220;系统变量&#8221;---&gt;&#8220;新建&#8221;, 在变量名中输入：JMETER_HOME，变量值中输入：C:\jakarta-jmeter-2.3.4 ，再修改CLASSPATH变量，变量值中添加%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;% JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar; 然后确定即可</div><img src ="http://www.blogjava.net/qileilove/aggbug/413687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-05-15 11:52 <a href="http://www.blogjava.net/qileilove/archive/2014/05/15/413687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmeter做web压力测试时设置持续时间注意点</title><link>http://www.blogjava.net/qileilove/archive/2014/05/13/413602.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Tue, 13 May 2014 08:23:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/05/13/413602.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/413602.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/05/13/413602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/413602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/413602.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　头一回使用jmeter做<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">web</strong></u></a>的<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">压力测试</strong></u></a>，遇到个很莫名其妙的问题，不管我的线程组怎么设置，它就是执行一次就结束了。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　设置循环次数为300，不使用调度器－－〉执行一次就结束了，循环次数未生效</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　设置循环次数永远，设置高度器的开始和结束时间，不使用延迟和持续－－〉开始时间有效，执行一次就结束了，结束时间未生效</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　设置循环次数永远，设置延迟1秒，持续1200秒－－〉延迟1秒执行，执行一次就结束了，持续时间未生效</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　不管我怎么设置，都是执行一次就结束了，也没有错误发生，就是正常的结束</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　jmeter版本2.9和2.11都一个德行的</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　脚本是压测web脚本，利用badboy录制的，应该不会有问题，然后我就跟以前的脚本一个个比对，终于被我发现了！</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在step里还有个设置，需要勾选上永远才行</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45603" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/05/14982672_201405041019231fVaN.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff; height: 21px; position: relative; width: 627.1875px;"></div><img src ="http://www.blogjava.net/qileilove/aggbug/413602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-05-13 16:23 <a href="http://www.blogjava.net/qileilove/archive/2014/05/13/413602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用Jmeter做压力测试</title><link>http://www.blogjava.net/qileilove/archive/2014/04/25/412915.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 25 Apr 2014 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/04/25/412915.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/412915.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/04/25/412915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/412915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/412915.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Jmeter</strong></u></a>是一个<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>工具，同loadrunner类似，他功能较多，我们常用的功能是用jmeter模拟多浏览器对网站做压力测试。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　下载jmeter地址 ：http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　我们一般的网站，在进入业务功能前先需登录，然后才能访问业务功能。下面介绍如何用jmeter登录系统再对主业务做压力测试。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　1. 运行jmeter</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　2. 左边树将出现测试计划、<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>台两根节点。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　3. 选择测试计划，按右键－》添加－》threads（users）线程组</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　线程组能设置以多少个线程并发做压力测试。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在&#8221;循环次数&#8221;设置不选择永远，循环次数设置1。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　4. 现在先介绍如何设置登录http请求，选择线程组，右键&#8213;&#8213;添加&#8213;&#8213;》sampler－&#8213;》http 请求。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　http请求即模仿浏览器的访问。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在&#8220;服务器名称或ip&#8221;设置127.0.0.1，端口号设置:8080，&#8220;方法&#8221;设置post，路径设置网站登录的地址，如&#8220;/exam/operatorAction&#8221;。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　登录需传入用户、密码。在&#8220;同请求一起发送参数&#8221;列表中添加参数。参数值根据<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">web</strong></u></a>应用设置。如login_user=0001;login_password=1;actFlag=login</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　5. 登录成功后，网站一般将跳入主页面。在jmap中可做判断，判断是否登录后按预想进入主页面（此步骤也可不设）。选择4中的&#8220;http请求&#8220;，右键&#8213;&#8213;》添加&#8213;&#8213;》断言&#8213;&#8213;》响应断言。&#8220;Apply to&#8221;设置Main smaple only；&#8220;要测试的响应字段&#8221;设置&#8220;url样本&#8221;；&#8220;模式匹配规则&#8221;设置&#8220;包括&#8221;，&#8220;要测试的模式&#8221;增加页面跳转到的主页面，如：&#8220;studentMain.jsp&#8221;</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　6. 一般网站登录后，在tomcat中生成了session，之后访问其他页面将无需再次登录，前提是浏览器需支持cookie。在jmap中也同样，如要继续访问其他页面，还需做下面关键的设置。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　选择&#8220;线程组&#8221;&#8213;&#8213;》右键&#8213;&#8213;》添加&#8213;&#8213;》配置元件&#8213;&#8213;》Http cookie管理器。加了此步骤后，http请求将具备cookie功能，即登录成功后访问其他页面将不会跳转到登录页面重新登录。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　7. 对目标页面反复压力测试。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　7.1 如何使被测页面反复访问达到测压效果。选&#8220;线程组&#8221;&#8213;》右键&#8213;&#8213;》逻辑控制器&#8213;&#8213;》循环控制器。循环次数中选择&#8220;永远&#8221;。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　7.2 选择刚加的&#8220;循环控制器&#8221;，右键&#8213;&#8213;》添加&#8213;&#8213;》sampler－&#8213;》http 请求，按4步骤设置ip、端口，http请求方法为&#8220;get&#8221;，路径为被压力测试的url，如：&#8220;exam/business/studentExam.action.StudentExamAction?action=goIntoMockExam&#8221;。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　按上面的设置后，已完成配置，可做压力测试。只需点菜单&#8220;运行&#8221;&#8213;&#8213;》启动，即运行压力测试。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　8. jmeter提供了许多压力结果查看工具。是压力测试时非常好的分析工具。下面几种查看工具可有选择的添加。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　8.1 察看结果树。他记录每次请求发送数据、响应返回数据。选择&#8220;线程组&#8221;&#8213;&#8213;》右键&#8213;&#8213;》添加&#8213;&#8213;》察看结果树。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　8.2 用表格查看结果。可查看每次请求的响应时间等。选择&#8220;线程组&#8221;&#8213;&#8213;》右键&#8213;&#8213;》添加&#8213;&#8213;》用表格查看结果。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　8.3 Summary Report。可查看平均响应时间、最长响应时间等。</div><img src ="http://www.blogjava.net/qileilove/aggbug/412915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-04-25 10:06 <a href="http://www.blogjava.net/qileilove/archive/2014/04/25/412915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmeter和LR上传文件和下载</title><link>http://www.blogjava.net/qileilove/archive/2014/04/11/412271.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 11 Apr 2014 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/04/11/412271.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/412271.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/04/11/412271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/412271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/412271.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　<strong style="word-break: break-all; line-height: normal !important;">背景：</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在某个申请业务中，需要上传附件文件，然后才能提交该申请</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">遇到的问题：</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　1， &nbsp;在使用<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Jmeter</strong></u></a>或者LR进行录制时，无法录制到上传文件的请求，只能通过Fiddler能查看到该请求</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　2， &nbsp;因为录制不下来，只能手工构造，但网上相关的材料太少。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">所以在这里整理备忘</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　Fiddler录制得到的请求的Header和Body如下面的两个截屏</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45360" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/04/14982672_201404101553391baUg.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">body</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45361" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/04/14982672_201404101553392C9w6.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　截图如上，注意Header截图【Content-Type:multipart/form-data;boundary=----------cH2GI3Ef1gL6Ij5cH2gL6Ij5ei4gL6】和Body截图</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　每一个&#8220;-----------------------------&#8221;为分隔符，代表一个表单域；</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　最后一个&#8220;----------cH2GI3Ef1gL6Ij5cH2gL6Ij5ei4gL6--&#8221;（以&#8220;--&#8221;结尾）分隔符为表单域结束边界。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　由此可以看到我得到的这个请求，POST data中共有四个表单域，最后一个即包含了name=&#8221;Filedate&#8221;（这个name的值可以自己定），filename=&#8221;ff.txt&#8221;，下图中红框为ff.txt实际上传的文件内容</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=45362" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/04/14982672_201404101553393JU2B.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><br /><br /><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;">　<strong style="word-break: break-all; line-height: normal !important;">Server端的代码如下</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45363" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/04/14982672_2014041015533940Fj3.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><strong style="word-break: break-all; line-height: normal !important;">　　一，Jmeter</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><strong style="word-break: break-all; line-height: normal !important;">　　需要注意</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;">　　1，请求类型为Post</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;">　　2，要勾选 Use multipart/form-data for POST，否则request中将不包含上传的文件</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;">　　3， &nbsp;MIME类型为application/octet-stream</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><a href="http://www.51testing.com/batch.download.php?aid=45364" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/04/14982672_201404101553395lMUG.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><br /><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><strong style="word-break: break-all; line-height: normal !important;">二，LoadRunner</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">lr_start_transaction("upload");</div><div style="word-break: break-all; margin: 10px 0px;">web_reg_save_param("attachmentId1",</div><div style="word-break: break-all; margin: 10px 0px;">"LB/IC=attachmentId\":\"",</div><div style="word-break: break-all; margin: 10px 0px;">"RB/IC=\"",</div><div style="word-break: break-all; margin: 10px 0px;">"Ord=1",</div><div style="word-break: break-all; margin: 10px 0px;">"Search=ALL",</div><div style="word-break: break-all; margin: 10px 0px;">LAST);</div><div style="word-break: break-all; margin: 10px 0px;">web_submit_data("upload.text",</div><div style="word-break: break-all; margin: 10px 0px;">"Action=http://192.168.0.1:8000/fileUpload/upload.text",</div><div style="word-break: break-all; margin: 10px 0px;">"Method=POST",</div><div style="word-break: break-all; margin: 10px 0px;">"EncType=multipart/form-data",</div><div style="word-break: break-all; margin: 10px 0px;">"RecContentType=text/plain",</div><div style="word-break: break-all; margin: 10px 0px;">"Referer=",</div><div style="word-break: break-all; margin: 10px 0px;">"Snapshot=t230.inf",</div><div style="word-break: break-all; margin: 10px 0px;">"Mode=HTTP",</div><div style="word-break: break-all; margin: 10px 0px;">ITEMDATA,</div><div style="word-break: break-all; margin: 10px 0px;">"Name=Filename","Value=Attachment.doc", ENDITEM,</div><div style="word-break: break-all; margin: 10px 0px;">"Name=attachmentType","Value=合同正本", ENDITEM,</div><div style="word-break: break-all; margin: 10px 0px;">"Name=Filedata","Value=Attachment.doc", "File=Yes", ENDITEM,</div><div style="word-break: break-all; margin: 10px 0px;">"Name=Upload","Value=Submit Query", ENDITEM,</div><div style="word-break: break-all; margin: 10px 0px;">LAST);</div><div style="word-break: break-all; margin: 10px 0px;">lr_end_transaction("upload",LR_AUTO);</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;">　　<strong style="word-break: break-all; line-height: normal !important;">LoadRunner的下载</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">lr_start_transaction("downloadApproval");</div><div style="word-break: break-all; margin: 10px 0px;">web_reg_save_param("FileName",</div><div style="word-break: break-all; margin: 10px 0px;">"LB=filename=",</div><div style="word-break: break-all; margin: 10px 0px;">"RB=.pdf",</div><div style="word-break: break-all; margin: 10px 0px;">"Ord=1",</div><div style="word-break: break-all; margin: 10px 0px;">LAST);</div><div style="word-break: break-all; margin: 10px 0px;">web_url("generateApproval.html",</div><div style="word-break: break-all; margin: 10px 0px;">"URL=http:// 192.168.0.1:8000/xx/generateApproval.html?id={PersionId}",</div><div style="word-break: break-all; margin: 10px 0px;">"Resource=1",</div><div style="word-break: break-all; margin: 10px 0px;">"RecContentType=application/x-msdownload",</div><div style="word-break: break-all; margin: 10px 0px;">"Referer=http:// 192.168.0.1:8000/xx/viewWorkflow.html?id={PersionId}",</div><div style="word-break: break-all; margin: 10px 0px;">"Snapshot=t60.inf",</div><div style="word-break: break-all; margin: 10px 0px;">LAST);</div><div style="word-break: break-all; margin: 10px 0px;">lr_message("!!filename is%s.xml",lr_eval_string("{FileName}"));</div><div style="word-break: break-all; margin: 10px 0px;">//获取二进制文件类型的文件大小</div><div style="word-break: break-all; margin: 10px 0px;">flen =web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);</div><div style="word-break: break-all; margin: 10px 0px;">lr_message("Size:%d",flen);</div><div style="word-break: break-all; margin: 10px 0px;">lr_end_transaction("downloadApproval",LR_AUTO);</div></td></tr></tbody></table></div><br /></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px;"></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-size: 11.818181991577148px; height: 21px; position: relative; width: 627.1875px;"></div></a></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff; height: 21px; position: relative; width: 627.1875px;"></div><img src ="http://www.blogjava.net/qileilove/aggbug/412271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-04-11 10:41 <a href="http://www.blogjava.net/qileilove/archive/2014/04/11/412271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter远程测试，每个实际测试人员都要学习的(3)</title><link>http://www.blogjava.net/qileilove/archive/2014/03/18/411160.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Tue, 18 Mar 2014 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/03/18/411160.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/411160.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/03/18/411160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/411160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/411160.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">同时创建一个规则（Qolicy）文件，添加[computer_name][computer_domain]行到/etc/hosts。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">3．如何使用不同端口号</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　默认情况下，JMeter使用标准RMI端口号1099（这是可以改变的）。要想成功改变使用的端口号，需满足如下条件：</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在远程服务器，启动Rmiregistry使用新端口号。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在远程服务器，启动JMeter并预先定义server_port属性。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在客户端，更新remote_hosts属性，在其中包含remote host:port设置。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　从JMeter 2.1.1版本开始，jmeter-server脚本支持改变端口号。例如，假设<a target="_self" style="word-break: break-all; color: #202859; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>人员希望使用端口号1664（可能因为1099端口已经被其他应用程序占用了）。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　<strong style="word-break: break-all; line-height: normal !important;">　<a target="_self" style="word-break: break-all; color: #202859;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Windows</strong></u></a>系统 （DOS窗口中）：</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　C:\JMETER&gt; SET SERVER_PORT=1664</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　C:\JMETER&gt; JMETER-SERVER [other options]</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">UNIX系统：</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　$ SERVER_PORT=1664 jmeter-server [other options]</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　[N.B. use upper case for the environment variable]</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在这两种情况下，脚本都会在指定端口上启动Rmiregistry，接着以远程服务器模式启动JMeter，并已经定义了"server_port"属性。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　选定的端口号将会被记录到远程服务器的jmeter.log文件中（Rmiregistry不会创建一个日志文件）。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　<strong style="word-break: break-all; line-height: normal !important;">　4．使用采样批次</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　测试计划中的监听器会把它们的结果返回到JMeter客户端，而JMeter客户端默认情况下会将这些结果写入到指定文件中，采样结果会在产生后立即发回JMeter客户端。这样就会对网络和JMeter客户端产生很大的压力。用户可以通过设置一些属性，来改变默认操作。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　模式（Mode）（采样结果发送模式）默认是Standard。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　Standard：在采样结果产生后立即发送。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　Hold：将采样结果保存在一个数组中，直到测试结束。这可能会占用远程服务器的大量内存。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　Batch：当计数器或者时间超过阈值之后，发送保存的采样结果。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　Statistical：当计数器或者时间超过阈值之后，以概要的形式发送采样结果；采样结果以线程组（Thread Group）名称和采样标签（Sample Label）进行概要统计。积累的数据域包括：elapsed time、latency、bytes、sample count、error count，其他数据域将会被丢弃。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　Stripped：将成功采样的响应数据移除。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　StrippedBatch：将成功采样的响应数据移除，并批次发送。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　Custom implementation：将模式参数设置为测试人员的客户化采样发送器的类名。该类必须实现接口SampleSender，并且类的构造函数只有一个RemoteSampleListener型的参数。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　如下属性会影响Batch和Statistical模式。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　num_sample_threshold：一个批次中的采样数目（默认为100）。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　time_threshold：等待的毫秒数（默认为60秒）。</div><img src ="http://www.blogjava.net/qileilove/aggbug/411160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-03-18 10:32 <a href="http://www.blogjava.net/qileilove/archive/2014/03/18/411160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter远程测试，每个实际测试人员都要学习的</title><link>http://www.blogjava.net/qileilove/archive/2014/03/14/411016.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 14 Mar 2014 03:04:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/03/14/411016.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/411016.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/03/14/411016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/411016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/411016.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">详解JMeter远程<a target="_self" style="word-break: break-all; color: #202859;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>（1）</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　如果运行JMeter客户端的机器性能不能满足测试需要，那么测试人员可以通过单个JMeter GUI客户端来控制多个远程JMeter服务器，以便对服务器进行压力测试，模拟足够多的并发用户。通过远程运行JMeter，测试人员可以跨越多台低端计算机复制测试，这样就可以模拟一个比较大的服务器压力。一个JMeter GUI客户端实例，理论上可以控制任意多的远程JMeter实例，并通过它们收集测试数据，如图11-3所示。这样一来，就有了如下特性：</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　保存测试采样数据到本地机器。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　通过单台机器管理多个JMeter执行引擎。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　没有必要将测试计划复制到每一台机器，JMeter GUI客户端会将它发往每一台JMeter服务器。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　每一台JMeter远程服务器都执行相同的测试计划。JMeter不会在执行机间做负载均衡，每一台服务器都会完整地运行测试计划。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　在1.4GHz～3GHz的CPU、1GB内存的JMeter客户端上，可以处理线程100～300。但是Web Service例外。XML处理是CPU运算密集的，会迅速消耗掉所有的CPU。一般来说，以XML技术为核心的应用系统，其性能将是普通Web应用的10%～25%。另外，如果所有负载由一台机器产生，网卡和交换机端口都可能产生瓶颈，所以一个JMeter客户端线程数不应超过100。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　采用JMeter远程模式并不会比独立运行相同数目的非GUI测试更耗费资源。但是，如果使用大量的JMeter远程服务器，可能会导致客户端过载，或者网络连接发生拥塞。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　请注意，假如测试人员将JMeter执行引擎安装在应用服务器（测试目标）上，那么这显然会加重应用服务器的负担，测试结果也将变得不可信。作者推荐的方式是将JMeter远程服务器放在应用服务器（测试目标）所在的同一个网段内。这样做既可以减少JMeter收集测试结果对网络产生的冲击，又可以避免对应用服务器（测试目标）性能产生影响。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=44930" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2014/03/14982672_2014031211224518Ya6.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a>　　</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">图11-3 JMeter远程测试原理图<br /><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　下面是启动JMeter远程测试的基本步骤：</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　<strong style="word-break: break-all; line-height: normal !important;">　步骤1：配置节点</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　确保所有节点（JMeter客户端和JMeter远程服务器）运行相同版本的JMeter。尽可能在所有操作系统上使用相同的Java版本。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　如果测试用到了外部数据文件，那么请注意这些文件不会被JMeter客户端分发，因此测试人员需要确保每台执行机上都保存了这些数据文件（其所在目录也必须正确）。如果有必要，用户可以为每台执行机设置不同的属性变量，即在JMeter远程服务器上编辑user.properties或者system.properties文件。这些属性将会在JMeter远程服务器启动时被识别，并有可能被应用到测试计划之中，从而影响测试执行（例如，与其他远程服务器发生交互）。另外，不同的JMeter远程服务器可能会使用不同内容的数据文件（例如，每台服务器必须使用不同的ID，就以此来划分数据文件）。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　<strong style="word-break: break-all; line-height: normal !important;">步骤2：启动远程服务器</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　要启动JMeter远程节点，请在执行机上运行JMETER_HOME/bin/jmeter-server （UNIX）或者JMETER_HOME/bin/jmeter-server.bat（Windows）脚本。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　请注意，每个远程节点上只能运行一个JMeter远程服务器脚本，除非采用不同的RMI端口。从JMeter 2.3.1开始，JMeter远程服务器会自己启动RMI注册；用户没有必要单独启动RMI注册。假设测试人员一定要单独启动RMI注册，可以在远程节点上定义JMeter属性server.rmi.create=false。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　默认情况下，JMeter远程服务器的RMI使用动态端口号。这样就会为防火墙配置带来麻烦，因此JMeter 2.3.2及其以后的版本，会检查JMeter属性server.rmi.localport。如果该值非零，JMeter远程服务器就会用它来作为本地端口号。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　<strong style="word-break: break-all; line-height: normal !important;">步骤3：将JMeter远程服务器的IP地址添加到客户端属性文件中</strong></div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　编辑JMeter控制机的属性文件。在/bin/jmeter.properties文件中找到属性"remote_hosts"，使用JMeter远程服务器的IP地址作为其属性值。可以添加多个服务器的IP地址，以逗号作为分隔。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　请注意测试人员还可以使用-R命令行选项来指明将会使用的远程服务器。这与使用-r 和-Jremote_hosts={服务器列表}的效果相同。例如jmeter -Rhost1,127.0.0.1,host2。</div><div style="word-break: break-all; line-height: 21.60000228881836px; margin: 10px 0px; font-size: 11.818181991577148px;">　　如果测试人员定义JMeter属性server.exitaftertest=true，那么远程服务器在运行完单个测试后就会退出。-Z标志也有同样的效果，参见后面的内容。</div></div><img src ="http://www.blogjava.net/qileilove/aggbug/411016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-03-14 11:04 <a href="http://www.blogjava.net/qileilove/archive/2014/03/14/411016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jmeter之配置元件</title><link>http://www.blogjava.net/qileilove/archive/2014/02/28/410451.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 28 Feb 2014 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/02/28/410451.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/410451.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/02/28/410451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/410451.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/410451.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 利用Jmeter的http请求的时候，例如登陆操作，我们做普通用户名和密码作参数化，循环读取文本里的用户名和密码，可以添加CSV&nbsp;Data&nbsp;Set&nbsp;Config这个原件来控制。利用Jmeter的CSV&nbsp;Data&nbsp;Set&nbsp;Config，可以实现这个功能，具体如下：1.新建一个文本文件，里面保存要登录的用户名，密码，文件内容如下：baidu,...&nbsp;&nbsp;<a href='http://www.blogjava.net/qileilove/archive/2014/02/28/410451.html'>阅读全文</a><img src ="http://www.blogjava.net/qileilove/aggbug/410451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-02-28 13:49 <a href="http://www.blogjava.net/qileilove/archive/2014/02/28/410451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jmeter 目录介绍</title><link>http://www.blogjava.net/qileilove/archive/2014/02/24/410233.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Mon, 24 Feb 2014 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/02/24/410233.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/410233.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/02/24/410233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/410233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/410233.html</trackback:ping><description><![CDATA[<img src="http://www.blogjava.net/images/blogjava_net/qileilove/jmeter.jpg" width="804" height="604" alt="" /><br /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/qileilove/jmeter1.jpg" width="804" height="604" alt="" /><br /><br /><br /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/qileilove/jmeter2.jpg" width="804" height="604" alt="" /><br /><br /><br /><br /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/qileilove/jmeter3.jpg" width="804" height="604" alt="" /><br /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/qileilove/jmeter5.jpg" width="1367" height="740" alt="" /><br /><br /><img src ="http://www.blogjava.net/qileilove/aggbug/410233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-02-24 11:01 <a href="http://www.blogjava.net/qileilove/archive/2014/02/24/410233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jMeter 测试结果字段意义</title><link>http://www.blogjava.net/qileilove/archive/2014/02/13/409821.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 13 Feb 2014 08:06:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/02/13/409821.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/409821.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/02/13/409821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/409821.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/409821.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　<strong style="word-break: break-all; line-height: normal !important;">JMeter&nbsp;<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>结果字段意义</strong></div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Lable :</strong>定义 HTTP 请求名称</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Samples :</strong>表示这次测试中一共发出了多少个请求</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Average :</strong>平均响应时长---默认情况下是单个Request的平均响应时长，当使用Transcation Controller时，也可以以Transcation为单位显示平均响应时长</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Median :</strong>中位数，也就是50%用户的响应时长</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">90%Line ：</strong>90%用户的响应时长</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Min:</strong>访问页面的最小响应时长</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Max:</strong>访问页面的最大响应时长</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Error% :</strong>错误请求的数量/请求的总数</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">Throughput :</strong>默认情况下表示每秒完成的请求数（Request per Second）,当使用了Transaction Controller时， 也可以表示类似<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">LoadRunner</strong></u></a>的Transaction per Second 数</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">KB/Sec :</strong>每秒从服务器端接收到的数据量</div><img src ="http://www.blogjava.net/qileilove/aggbug/409821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-02-13 16:06 <a href="http://www.blogjava.net/qileilove/archive/2014/02/13/409821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>性能测试分享—JMeter篇</title><link>http://www.blogjava.net/qileilove/archive/2014/01/02/408357.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 02 Jan 2014 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2014/01/02/408357.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/408357.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2014/01/02/408357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/408357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/408357.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　这周尝试了一把<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>，之前都是测试网站的性能测试，<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">java</strong></u></a>接口的性能测试还是头一次，学到了很多，特此分享一下。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　主要用到了两个性能测试工具，一个是jmeter，一个是<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">LoadRunner</strong></u></a>。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　使用jmeter的测试方法：</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">1、下载jemeter的linux版本的，下载的文件里包含了两个jar包</strong>，一个是ApacheJMeter_core.jar,ApacheJMter_java.jar。分别把这两个jar放到eclipse的Java Build Path的libraries下面。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">2、创建编写脚本的类，使他继承AbstractJavaSamplerClient。</strong>初步结构是</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">private SampleResult results;</div><div style="word-break: break-all; margin: 10px 0px;">public void setupTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">results = new SampleResult();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public Arguments getDefaultParameters() {</div><div style="word-break: break-all; margin: 10px 0px;">Arguments params = new Arguments();</div><div style="word-break: break-all; margin: 10px 0px;">return params;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">//测试执行的循环体，根据线程数和循环次数的不同可执行多次，类似于LoadRunner中的Action方法</div><div style="word-break: break-all; margin: 10px 0px;">public SampleResult runTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">results.sampleStart();</div><div style="word-break: break-all; margin: 10px 0px;">results.sampleEnd();</div><div style="word-break: break-all; margin: 10px 0px;">results.setSuccessful(true);</div><div style="word-break: break-all; margin: 10px 0px;">return results;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">//结束方法，实际运行时每个线程仅执行一次，在测试方法运行结束后执行，类似于LoadRunner中的end方法</div><div style="word-break: break-all; margin: 10px 0px;">public void teardownTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;">　将需要循环的业务流程放到runTest方法里。编写好的代码如下：</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">package app;</div><div style="word-break: break-all; margin: 10px 0px;">import http.HttpClient4;</div><div style="word-break: break-all; margin: 10px 0px;">import http.HttpParameter;</div><div style="word-break: break-all; margin: 10px 0px;">import http.HttpResp;</div><div style="word-break: break-all; margin: 10px 0px;">import http.JsonUtil;</div><div style="word-break: break-all; margin: 10px 0px;">import java.io.IOException;</div><div style="word-break: break-all; margin: 10px 0px;">import java.text.ParseException;</div><div style="word-break: break-all; margin: 10px 0px;">import java.text.SimpleDateFormat;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.Calendar;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.Date;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.Map;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.Random;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.commons.httpclient.HttpClient;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.commons.httpclient.HttpException;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.commons.httpclient.methods.PostMethod;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.config.Arguments;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.samplers.SampleResult;</div><div style="word-break: break-all; margin: 10px 0px;">import com.yeepay.g3.utils.common.encrypt.AES;</div><div style="word-break: break-all; margin: 10px 0px;">import com.yibao.utils.des3.RSA_Encrypt;</div><div style="word-break: break-all; margin: 10px 0px;">public class TheardTest extends AbstractJavaSamplerClient{</div><div style="word-break: break-all; margin: 10px 0px;">private SampleResult results;</div><div style="word-break: break-all; margin: 10px 0px;">public void setupTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">results = new SampleResult();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public Arguments getDefaultParameters() {</div><div style="word-break: break-all; margin: 10px 0px;">Arguments params = new Arguments();</div><div style="word-break: break-all; margin: 10px 0px;">return params;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public static String ramdonNum(int num){</div><div style="word-break: break-all; margin: 10px 0px;">Random rd = new Random();</div><div style="word-break: break-all; margin: 10px 0px;">StringBuilder sb = new StringBuilder("");</div><div style="word-break: break-all; margin: 10px 0px;">if (num &lt;1){</div><div style="word-break: break-all; margin: 10px 0px;">return null;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">else{</div><div style="word-break: break-all; margin: 10px 0px;">for(int i=1;i&lt;=num;i++){</div><div style="word-break: break-all; margin: 10px 0px;">int sr=rd.nextInt(9);</div><div style="word-break: break-all; margin: 10px 0px;">sb.append(String.valueOf(sr));</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">return sb.toString();</div><div style="word-break: break-all; margin: 10px 0px;">}}</div><div style="word-break: break-all; margin: 10px 0px;">public static void testCreditPay() throws ParseException{</div><div style="word-break: break-all; margin: 10px 0px;">String PUBLIC_KEY=TheardTest.testConsult();</div><div style="word-break: break-all; margin: 10px 0px;">HttpClient client = new HttpClient();</div><div style="word-break: break-all; margin: 10px 0px;">PostMethod method = new PostMethod("http://xxxxxxxx/xxxxxx/api/bankcard/credit/pay");</div><div style="word-break: break-all; margin: 10px 0px;">String key=TheardTest.ramdonNum(6);</div><div style="word-break: break-all; margin: 10px 0px;">String encryptkey = "0123456789"+key;</div><div style="word-break: break-all; margin: 10px 0px;">String merchantAccount = "YB01000000078";</div><div style="word-break: break-all; margin: 10px 0px;">//民生</div><div style="word-break: break-all; margin: 10px 0px;">String cardNo ="XXXXXXXXX";</div><div style="word-break: break-all; margin: 10px 0px;">String validthru="xxx7";</div><div style="word-break: break-all; margin: 10px 0px;">String cvv2 = "6xx";</div><div style="word-break: break-all; margin: 10px 0px;">String phone = "13xxxxxx5431";</div><div style="word-break: break-all; margin: 10px 0px;">String orderId = "33hhkssseef3utyt2"+key;</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(orderId);</div><div style="word-break: break-all; margin: 10px 0px;">Integer transtime = (int)(System.currentTimeMillis()/1000);</div><div style="word-break: break-all; margin: 10px 0px;">Integer currency = 156;</div><div style="word-break: break-all; margin: 10px 0px;">String &nbsp;amount = "50";</div><div style="word-break: break-all; margin: 10px 0px;">String productcatalog = "1";</div><div style="word-break: break-all; margin: 10px 0px;">String productName = "123";</div><div style="word-break: break-all; margin: 10px 0px;">String productDesc = "小丸子";</div><div style="word-break: break-all; margin: 10px 0px;">String userIp = "123.45.45.45";</div><div style="word-break: break-all; margin: 10px 0px;">String identityId = "a";</div><div style="word-break: break-all; margin: 10px 0px;">Integer identityType = 6;</div><div style="word-break: break-all; margin: 10px 0px;">String other = "eeee";</div><div style="word-break: break-all; margin: 10px 0px;">String data = "{\"merchantaccount\":\"" + merchantAccount</div><div style="word-break: break-all; margin: 10px 0px;">+"\",\"cardno\":\"" + cardNo</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"validthru\":\"" + validthru</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"cvv2\":\"" + cvv2</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"phone\":\"" + phone</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"orderid\":\"" + orderId</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"transtime\":" + transtime</div><div style="word-break: break-all; margin: 10px 0px;">+ ",\"currency\":" + currency</div><div style="word-break: break-all; margin: 10px 0px;">+ ",\"amount\":" + amount</div><div style="word-break: break-all; margin: 10px 0px;">+ ",\"productcatalog\":\"" + productcatalog</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"productname\":\"" + productName</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"productdesc\":\"" + productDesc</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"userip\":\"" + userIp</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"identityid\":\"" + identityId</div><div style="word-break: break-all; margin: 10px 0px;">+ "\",\"identitytype\":" + identityType</div><div style="word-break: break-all; margin: 10px 0px;">+ ",\"other\":\"" + other + "\"}";</div><div style="word-break: break-all; margin: 10px 0px;">data = AES.encryptToBase64(data, encryptkey);</div><div style="word-break: break-all; margin: 10px 0px;">try {</div><div style="word-break: break-all; margin: 10px 0px;">method.setParameter("merchantaccount", merchantAccount);</div><div style="word-break: break-all; margin: 10px 0px;">method.setParameter("data", data);</div><div style="word-break: break-all; margin: 10px 0px;">method.setParameter("encryptkey", RSA_Encrypt.encrypt(encryptkey, PUBLIC_KEY));</div><div style="word-break: break-all; margin: 10px 0px;">client.executeMethod(method);</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(method.getStatusLine());</div><div style="word-break: break-all; margin: 10px 0px;">String respStr = method.getResponseBodyAsString();</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(respStr);</div><div style="word-break: break-all; margin: 10px 0px;">String result = AES.decryptFromBase64(respStr, encryptkey);</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(result);</div><div style="word-break: break-all; margin: 10px 0px;">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;自动退款</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String, Object&gt; mapjson=JsonUtil.parse(result);</div><div style="word-break: break-all; margin: 10px 0px;">Object obj = mapjson.get("yborderid");</div><div style="word-break: break-all; margin: 10px 0px;">String yborderid=obj.toString();</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println("流水号："+yborderid);</div><div style="word-break: break-all; margin: 10px 0px;">TheardTest.refundTeseCase(yborderid,merchantAccount,amount);</div><div style="word-break: break-all; margin: 10px 0px;">method.releaseConnection();</div><div style="word-break: break-all; margin: 10px 0px;">} catch (HttpException e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">} catch (IOException e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">} catch (Exception e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 测试协商接口</div><div style="word-break: break-all; margin: 10px 0px;">* @author shangwei</div><div style="word-break: break-all; margin: 10px 0px;">* @return</div><div style="word-break: break-all; margin: 10px 0px;">* @throws ParseException</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public static String testConsult() throws ParseException{</div><div style="word-break: break-all; margin: 10px 0px;">String url = "http://xxxxxxx/xxxxxx/consult";</div><div style="word-break: break-all; margin: 10px 0px;">HttpClient4 client =HttpClient4.createDefault();</div><div style="word-break: break-all; margin: 10px 0px;">String data = "";</div><div style="word-break: break-all; margin: 10px 0px;">Date d = new Date();</div><div style="word-break: break-all; margin: 10px 0px;">Calendar now = Calendar.getInstance();</div><div style="word-break: break-all; margin: 10px 0px;">now.setTime(d);</div><div style="word-break: break-all; margin: 10px 0px;">SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");</div><div style="word-break: break-all; margin: 10px 0px;">String dateline=format.format(now.getTime());</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(dateline);</div><div style="word-break: break-all; margin: 10px 0px;">Date date = format.parse(dateline);</div><div style="word-break: break-all; margin: 10px 0px;">String dates=date.getTime()/1000+"";</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(dates);</div><div style="word-break: break-all; margin: 10px 0px;">try {</div><div style="word-break: break-all; margin: 10px 0px;">data = AES.encryptToBase64(dates, "12345678901234HH");</div><div style="word-break: break-all; margin: 10px 0px;">} catch (Exception e) {</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">HttpParameter parameter = new HttpParameter();</div><div style="word-break: break-all; margin: 10px 0px;">parameter.add("data", data);</div><div style="word-break: break-all; margin: 10px 0px;">parameter.add("merchantaccount", "YB01000000078");</div><div style="word-break: break-all; margin: 10px 0px;">HttpResp resp = new HttpResp();</div><div style="word-break: break-all; margin: 10px 0px;">try{</div><div style="word-break: break-all; margin: 10px 0px;">resp=client.doPost(url, parameter, "utf-8");</div><div style="word-break: break-all; margin: 10px 0px;">String respStr= resp.getText("utf-8");</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(respStr);</div><div style="word-break: break-all; margin: 10px 0px;">String aes=AES.decryptFromBase64(respStr, "12345678901234HH");</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(aes);</div><div style="word-break: break-all; margin: 10px 0px;">return aes;</div><div style="word-break: break-all; margin: 10px 0px;">}catch (HttpException e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">} catch (IOException e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">} catch (Exception e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">client.shutdown();</div><div style="word-break: break-all; margin: 10px 0px;">return "出错啦";</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public static void refundTeseCase(String yborderid,String merchantAccount,String amount) throws IOException{</div><div style="word-break: break-all; margin: 10px 0px;">String url ="http://xxxxxxxx/xxxxxxx/api/refund/direct";</div><div style="word-break: break-all; margin: 10px 0px;">HttpClient4 client =HttpClient4.createDefault();</div><div style="word-break: break-all; margin: 10px 0px;">HttpParameter parameter = new HttpParameter();</div><div style="word-break: break-all; margin: 10px 0px;">parameter.add("merchantaccount", merchantAccount);</div><div style="word-break: break-all; margin: 10px 0px;">parameter.add("merchantrefundid", "093032323");</div><div style="word-break: break-all; margin: 10px 0px;">parameter.add("transorderid", yborderid);</div><div style="word-break: break-all; margin: 10px 0px;">parameter.add("amount", amount);</div><div style="word-break: break-all; margin: 10px 0px;">HttpResp rep;</div><div style="word-break: break-all; margin: 10px 0px;">try {</div><div style="word-break: break-all; margin: 10px 0px;">rep = client.doPost(url, parameter,"utf-8");</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(rep.getStatusCode());</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println(rep.getText("utf-8"));</div><div style="word-break: break-all; margin: 10px 0px;">}catch (Exception e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">//测试执行的循环体，根据线程数和循环次数的不同可执行多次，类似于LoadRunner中的Action方法</div><div style="word-break: break-all; margin: 10px 0px;">public SampleResult runTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">results.sampleStart();</div><div style="word-break: break-all; margin: 10px 0px;">try {</div><div style="word-break: break-all; margin: 10px 0px;">testCreditPay();</div><div style="word-break: break-all; margin: 10px 0px;">} catch (ParseException e) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated catch block</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">results.sampleEnd();</div><div style="word-break: break-all; margin: 10px 0px;">results.setSuccessful(true);</div><div style="word-break: break-all; margin: 10px 0px;">return results;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">//结束方法，实际运行时每个线程仅执行一次，在测试方法运行结束后执行，类似于LoadRunner中的end方法</div><div style="word-break: break-all; margin: 10px 0px;">public void teardownTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;">　　<strong style="word-break: break-all; line-height: normal !important;">3、将写好的class类和该类引入到的类都打成jar包</strong>，放到jemter文件的lib/ext文件下。将用到的其他的jar包放到lib文件夹下面。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;">　　<strong style="word-break: break-all; line-height: normal !important;">4、启动jemter后，创建先添加线程组，在添加sampler的java请求</strong>，如果之前步骤成功，在类名称下拉列表里会出现测试代码打好jar包的类。之后操作jemter进行测试就OK啦。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;">　　下面在分享LoadRunner进行性能测试及环境优化。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;"></div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px; height: 21px; position: relative; width: 627.1875px;"></div></div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;"></div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px; height: 21px; position: relative; width: 627.1875px;"></div></div><img src ="http://www.blogjava.net/qileilove/aggbug/408357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2014-01-02 09:24 <a href="http://www.blogjava.net/qileilove/archive/2014/01/02/408357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter代理录制脚本（3）</title><link>http://www.blogjava.net/qileilove/archive/2013/11/29/406988.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 29 Nov 2013 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/29/406988.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406988.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/29/406988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406988.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">使用JMeter代理录制脚本的过程如下：</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　1.启动JMeter，在<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>计划中添加&#8220;线程组&#8221;。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　2.在&#8220;线程组&#8221;中添加&#8220;HTTP请求默认值&#8221;，参数设定如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43303" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311271010291i5Cf.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　3.在&#8220;&#8221;中添加&#8220;HTTP代理服务器&#8221;，参数设定如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43304" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311271010292aIcc.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　4.在IE浏览器中&#8220;工具&#8221;&#8212;&#8220;Internet选项&#8221;---&#8220;连接&#8221;---&#8220;局域网设置&#8221;中设定参数如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43305" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><font color="#202859"><span style="line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311271010293p9zt.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></span></font><br /><br /><br /></a><a href="http://www.51testing.com/batch.download.php?aid=43305" target="_blank"><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　5.点击两次&#8220;确定&#8221;后，在浏览器中输入http://jakarta.apache.org/ &nbsp;，然后随便点击几个网页，再查看JMeter窗口，就会有录制好的网页，如图：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43306" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311271010294yvHB.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　6.录制好了以后，就可以重新播放脚本了.</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　附注：在启动代理服务器的时候出现一个问题：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43307" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311271010295kw7l.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　could not create proxy - see log fordetails</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　<strong style="word-break: break-all; line-height: normal !important;">解决方法：</strong>设定JRE的path路径，关闭JMeter在重新启动就可以了。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">相关文章：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/?action-viewnews-itemid-854655" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;">JMeter主要组件介绍（2）</a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px; height: 21px; position: relative; width: 627.1875px;"></div></a></div><img src ="http://www.blogjava.net/qileilove/aggbug/406988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-29 10:58 <a href="http://www.blogjava.net/qileilove/archive/2013/11/29/406988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter的基本介绍和入门（1）</title><link>http://www.blogjava.net/qileilove/archive/2013/11/28/406927.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 28 Nov 2013 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/28/406927.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406927.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/28/406927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406927.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">1. 介绍</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　JMeter是Apache组织的开放源代码项目，能做<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">功能测试</strong></u></a>和<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>。它能够对HTTP和FTP服务器进行压力和性能测试，也可以对任何<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">数据库</strong></u></a>进行同样的测试（通过JDBC），还能以多种形式展现测试结果。我们初学者往往一看到很多的理论都很不耐烦，一般都喜欢通过举例子才会激起兴趣，有想往下<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">学习</strong></u></a>的欲望。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">　　2. 测试环境搭建</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　在官网 http://jmeter.apache.org/ 下载JMeter，解压到本地，在里面的bin目录下，找到jmeter.bat批处理文件，然后双击就出现了JMeter的<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>环境：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43284" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311261419411ULQe.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　<strong style="word-break: break-all;">3. 测试实例</strong></div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　JMeter里面的元件很多，逻辑控制器，配置元件，定时器，Sampler，监听器等等，先给出一个实例，慢慢了解元件的使用方法。测试一个网站，我们至少需要：用户，发送请求，查看结果这三个过程。</div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;"><div style="word-break: break-all; margin: 10px 0px;">　　<strong style="word-break: break-all;">3.1 添加线程组（用户）</strong></div><div style="word-break: break-all; margin: 10px 0px;">　　在&#8220;测试计划&#8221;上右键，选择&#8220;添加&#8221;---&#8220;Thread Users&#8221;---&#8220;线程组&#8221;，如下图所示：</div></div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;"><a href="http://www.51testing.com/batch.download.php?aid=43285" target="_blank" style="word-break: break-all; color: #45a2fc;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311261419412kCbg.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><br /><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　其中，对我们有影响的参数是线程数（设置发送请求的用户数目），Ramp-up period： 每个请求发生的总时间间隔，单位是秒，循环次数（请求发生的重复次数）。如果我们需要JMeter模拟五个请求者（也就是五个线程），每个请求者连续请求两次，则如下图设置：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43286" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311261419413ZJIg.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">　3.2 添加请求</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　我们要访问一个网页，比如是百度首页，则是http请求，则添加http请求，在线程组上右键---&#8220;添加&#8221;---&#8220;Sampler&#8221;---&#8220;HTTP请求&#8221;</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43287" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_2013112614194142pFT.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　http请求的属性值中&#8220;Web服务器名称或IP&#8221;填写www.baidu.com就可以了：如下图所示：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43288" target="_blank" style="word-break: break-all; color: #45a2fc; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311261419415E0Xd.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">3.3 添加监视器（查看结果）</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　监视器的种类很多，根据自己的需要添加，我们选择&#8220;查看结果树&#8221;。在线程组上右键---&#8220;添加&#8221;---&#8220;监视器&#8221;---&#8220;查看结果树&#8221;，如下图所示：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43289" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311261419416PI76.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　<strong style="word-break: break-all; line-height: normal !important;">4. 运行</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43290" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311261419417bzWg.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　可以查看结果：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43291" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_2013112614194184Fcb.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　JMeter入门结束。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px; height: 21px; position: relative; width: 627.1875px;"></div></a></div></div><img src ="http://www.blogjava.net/qileilove/aggbug/406927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-28 11:30 <a href="http://www.blogjava.net/qileilove/archive/2013/11/28/406927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JMeter的Java请求功能测试Hetty性能</title><link>http://www.blogjava.net/qileilove/archive/2013/11/25/406777.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Mon, 25 Nov 2013 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/25/406777.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406777.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/25/406777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406777.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">　1.JMeter介绍</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　JMeter是Apache组织的开放源代码项目，它是功能和<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>的工具，100%的用<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">java</strong></u></a>实现。JMeter可以用于测试静态或者动态资源的性能（文件、Servlets、Perl脚本、java对象、<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">数据库</strong></u></a>和查询、ftp服务器或者其他的资源）。JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力，或者分析他们提供的服务在不同负载条件下的总性能情况。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　<strong style="word-break: break-all; line-height: normal !important;">　2.启动JMeter</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　进入JMeter的bin目录，然后执行：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　sudo ./jmeter.sh</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　<strong style="word-break: break-all; line-height: normal !important;">　3.原始的测试方法</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　在没有使用JMeter前，我对hetty的性能测试，都是通过自己写多线程代码去完成的，相当苦逼，相当麻烦，不过也能锻炼自己的编码能力，我先贴出比较原始的测试方法，如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">public class RpcHessianClient {</div><div style="word-break: break-all; margin: 10px 0px;">public static void main(String[] args) {</div><div style="word-break: break-all; margin: 10px 0px;">String url = "http://localhost:8081/apis/hello";</div><div style="word-break: break-all; margin: 10px 0px;">HessianProxyFactory factory = new HessianProxyFactory();</div><div style="word-break: break-all; margin: 10px 0px;">ExecutorService es = Executors.newFixedThreadPool(10);</div><div style="word-break: break-all; margin: 10px 0px;">int size = 1000000;</div><div style="word-break: break-all; margin: 10px 0px;">final CountDownLatch cdl = new CountDownLatch(size);</div><div style="word-break: break-all; margin: 10px 0px;">try {</div><div style="word-break: break-all; margin: 10px 0px;">long start = System.currentTimeMillis();</div><div style="word-break: break-all; margin: 10px 0px;">factory.setUser("client1");</div><div style="word-break: break-all; margin: 10px 0px;">factory.setPassword("client1");</div><div style="word-break: break-all; margin: 10px 0px;">factory.setOverloadEnabled(true);</div><div style="word-break: break-all; margin: 10px 0px;">final Hello basic = (Hello) factory.create(Hello.class,</div><div style="word-break: break-all; margin: 10px 0px;">url);</div><div style="word-break: break-all; margin: 10px 0px;">for (int i = 0; i &lt; size; i++) {</div><div style="word-break: break-all; margin: 10px 0px;">es.submit(new Runnable() {</div><div style="word-break: break-all; margin: 10px 0px;">@Override</div><div style="word-break: break-all; margin: 10px 0px;">public void run() {</div><div style="word-break: break-all; margin: 10px 0px;">String u=basic.hello("guolei");</div><div style="word-break: break-all; margin: 10px 0px;">//System.out.println(u);</div><div style="word-break: break-all; margin: 10px 0px;">cdl.countDown();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">});</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">cdl.await();</div><div style="word-break: break-all; margin: 10px 0px;">long time = System.currentTimeMillis() - start;</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println("SayHello:");</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println("耗时：" + (double) time / 1000 + " s");</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println("平均:" + ((double) time) / size +" ms");</div><div style="word-break: break-all; margin: 10px 0px;">System.out.println("TPS:" + (double) size / ((double) time / 1000));</div><div style="word-break: break-all; margin: 10px 0px;">// System.out.println("Hello, " + s.getMail());</div><div style="word-break: break-all; margin: 10px 0px;">} catch (MalformedURLException e) {</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">} catch (InterruptedException e) {</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">}finally{</div><div style="word-break: break-all; margin: 10px 0px;">es.shutdown();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">4.使用JMeter来进行现代化测试</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　我们要使用JMeter来测试hetty，由于hetty是一款基于hessian和netty的RPC产品，我们必须使用JMeter的JAVA请求功能来进行测试，Java请求是指JMeter对Java Class进行性能测试。首先我们需要编写测试用例：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　1）新建JAVA工程。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　2）引入ApacheJMeter_java.jar 、ApacheJMeter_core.jar以及测试所需要的jar（jar包在JMeter目录的lib/ext目录中）。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　3）继承AbstractJavaSamplerClient类开始编写主业务。如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">public class HettyTest extends AbstractJavaSamplerClient {</div><div style="word-break: break-all; margin: 10px 0px;">private static String label = "hettyTest";</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 执行runTest()方法前会调用此方法,可放一些初始化代码</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public void setupTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* JMeter测试用例入口</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public SampleResult runTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">SampleResult sr = new SampleResult();</div><div style="word-break: break-all; margin: 10px 0px;">sr.setSampleLabel(label);</div><div style="word-break: break-all; margin: 10px 0px;">try { // 这里调用我们要测试的java类，这里我调用的是一个Test类</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String,String&gt; map = getDefaultParameters().getArgumentsAsMap();</div><div style="word-break: break-all; margin: 10px 0px;">sr.sampleStart(); // 记录程序执行时间，以及执行结果</div><div style="word-break: break-all; margin: 10px 0px;">Test.execute(map.get("ip"),map.get("port"));</div><div style="word-break: break-all; margin: 10px 0px;">sr.sampleEnd();</div><div style="word-break: break-all; margin: 10px 0px;">sr.setSuccessful(true);</div><div style="word-break: break-all; margin: 10px 0px;">} catch (Throwable e) {</div><div style="word-break: break-all; margin: 10px 0px;">sr.setSamplerData(e.getMessage());</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">sr.setSuccessful(false); // 用于设置运行结果的成功或失败，如果是"false"则表示结果失败，否则则表示成功</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">return sr;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* JMeter界面中可手工输入参数,代码里面通过此方法获取</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public Arguments getDefaultParameters() {</div><div style="word-break: break-all; margin: 10px 0px;">Arguments args = new Arguments();</div><div style="word-break: break-all; margin: 10px 0px;">args.addArgument("ip", "localhost");</div><div style="word-break: break-all; margin: 10px 0px;">args.addArgument("port", "8081");</div><div style="word-break: break-all; margin: 10px 0px;">return args;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 执行runTest()方法后会调用此方法.</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public void teardownTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　Test类是我测试逻辑，如下：</div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public class Test {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public static void execute(String ip,String port) throws MalformedURLException {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">String url = "http://"+ip+":"+port+"/apis/hello";</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">HessianProxyFactory factory = new HessianProxyFactory();</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">factory.setUser("client1");</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">factory.setPassword("client1");</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">factory.setOverloadEnabled(true);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">final Hello basic = (Hello) factory.create(Hello.class, url);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">//System.out.println("SayHello:" + basic.hello("guolei"));</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　代码中都有注释，按照注释实际操作去理解。 &nbsp;System.out等的输出会显示在启动JMeter时的命令窗口内，但过多的输出会影响性能的准确性。<br /><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　代码中都有注释，按照注释实际操作去理解。 &nbsp;System.out等的输出会显示在启动JMeter时的命令窗口内，但过多的输出会影响性能的准确性。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　4）将项目打为jar包，放到JMeter目录下的lib/ext下（将项目依赖的jar也放到此目录）。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　5）重启JMeter。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">　5.JMeter使用</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　1）选中主界面左侧的&#8220;测试计划&#8221;，右键菜单-&gt;添加-&gt;Threads(Users)-&gt;线程组。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　2）再选中刚才新增的"线程组"，右键菜单-&gt;添加-&gt;Sampler-&gt;Java请求。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　3）再选中刚才新增的"Java请求"，右键菜单-&gt;添加-&gt;监视器-&gt;聚合报告。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　4）Ctrl + R，开始运行， Ctrl + E，清除历史结果。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43192" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311181723471yhVi.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　<strong style="word-break: break-all; line-height: normal !important;">6.查看测试结果</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43193" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311181723472goOd.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　聚合报告中基本已经包含我们所关心的几个数据了：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Samples -- 本次场景中一共完成了多少个Transaction</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Average -- 平均响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Median -- 统计意义上面的响应时间的中值</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　90% Line -- 所有transaction中90%的transaction的响应时间都小于xx</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Min -- 最小响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Max -- 最大响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　PS: 以上时间的单位均为ms</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Error -- 出错率</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Troughput -- 吞吐量，单位：transaction/sec</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　KB/sec -- 以流量做衡量的吞吐量</div></div></div></div><img src ="http://www.blogjava.net/qileilove/aggbug/406777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-25 10:38 <a href="http://www.blogjava.net/qileilove/archive/2013/11/25/406777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter Tutorial的安装和具体操作</title><link>http://www.blogjava.net/qileilove/archive/2013/11/22/406669.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 22 Nov 2013 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/22/406669.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406669.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/22/406669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406669.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">1、下载<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Jmeter</strong></u></a></strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　下载地址：http://jmeter.apache.org/download_jmeter.cgi</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　目前最新版为2.9，其余文件如源代码等也可从如下官网下载：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　http://jmeter.apache.org/download_jmeter.cgi</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">2、安装Jmeter之前</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　安装Jmeter之前需要先配置<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Java</strong></u></a>环境，我们下载的是jmeter2.9，所以java版本最好是选用java6以后的版本。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　安装JDk1.6的步骤如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　点击下载的JDK文件-dk-6u18-windows-i586.exe，点击下一步直至安装完成，然后开始配置环境：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　点击我的电脑----属性----高级----环境变量----在系统变量中----点击新建，</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　在变量名中输入：JAVA_HOME</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　变量值中输入：C:\Program Files (x86)\Java\jdk1.6.0_18</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　再次点击新建：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　在变量名中输入：CLASSPATH，</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　变量值中输入：.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　然后再系统变量中找到Path，点击编辑，在变量值中加上：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;（如果前面没有&#8220;;&#8221;需要加上）</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　配置完成之后，点击确定保存，然后cmd打开命令窗口输入：java或者javac，出现大串字符串表示配置成功。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　也可以输入：java -version 查看java版本来查看是否配置成功。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　OK，JDK安装成功之后，就可以下一步安装Jmeter了。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　<strong style="word-break: break-all; line-height: normal !important;">　3、安装Jmeter</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　解压apache-jmeter-2.9.zip文件至目录，我的是D:\Program Files目录。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　点击我的电脑----属性----高级----环境变量----在系统变量中----点击新建，</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　变量名输入：JMETER_HOME</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　变量值输入：D:\Program Files\apache-jmeter-2.9</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　然后编辑CLASSPATH变量，加上%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;然后确定即可</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　操作完上面的步骤，我们就可以点击Jmeter中bin目录下面的jmeter.bat文件即可打开Jmeter了。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　注意：打开的时候会有两个窗口，Jmeter的命令窗口和Jmeter的图形操作界面，不可以关闭命令窗口。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">　　二、录制Jmeter脚本</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　录制Jmeter脚本有两种方法，一种是设置代理；一种则是利用badboy软件，badboy软件支持导出jmx脚本。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　这里我们介绍第二种方法，利用badboy录制脚本，然后导出Jmeter需要的jmx文件。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　首先，在地址栏中输入要录制脚本的地址，然后点击绿色按钮即可开始录制（工具栏中的红色按钮也可以点击进行录制），点击红色圆形按钮旁边的正方形黑色按钮结束脚本录制（如果使用过loadrunner，那么步骤是一样的），在内嵌的浏览器上面操作你需要<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>的动作即可，它会自己记录你的相关行为动作。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　然后点击黑色按钮录制完成之后，我们可以导出jmx文件：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　保存为&#8220;登录开发者.jmx&#8221;。<br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">　三、使用Jmeter开始测试</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　1、打开脚本</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　用Jmeter打开我们上面保存的文件。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　打开之后如图所示：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　2、修改脚本</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　a、线程组</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　在测试计划里面选择添加既可以看到线程组。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　如上图：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　名称：可以随意取，我们保持创建是自动分配的名称</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　注释：随意</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　在取样器错误后要执行的动作：我们选择继续，错误之后依然继续执行</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　线程数：一般我们用来表示多少个用户，即我们测试时的用户数量</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Ramp-up Period(in Seconds)：表示每个用户启动的延迟时间，上述我设为1秒，表示系统将在1秒结束前启动我设置的1000个用户，如果设置为1000秒，那么系统将会在1000秒结束前启动这1000个用户，开始用户的延迟为1秒， 如果我设置为0秒，则表示立即启动所有用户。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　循环次数：如果你要限定循环次数为10次的话，可以取消永远的那个勾，然后在后面的文本框里面填写10；在这里我们勾上永远，表示如果不停止或者限定时间将会一直执行下去， 是为了方便调度器的调用。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　调度器的配置：我们勾选调度器时，将会出现这个面板</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　启动时间：表示我们脚本开始启动的时间，当你不想立即启动脚本测试，但是启动脚本的时间不会再电脑旁的时候，你可以设定一个启动的时间，然后再运行那里点击启动，系统将不会立即运行，而是会等到你填写的时间才开始运行。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　结束时间：与启动时间对应，表示脚本结束运行的时间。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　持续时间：表示脚本持续运行的时间，以秒为单位，比如如果你要让用户持续不断登录1个小时，你可以在文本框中填写3600。如果在1小时以内，结束时间已经到达，它将会覆盖结束时间，继续执行。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　启动延迟：表示脚本延迟启动的时间，在点击启动后，如果启动时间已经到达，但是还没有到启动延迟的时间，那么，启动延迟将会覆盖启动时间，等到启动延迟的时间到达后，再运行系统。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　注意：如果我们需要用到调度器来设定持续时间，如果线程数不够多到持续时间结束，我们就必须将循环次数勾选为永远，特别地，如果线程组里面有其他的循环，我们也需将该循环次数勾选为永远（如我上面录制的脚本中的Step1也是一个循环，需要将永远勾选），否则，按我如上配置，将永远去掉勾选，文本里填1，那么无论你将持续时间启动时间结束时间等设置多少，系统运行1000次后，将会停止不再运行。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　b、关于HTTP请求</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　关于HTTP请求，我们录制的脚本里面就有，这里就介绍一些常用的属性。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　如图所示：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　点击HTTP请求，将会出现如下界面：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　其中：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　名称：可以随意取，我们可以根据录制脚本的路径来命名</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　注释：可以对该界面做一个简单介绍</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　服务器名称或IP：即我们的服务器或者IP的地址，我因为是在本机上的项目，故填写localhost，可以填写127.0.0.1。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　端口号：我用的是tomcat，自己设置的端口号为8086（tomcat默认为8080）</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　后面的超时定义可以不用填写。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Implementation：这里我们录制时默认填写为JAVA</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　协议填写为：http</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　方法为：GET</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Content encoding：编码可以不用填写</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　路径：即页面的路径；下面的重定向等选择可以根据需要勾选，这里我们保持录制不修改。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Parameters参数：即跟着路径一起发送的参数及文件</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　下面的代理服务器等可以忽略，按需要填写。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　c、参数化</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　如下，我们为请求发送的参数来参数化。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　上述的例子为登录的用例，登录有两个参数：EMAIL和DEVELOPER_PASSWORD，在实际测试中，当我们需要用到不同的用户来登录的时候，我们就可以用到参数化。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　1)、我们新建一个文件，这里我新建的是一个txt文件，命名为c.txt，里面的内容为</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　web@qq.com,111111</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　col@qq.com,111111</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　mon@qq.com,111111</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　2)、在jmeter中的【选项】中选择【函数助手对话框】，将会弹出如下对话框：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　其中：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　CSV file to get values from | *alias：要读取的文件路径，为绝对路径</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　CSV文件列号| next| *alias：从第几列开始读取，注意第一列是0</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　如上图所示，我们读取的是c.txt里面的第一列用户名(如果要读取第二列的密码，只需将0改成1即可,往后类推)，点击【生成】按钮即可生成函数，我们使用时即拷贝生成的函数字符串：${__CSVRead(E:\c.txt,0)}。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　其他函数后面介绍。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　d、断言验证</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　在web测试中，有的时候，即使我们测试返回的response code为200，也不能保证该测试是正确的，这时候，我们可以用到响应断言，通过对比响应的内容来判断返回的页面是否是我们确定要返回的页面。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　选择我们要判断的页面，点击添加断言----响应断言，将会出现如下图：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　名称：随意，这里我们不做改动</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　注释：随意</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Apply to：这里我们选择默认值</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　要测试的响应字段：这里我们选择响应的文本，即返回的页面信息</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　模式匹配规则：这里我们选择包括，即响应的文本是否包括我们验证的信息</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　要测试的模式：开发者名称，即我们需要验证，开发者名称是否在响应文本中存在，也可以添加更多的字段来验证。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　其他还有文件大小和响应时间等的断言，后面介绍。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　e、添加监听器</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　我们做性能测试的时候，经常需要各种数据来验证我们的测试结果，Jmeter里面也提供了相关的功能，这里主要说一下Aggregate Report聚合报告。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　点击添加---监听器，选择：查看结果树，和聚合报告，如果需要看到断言信息也可以选择断言结果，将设置的一切保存之后，然后点击启动，系统将会运行，将结果在监听器中表现出来。<br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">　四、分析结果</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　1、查看结果树</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　如图所示：成功的为绿色，失败则显示为红色。如果测试的结果太多，你只需要看到错误的页面，则勾选【仅日志错误】</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　2、聚合报告(Aggregate Report)</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　其中：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Label：标签，即我们上面的请求名称</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　#Samples：本次场景中一共发出了多少个请求</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Average：平均响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Median：中位数，也就是50%的用户的响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　90%Line：表示90%的用户的响应时间，如果最小值和最大值相差很大的话，我们一般选择这个作为最终测试结果</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Min：最小响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Max：最大响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Error%：出错率，本次测试中出现错误的请求的数量/请求的总数</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Throughput：吞吐量</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　KB/sec：每秒从服务器端接受到的数据量</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　<strong style="word-break: break-all; line-height: normal !important;">五、监控内存及CPU等</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　很多时候，我们测试性能都需要查看内存和CPU等信息来判断系统瓶颈，关于CPU和内存的监控，Jmeter并没有很好的支持，很多时候，我们都只能通过系统的资源监控器来观察，一闪而过不会记录下来，很不方便。幸好google开发了一款专门监控的Jmeter插件，弥补了Jmeter这方面的不足，下面就来介绍一些这款插件&#8212;&#8212;JMeterPlugins，目前我用的是0.5.6版本。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　1、JMeterPlugins的下载地址</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　地址：http://code.google.com/p/jmeter-plugins/downloads/list，选择需要的版本，下载</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　2、JMeterPlugins的配置使用</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　将下载的文件解压，得到如下目录：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　将JMeterPlugins.jar包复制到Jmeter的lib目录下面的ext目录下面,重新启动Jmeter，我们点击添加就可以看到出现了很多的jp@gc-开头的文件.</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　这里监控内存我们使用的是：jp@gc - PerfMon Metrics Collectot</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　在使用之前，我们需要运行/serverAgent/startAgent.bat这个文件，我们需要将serverAgent目录及下面的文件复制到我们测试的服务器上，然后点击打开(我这里是本机，直接在本机上面打开这个应用系统即可)，它的默认端口为4444。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　一切准备好后，点击启动，即可得到如下图：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　你就可以得到系统运行时，你所需要的常用的性能值了。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">　六、监控内存及CPU等（jconsole）</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　最近逛论坛的时候，发现了一个比较好的监控内存CPU等的小工具，本着开源小工具多多益善的原则，记录一下。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　打开这个小工具的步骤很简单，如果你已经配置好了Jmeter运行的环境，那么你也就不用去做其他的配置，直接 点击：开始&#8212;&#8212;》运行&#8212;&#8212;》输入cmd&#8212;&#8212;》然后在出现的命令行界面输入&#8220;jconsole&#8221;即可弹出一个【java监视和管理控制台】，</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　将会弹出如下界面：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　这里我们选择本地进程，并点击一下sun.tools.jconsole.JConsole这一行，然后点击连接，就可以查看我们的内存和CPU的使用情况了。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　当然，我们要得到服务器的内存使用等信息，也可以选择 本地进程下面的远程进程，在文本框中输入我们需要测试的服务器的IP地址：端口，然后在下面输入用户名和密码，点击连接，看看会出现什么情况。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px; height: 21px; position: relative; width: 627.1875px;"></div></div></div><img src ="http://www.blogjava.net/qileilove/aggbug/406669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-22 12:19 <a href="http://www.blogjava.net/qileilove/archive/2013/11/22/406669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Jmeter测试java requst</title><link>http://www.blogjava.net/qileilove/archive/2013/11/21/406623.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 21 Nov 2013 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/21/406623.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406623.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/21/406623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406623.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">PS：</strong>不会使用<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">jmeter</strong></u></a>以及没有编程基础的不推荐看。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　个人一直认为使用Loadrunner或者Jmeter来测试<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">java</strong></u></a>&nbsp;方法都是费力不讨好的事情。java本身就有多线程机制，直接写个<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>类弄弄不就好了嘛。但是还是架不住很多人的需求，简单来讲一下如果使用Jmeter测试java request吧。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　首先本人准备测试的jar包已经准备好了叫Hello.jar，源代码如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">package com.test.webservice;</div><div style="word-break: break-all; margin: 10px 0px;">public class Hello</div><div style="word-break: break-all; margin: 10px 0px;">{</div><div style="word-break: break-all; margin: 10px 0px;">public String sayHello()</div><div style="word-break: break-all; margin: 10px 0px;">{</div><div style="word-break: break-all; margin: 10px 0px;">return "Hello";</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public String sayHelloToPerson(String s)</div><div style="word-break: break-all; margin: 10px 0px;">{</div><div style="word-break: break-all; margin: 10px 0px;">if(s == null || s.equals(""))</div><div style="word-break: break-all; margin: 10px 0px;">s = "nobody";</div><div style="word-break: break-all; margin: 10px 0px;">return (new StringBuilder()).append("Hello ").append(s).toString();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public int sum(int a,int b)</div><div style="word-break: break-all; margin: 10px 0px;">{</div><div style="word-break: break-all; margin: 10px 0px;">return a+b;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　要在Jmeter里面使用java request测试Hello.jar里面的方法，需要做一些<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">一、在eclipse（别的也可以）里面新建一个工程</strong>，把{Jmeter_home}\lib目录下的所有jar</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　（根据情况其实可以只用导入以下几个：ApacheJmeter_core.jar、Apache_Jmeter_java.jar、jorphan.jar、logkit-2.0.jar、avalon-framwork-4.1.4.jar）和被测的jar（包括被测试的方法需要用到的所有第三方jar）都导入到classpath。<br /><br /><br /><br /><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">二、编写测试类</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.config.Arguments;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;</div><div style="word-break: break-all; margin: 10px 0px;">import org.apache.jmeter.samplers.SampleResult;</div><div style="word-break: break-all; margin: 10px 0px;">import com.test.webservice.Hello;</div><div style="word-break: break-all; margin: 10px 0px;">public class perftestbbb extends AbstractJavaSamplerClient {</div><div style="word-break: break-all; margin: 10px 0px;">private String a;</div><div style="word-break: break-all; margin: 10px 0px;">private String b;</div><div style="word-break: break-all; margin: 10px 0px;">/** Holds the result data (shown as Response Data in the Tree display). */</div><div style="word-break: break-all; margin: 10px 0px;">private String resultData;</div><div style="word-break: break-all; margin: 10px 0px;">//这个方法是用来自定义java方法入参的。</div><div style="word-break: break-all; margin: 10px 0px;">//params.addArgument("num1","");表示入参名字叫num1，默认值为空。</div><div style="word-break: break-all; margin: 10px 0px;">public Arguments getDefaultParameters() {</div><div style="word-break: break-all; margin: 10px 0px;">Arguments params = new Arguments();</div><div style="word-break: break-all; margin: 10px 0px;">params.addArgument("num1","");</div><div style="word-break: break-all; margin: 10px 0px;">params.addArgument("num2","");</div><div style="word-break: break-all; margin: 10px 0px;">return params;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public void setupTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public SampleResult runTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">a = arg0.getParameter("num1");</div><div style="word-break: break-all; margin: 10px 0px;">b = arg0.getParameter("num2");</div><div style="word-break: break-all; margin: 10px 0px;">SampleResult sr = new SampleResult();</div><div style="word-break: break-all; margin: 10px 0px;">try {</div><div style="word-break: break-all; margin: 10px 0px;">sr.sampleStart();// jmeter 开始统计响应时间标记</div><div style="word-break: break-all; margin: 10px 0px;">Hello test = new Hello();</div><div style="word-break: break-all; margin: 10px 0px;">//通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。</div><div style="word-break: break-all; margin: 10px 0px;">resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer.parseInt(b)));</div><div style="word-break: break-all; margin: 10px 0px;">if (resultData != null &amp;&amp; resultData.length() &gt; 0) {</div><div style="word-break: break-all; margin: 10px 0px;">sr.setResponseData(resultData, null);</div><div style="word-break: break-all; margin: 10px 0px;">sr.setDataType(SampleResult.TEXT);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">// &nbsp; &nbsp; System.out.println(resultData);</div><div style="word-break: break-all; margin: 10px 0px;">sr.setSuccessful(true);</div><div style="word-break: break-all; margin: 10px 0px;">} catch (Throwable e) {</div><div style="word-break: break-all; margin: 10px 0px;">sr.setSuccessful(false);</div><div style="word-break: break-all; margin: 10px 0px;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px;">} finally {</div><div style="word-break: break-all; margin: 10px 0px;">sr.sampleEnd();// jmeter 结束统计响应时间标记</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">return sr;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public void teardownTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px;">// System.out.println(end);</div><div style="word-break: break-all; margin: 10px 0px;">// System.out.println("The cost is"+(end-start)/1000);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">//main只是为了调试用，最后打jar包的时候注释掉。</div><div style="word-break: break-all; margin: 10px 0px;">/* &nbsp; public static void main(String[] args) {</div><div style="word-break: break-all; margin: 10px 0px;">// TODO Auto-generated method stub</div><div style="word-break: break-all; margin: 10px 0px;">Arguments params = new Arguments();</div><div style="word-break: break-all; margin: 10px 0px;">params.addArgument("num1", "1");//设置参数，并赋予默认值1</div><div style="word-break: break-all; margin: 10px 0px;">params.addArgument("num2", "2");//设置参数，并赋予默认值2</div><div style="word-break: break-all; margin: 10px 0px;">JavaSamplerContext arg0 = new JavaSamplerContext(params);</div><div style="word-break: break-all; margin: 10px 0px;">perftestbbb test = new perftestbbb();</div><div style="word-break: break-all; margin: 10px 0px;">test.setupTest(arg0);</div><div style="word-break: break-all; margin: 10px 0px;">test.runTest(arg0);</div><div style="word-break: break-all; margin: 10px 0px;">test.teardownTest(arg0);</div><div style="word-break: break-all; margin: 10px 0px;">}*/</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　<strong style="word-break: break-all; line-height: normal !important;">三、将测试类打成jar包放入{Jmeter_home}\lib\ext目录下</strong>，同时将被测试的jar包及被测试的方法需要用到的所有第三方jar都放入{Jmeter_home}\lib目录下。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　<strong style="word-break: break-all; line-height: normal !important;">　四、重新打开Jmeter，添加sampler-java request，选择测试类。</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　其它的就参照常规做法即可。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　以上仅供学习和参考用，欢迎交流，勿喷！</div></div><img src ="http://www.blogjava.net/qileilove/aggbug/406623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-21 12:50 <a href="http://www.blogjava.net/qileilove/archive/2013/11/21/406623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmeter压力测试模拟并发</title><link>http://www.blogjava.net/qileilove/archive/2013/11/20/406563.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Wed, 20 Nov 2013 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/20/406563.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406563.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/20/406563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406563.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　jmeter下载地址：http://jmeter.apache.org/download_jmeter.cgi</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　JMeterPlugins（jmeter插件）：http://jmeter-plugins.org/downloads/all/</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　下面直接贴使用步骤：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43102" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_2013111210530117GH9.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　第二步：添加Sampler</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43103" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121053012tODP.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　第三步：配置HTTP请求</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43104" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><font color="#202859"><span style="line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121053013Ix3n.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></span></font><br /></a><a href="http://www.51testing.com/batch.download.php?aid=43104" target="_blank"><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">第四步：添加监听器</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43105" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121053014Uku4.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　最后配置线程组：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43106" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121053015CkjY.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　好了，现在按一下 ctrl+R 开始运行，并发发送请求了。</div></a></div><img src ="http://www.blogjava.net/qileilove/aggbug/406563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-20 11:15 <a href="http://www.blogjava.net/qileilove/archive/2013/11/20/406563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter入门(4)：Java Request实例</title><link>http://www.blogjava.net/qileilove/archive/2013/11/19/406520.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Tue, 19 Nov 2013 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/19/406520.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406520.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/19/406520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406520.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406520.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　目的：对<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">Java</strong></u></a>程序进行<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">一、核心步骤</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　1.创建一个Java工程；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　2.将<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">JMeter</strong></u></a>的lib目录下的jar文件添加进此工程的Build Path；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient，并重写：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">public Arguments getDefaultParameters()：设置可用参数及的默认值；</div><div style="word-break: break-all; margin: 10px 0px;">public void setupTest(JavaSamplerContext arg0)：每个线程测试前执行一次，做一些初始化<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>；</div><div style="word-break: break-all; margin: 10px 0px;">public SampleResult runTest(JavaSamplerContext arg0)：开始测试，从arg0参数可以获得参数值；</div><div style="word-break: break-all; margin: 10px 0px;">public void teardownTest(JavaSamplerContext arg0)：测试结束时调用；</div><div style="word-break: break-all; margin: 10px 0px;">4.Export为Runnable Jar File；</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　5.将此jar包放入JMETER_HOME\lib\ext目录；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　6.以管理员身份打开JMeter；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　7.创建线程组、Java Request、结果树，进行测试；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">二、实例</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　利用JMeter对服务进行<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>，服务为：将输入的两个参数通过IO存入文件；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　1、编写Java代码</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　服务：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">package&nbsp;<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">test</strong></u></a>;</div><div style="word-break: break-all; margin: 10px 0px;">import java.io.File;</div><div style="word-break: break-all; margin: 10px 0px;">import java.io.PrintWriter;</div><div style="word-break: break-all; margin: 10px 0px;">public class OutputService {</div><div style="word-break: break-all; margin: 10px 0px;">public static void output(String filename,int a, int b) throws Exception {</div><div style="word-break: break-all; margin: 10px 0px;">PrintWriter out = new PrintWriter(new File(filename));</div><div style="word-break: break-all; margin: 10px 0px;">out.write(a+":"+b);</div><div style="word-break: break-all; margin: 10px 0px;">out.close();</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　测试类：</div><div style="word-break: break-all; margin: 10px 0px; line-height: normal !important;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">package test;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">import org.apache.jmeter.config.Arguments;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">import org.apache.jmeter.samplers.SampleResult;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public class PerformenceTest implements JavaSamplerClient {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">private SampleResult results;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">private String a;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">private String b;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">private String filename;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">// 设置传入的参数，可以设置多个，已设置的参数会显示到Jmeter的参数列表中</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public Arguments getDefaultParameters() {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">Arguments params = new Arguments();</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">params.addArgument("filename", "0");//设置参数，并赋予默认值0</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">params.addArgument("a", "0");//设置参数，并赋予默认值0</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">params.addArgument("b", "0");//设置参数，并赋予默认值0</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">return params;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">// 初始化方法，实际运行时每个线程仅执行一次，在测试方法运行前执行</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public void setupTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">results = new SampleResult();</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">// 测试执行的循环体，根据线程数和循环次数的不同可执行多次</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">@Override</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public SampleResult runTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">b = arg0.getParameter("b"); // 获取在Jmeter中设置的参数值</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">a = arg0.getParameter("a"); // 获取在Jmeter中设置的参数值</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">filename = arg0.getParameter("filename"); // 获取在Jmeter中设置的参数值</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">results.sampleStart();// jmeter 开始统计响应时间标记</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">try {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">OutputService test = new OutputService();</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">test.output(filename,Integer.parseInt(a), Integer.parseInt(b));</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">results.setSuccessful(true);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">// 被测对象调用</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">} catch (Throwable e) {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">results.setSuccessful(false);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">e.printStackTrace();</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">} finally {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">results.sampleEnd();// jmeter 结束统计响应时间标记</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">return results;</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">// 结束方法，实际运行时每个线程仅执行一次，在测试方法运行结束后执行</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public void teardownTest(JavaSamplerContext arg0) {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">public static void main(String[] args) {</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">// TODO Auto-generated method stub</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">Arguments params = new Arguments();</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">params.addArgument("a", "0");//设置参数，并赋予默认值0</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">params.addArgument("b", "0");//设置参数，并赋予默认值0</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">JavaSamplerContext arg0 = new JavaSamplerContext(params);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">PerformenceTest test = new PerformenceTest();</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">test.setupTest(arg0);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">test.runTest(arg0);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">test.teardownTest(arg0);</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">}</div><div style="word-break: break-all; margin: 10px 0px; background-color: #ffffff;">Export 为 Runnable Jar File；</div></td></tr></tbody></table><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><strong style="word-break: break-all; line-height: normal !important;">2、设置JMeter</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　以管理员身份打开JMeter，并创建Java Request后,结构如下图所示：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43119" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856111DKUg.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　在Java请求中发现了自己新建的测试类：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43120" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856112AaZh.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　我们在JMeter中发现参数有三个：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43121" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856113my4c.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　我们在响应的数值中填入：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43122" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856114SQ0e.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　大家一定很奇怪，怎么会有一些看不懂的东西，这是JMeter提供的函数，我们可以在<a href="http://www.51testing.com/batch.download.php?aid=43123" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856115caKU.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　因为我们要做的是性能测试，因此我们需要开多个线程并发测试，因此随机数很重要；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　常用的函数为：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　(1)_Random生成随机整数；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　(2)_RandomString生成随机字符串；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　在线程组中设置并发线程数为10000，保存后即可运行；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　图形结果如下所示：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43124" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856116N83a.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">聚合报告：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43125" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856117shP5.thumb.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　表格查看结果：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43126" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856118Q1fq.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　结果成功，成功生成了接近10000个文件：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43127" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121856119i40t.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　3.期间遇到的问题</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　3.1 Export为Jar File导致Java Request的类名称无法找到；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　3.2 JMeter java.lang.OutOfMemoryError: PermGen space问题：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　在JMeter.bat 中修改：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　set HEAP=-Xms512m -Xmx1024m</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　set TENURING=-XX:MaxTenuringThreshold=2</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　set PERM=-XX:PermSize=256m -XX:MaxPermSize=512m</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　3.3 JMeter需要以管理员身份打开，否则会出现：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43128" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_20131112185611101fqv.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">相关文章：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/?action-viewnews-itemid-854180" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;">JMeter入门(3)：录制JMeter脚本</a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px; height: 21px; position: relative; width: 627.1875px;"></div></div></div><img src ="http://www.blogjava.net/qileilove/aggbug/406520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-19 11:09 <a href="http://www.blogjava.net/qileilove/archive/2013/11/19/406520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter入门(3)：录制JMeter脚本</title><link>http://www.blogjava.net/qileilove/archive/2013/11/18/406469.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Mon, 18 Nov 2013 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/18/406469.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406469.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/18/406469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406469.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　一般自己手动的设置JMeter会比较麻烦，如果一边操作页面，提交表单，一边能够自动生成JMeter的脚本，则非常方便；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　BadBoy：录制JMeter脚本；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　Donwload URL：http://www.badboy.com.au/download/add</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　BadBoy界面如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43116" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121837221THeD.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　我们可以在地址输入栏中输入你要访问的页面，比如www.baidu.com,然后查询xiazdong后，点击：停止录制；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　然后点击"File --&gt; Export to JMeter"即可生成JMeter脚本；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　打开后生成如下结构：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43117" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121837222nKbx.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><br /><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　我们只需要运行即可模拟刚才查询"xiazdong"的过程，当然我们可以同时开启1000个线程模拟1000个用户在查询xiazdong；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　图形结果效果如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43118" target="_blank" style="word-break: break-all; color: #45a2fc; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_20131112183722305nL.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">相关文章：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/?action-viewnews-itemid-854179" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;">JMeter入门(2)：一个简单实例</a></div></a></div><img src ="http://www.blogjava.net/qileilove/aggbug/406469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-18 13:50 <a href="http://www.blogjava.net/qileilove/archive/2013/11/18/406469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>badboy + jmeter并发性能测试</title><link>http://www.blogjava.net/qileilove/archive/2013/11/15/406367.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 15 Nov 2013 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/15/406367.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406367.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/15/406367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406367.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">今天下班时公司安排了一个同事来对项目做集群<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>，怀着对性能测试的好奇心，下班后没有着急离开，而是等待</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　那位同事的到来，然后在旁边<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">学习</strong></u></a>了下如何使用Badboy和<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">jmeter</strong></u></a>做性能测试。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">1. 软件介绍</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">　　1.1 Badboy</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　Badboy，第一眼看见这个单词，以为是坏孩子的意思，后来一想，它是专门用来给项目找茬来的，取名为Badboy</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　倒是平添了几分可爱，呵呵。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　Badboy是用来录制操作过程的，它录制的结果是被jmeter做并发测试的素材使用。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　Badboy首页：http://www.badboy.com.au/</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　<strong style="word-break: break-all;">1.2 Apache jmeter</strong></div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　Jmeter是Apache下的一个完全基于JAVA开发的测试工具， 可以很方便的用来进行并发测试。</div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　Jmeter首页：http://jakarta.apache.org/jmeter/</div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;"><strong style="word-break: break-all;">　　2. 使用过程</strong></div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;"><strong style="word-break: break-all;">　　2.1 录制操作</strong></div></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　（1）打开badboy进行登录的录制<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>。（我们来看下163邮箱的登录并发性能如何，嘿嘿。）</div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;"><a href="http://www.51testing.com/batch.download.php?aid=43085" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311111303591KDno.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: normal !important; margin: 10px 0px;">　　（2）点击登录，然后结束录制，将录制的过程保存下来，保存成jmeter能够使用的格式，Script.jmx：</div></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43086" target="_blank" style="word-break: break-all; color: #45a2fc; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311111303592dDXE.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><br /><br /><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><strong style="word-break: break-all; line-height: normal !important;">　2.2 测试并发</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　（1）运行Apache Jmeter，文件&#224;打开 ，然后选择刚才保存的录制文件 Script.jmx</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　（2）设置模拟并发的线程数量</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43087" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311111303593ulmD.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　（3）添加感兴趣的监听类型</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43088" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311111303594FncE.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　　（4）点击 运行&#224;启动，开始执行并发登录163邮箱操作。</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43089" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311111303595SuVT.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><br /><br /><strong style="word-break: break-all; color: #333333; font-size: 12px;">2.3 分析结果</strong><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43090" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311111303596yBDD.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43091" target="_blank" style="word-break: break-all; color: #45a2fc; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311111303597cM5j.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div></a></div></a></div><img src ="http://www.blogjava.net/qileilove/aggbug/406367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-15 11:14 <a href="http://www.blogjava.net/qileilove/archive/2013/11/15/406367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter入门(2)：一个简单实例</title><link>http://www.blogjava.net/qileilove/archive/2013/11/15/406363.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Fri, 15 Nov 2013 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/15/406363.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406363.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/15/406363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406363.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">　场景描述：</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　自己建立一个服务器端，接受参数：name和age，并将这些数据保存到<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">数据库</strong></u></a>中；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　http://localhost:8080/Server/SaveServlet?name=xxx&amp;age=xxx</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　我们通过JMeter对其进行<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">压力测试</strong></u></a>；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　目标：开1000个线程，每个线程循环1次，全部操作在3秒内完成；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　结构如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43112" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121830571DLVC.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43113" target="_blank" style="word-break: break-all; color: #45a2fc; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121830572g2wt.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /><br /><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">　结果如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43114" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121830573QCZ9.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43115" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121830574s788.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;">相关文章：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-size: 12px;"><a href="http://www.51testing.com/index.php?action-viewnews-itemid-854178-php-1" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;">JMeter入门(1)：JMeter总体介绍及组件介绍</a></div></a></div><img src ="http://www.blogjava.net/qileilove/aggbug/406363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-15 11:13 <a href="http://www.blogjava.net/qileilove/archive/2013/11/15/406363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter入门(1)：JMeter总体介绍及组件介绍</title><link>http://www.blogjava.net/qileilove/archive/2013/11/14/406327.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Thu, 14 Nov 2013 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/14/406327.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406327.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/14/406327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406327.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406327.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><strong style="word-break: break-all; line-height: normal !important;">一、JMeter概述</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　JMeter就是一个<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;"></strong></u></a><u style="word-break: break-all; line-height: normal !important;"><strong style="word-break: break-all;"><a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>工具</strong></u>，相比于<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">LoadRunner</strong></u></a>等测试工具，此工具免费，且比较好用，但是前提当然是安装Java环境；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　JMeter可以做</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　(1)<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">压力测试</strong></u></a>及<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">性能测试</strong></u></a>；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　(2)<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">数据库</strong></u></a>测试；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　(3)Java程序的测试；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　(4)HTTP及FTP测试；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　(5)Web Service测试；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　等等；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　和JMeter一起使用的可能是JDK自带的测试工具JConsole，位于JDK\bin\JConsole，此工具主要观察堆、JVM、CPU的使用情况，界面如下：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><a href="http://www.51testing.com/batch.download.php?aid=43110" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_201311121827401Cqty.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　<strong style="word-break: break-all; line-height: normal !important;">二、JMeter安装</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　解压缩即可；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　JMeter插件：http://code.google.com/p/jmeter-plugins/downloads/detail?name=JMeterPlugins-0.5.3.zip</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">　　下载后将jar文件放到JMETER_HOME\lib\ext目录；<br /><br /><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><strong style="word-break: break-all; line-height: normal !important;">　三、JMeter常用组件</strong></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　测试计划：整个测试计划；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　线程组：所有的任务都是基于线程组，开通多少个线程就代表有多少个并发用户；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Ramp-Up Period：在这么多时间内完成全部测试，比如开了2个线程，而Ramp-Up Period为3，则每个线程的间隔为1.5秒；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　Sampler：所有的测试任务都是Sampler，即任何测试任务的类别都是Sampler，比如HTTP请求、JDBC请求、FTP请求；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　断言：对Sampler的测试进行判断是否正确；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　监听器：对Sampler的请求结果进行统计、显示；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　常用的层次结构为：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"><a href="http://www.51testing.com/batch.download.php?aid=43111" target="_blank" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><img src="http://www.51testing.com/attachments/2013/11/14982672_2013111218274022drx.thumb.jpg" border="0" style="word-break: break-all; list-style: none outside none; margin: 0px; padding: 0px; border: none; max-width: 500px;"  alt="" /></a></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　常用的组件有：</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　HTTP请求：模拟HTTP请求；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　查看结果树：对于每个请求，可以查看HTTP请求和HTTP响应；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　图形结果：可以图形显示吞吐量、响应时间等；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　聚合报告：总体的吞吐量、响应时间；</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　1、Label： 定义的HTTP请求名称</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　2、Samples： 表示这次测试中一共发出了多少个请求</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　3、Average： 访问页面的平均响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　4、Min: 访问页面的最小响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　5、Max: 访问页面的最大响应时间</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　6、Error%： 错误的请求的数量/请求的总数</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　7、Throughput：每秒完成的请求数</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;">　　8、KB/Sec： 每秒从服务器端接收到的数据量</div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px;"></div><div style="word-break: break-all; line-height: 21.59375px; margin: 10px 0px; font-size: 12px; height: 21px; position: relative; width: 627.1875px;"></div></div><img src ="http://www.blogjava.net/qileilove/aggbug/406327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-14 10:33 <a href="http://www.blogjava.net/qileilove/archive/2013/11/14/406327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit单元测试实践：测试工具类和方法</title><link>http://www.blogjava.net/qileilove/archive/2013/11/13/406284.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Wed, 13 Nov 2013 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/13/406284.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406284.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/13/406284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406284.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">工作</strong></u></a>中，为了提高Web开发的质量和效率，近期又为了保证自己的工具类等一系列可复用组件的质量，我煞费苦心地开始认真<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">学习</strong></u></a>和撰写<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">单元测试</strong></u></a>用例。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　我现在已经厌倦了Debug程序，更讨厌Debug Web程序，太浪费时间了。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　最近，线上的一个BM项目，出了个bug。浮点数相减，没有判断null，搞的我加班到9：30。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　苦逼的码农啊。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　下面，分享我的一个工具类和对应的单元测试用例。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　有不对的地方，还望能告知我。大家共同进步。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 判断Collection(List和Set),Map等集合类型是否为空，是否含有空值。</div><div style="word-break: break-all; margin: 10px 0px;">* 判断String是否为空，参考ApacheCommonsLang-StringUtils。</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @author leiwen</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public class EmptyUtils {</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 判断Collection(List和Set) 是否为空</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @param collection</div><div style="word-break: break-all; margin: 10px 0px;">* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List或Set类型的集合</div><div style="word-break: break-all; margin: 10px 0px;">* @return 如果collection是 null或size=0，返回true；否则，返回false。</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public static boolean isEmpty(Collection&lt;?&gt; collection) {</div><div style="word-break: break-all; margin: 10px 0px;">return collection == null || collection.size() == 0;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 判断map是否为空</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @param map</div><div style="word-break: break-all; margin: 10px 0px;">* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;键值对数据类型</div><div style="word-break: break-all; margin: 10px 0px;">* @return 如果map是 null或size=0，返回true；否则，返回false。</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public static boolean isEmpty(Map&lt;?, ?&gt; map) {</div><div style="word-break: break-all; margin: 10px 0px;">return map == null || map.size() == 0;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 判断一个数组是否为空。</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @param array</div><div style="word-break: break-all; margin: 10px 0px;">* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;对象数组</div><div style="word-break: break-all; margin: 10px 0px;">* @return 如果数组为null或者数组元素个数为0，返回true；否则，返回false。</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public static boolean isEmpty(Object[] array) {</div><div style="word-break: break-all; margin: 10px 0px;">return array == null || array.length == 0;</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 判断Collection(List和Set) 不为空</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @param collection</div><div style="word-break: break-all; margin: 10px 0px;">* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List或Set类型的集合</div><div style="word-break: break-all; margin: 10px 0px;">* @return 如果collection不等于null且size&gt;0，返回true；否则，返回false。</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public static boolean notEmpty(Collection&lt;?&gt; collection) {</div><div style="word-break: break-all; margin: 10px 0px;">return !isEmpty(collection);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 判断map不为空</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @param map</div><div style="word-break: break-all; margin: 10px 0px;">* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;键值对数据类型</div><div style="word-break: break-all; margin: 10px 0px;">* @return 如果map不为 null且size&gt;0，返回true；否则，返回false。</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public static boolean notEmpty(Map&lt;?, ?&gt; map) {</div><div style="word-break: break-all; margin: 10px 0px;">return !isEmpty(map);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* 判断一个数组不为空。</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @param array</div><div style="word-break: break-all; margin: 10px 0px;">* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;对象数组</div><div style="word-break: break-all; margin: 10px 0px;">* @return 如果数组为null或者数组元素个数为0，返回false；否则，返回true。</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public static boolean notEmpty(Object[] array) {</div><div style="word-break: break-all; margin: 10px 0px;">return !isEmpty(array);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">package cn.fansunion.webcommon.platform;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.ArrayList;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.Arrays;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.HashMap;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.HashSet;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.List;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.Map;</div><div style="word-break: break-all; margin: 10px 0px;">import java.util.Set;</div><div style="word-break: break-all; margin: 10px 0px;">import junit.framework.TestCase;</div><div style="word-break: break-all; margin: 10px 0px;">import org.junit.Test;</div><div style="word-break: break-all; margin: 10px 0px;">import cn.fansunion.common.util.EmptyUtils;</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">*</div><div style="word-break: break-all; margin: 10px 0px;">* @author leiwen</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">public class EmptyUtilsTest extends TestCase {</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public static void testCollectionIsEmpty() {</div><div style="word-break: break-all; margin: 10px 0px;">List&lt;Integer&gt; list = Arrays.asList(1, 2, 3);</div><div style="word-break: break-all; margin: 10px 0px;">boolean listWithPositiveSize = EmptyUtils.isEmpty(list);</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(listWithPositiveSize);</div><div style="word-break: break-all; margin: 10px 0px;">List&lt;Integer&gt; emptyList = new ArrayList&lt;Integer&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">boolean listWithZeroSize = EmptyUtils.isEmpty(emptyList);</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(listWithZeroSize);</div><div style="word-break: break-all; margin: 10px 0px;">List&lt;Integer&gt; nullList = null;</div><div style="word-break: break-all; margin: 10px 0px;">boolean nullEmpty = EmptyUtils.isEmpty(nullList);</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(nullEmpty);</div><div style="word-break: break-all; margin: 10px 0px;">Set&lt;Integer&gt; set = new HashSet&lt;Integer&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">set.add(100);</div><div style="word-break: break-all; margin: 10px 0px;">boolean setWithPositiveSize = EmptyUtils.isEmpty(set);</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(setWithPositiveSize);</div><div style="word-break: break-all; margin: 10px 0px;">Set&lt;Integer&gt; nullSet = null;</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.isEmpty(nullSet));</div><div style="word-break: break-all; margin: 10px 0px;">Set&lt;Integer&gt; emptySet = new HashSet&lt;Integer&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.isEmpty(emptySet));</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public static void testMapIsEmpty() {</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">map.put("mapTest", "mapTestValue");</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.isEmpty(map));</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String, Object&gt; nullEmpty = null;</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.isEmpty(nullEmpty));</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String, Object&gt; emptyMap = new HashMap&lt;String, Object&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.isEmpty(emptyMap));</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public static void testObjectArrayIsEmpty() {</div><div style="word-break: break-all; margin: 10px 0px;">Integer[] array = { 1, 2, 3 };</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.isEmpty(array));</div><div style="word-break: break-all; margin: 10px 0px;">Integer[] nullArray = null;</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.isEmpty(nullArray));</div><div style="word-break: break-all; margin: 10px 0px;">Integer[] emptyArray = {};</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.isEmpty(emptyArray));</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public static void testCollectionNotEmpty() {</div><div style="word-break: break-all; margin: 10px 0px;">List&lt;Integer&gt; list = Arrays.asList(1, 2, 3);</div><div style="word-break: break-all; margin: 10px 0px;">boolean listWithPositiveSize = EmptyUtils.notEmpty(list);</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(listWithPositiveSize);</div><div style="word-break: break-all; margin: 10px 0px;">List&lt;Integer&gt; emptyList = new ArrayList&lt;Integer&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">boolean listWithZeroSize = EmptyUtils.notEmpty(emptyList);</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(listWithZeroSize);</div><div style="word-break: break-all; margin: 10px 0px;">List&lt;Integer&gt; nullList = null;</div><div style="word-break: break-all; margin: 10px 0px;">boolean nullEmpty = EmptyUtils.notEmpty(nullList);</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(nullEmpty);</div><div style="word-break: break-all; margin: 10px 0px;">Set&lt;Integer&gt; set = new HashSet&lt;Integer&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">set.add(100);</div><div style="word-break: break-all; margin: 10px 0px;">boolean setWithPositiveSize = EmptyUtils.notEmpty(set);</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(setWithPositiveSize);</div><div style="word-break: break-all; margin: 10px 0px;">Set&lt;Integer&gt; nullSet = null;</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.notEmpty(nullSet));</div><div style="word-break: break-all; margin: 10px 0px;">Set&lt;Integer&gt; emptySet = new HashSet&lt;Integer&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.notEmpty(emptySet));</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public static void testMapNotEmpty() {</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">map.put("mapTest", "mapTestValue");</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.notEmpty(map));</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String, Object&gt; nullEmpty = null;</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.notEmpty(nullEmpty));</div><div style="word-break: break-all; margin: 10px 0px;">Map&lt;String, Object&gt; emptyMap = new HashMap&lt;String, Object&gt;();</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.notEmpty(emptyMap));</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Test</div><div style="word-break: break-all; margin: 10px 0px;">public static void testObjectArrayNotEmpty() {</div><div style="word-break: break-all; margin: 10px 0px;">Integer[] array = { 1, 2, 3 };</div><div style="word-break: break-all; margin: 10px 0px;">assertTrue(EmptyUtils.notEmpty(array));</div><div style="word-break: break-all; margin: 10px 0px;">Integer[] nullArray = null;</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.notEmpty(nullArray));</div><div style="word-break: break-all; margin: 10px 0px;">Integer[] emptyArray = {};</div><div style="word-break: break-all; margin: 10px 0px;">assertFalse(EmptyUtils.notEmpty(emptyArray));</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div></td></tr></tbody></table></div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;"></div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px; height: 21px; position: relative; width: 627.1875px;"></div></div><img src ="http://www.blogjava.net/qileilove/aggbug/406284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-13 10:25 <a href="http://www.blogjava.net/qileilove/archive/2013/11/13/406284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程测试工具groboutils的使用</title><link>http://www.blogjava.net/qileilove/archive/2013/11/13/406282.html</link><dc:creator>顺其自然EVO</dc:creator><author>顺其自然EVO</author><pubDate>Wed, 13 Nov 2013 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/qileilove/archive/2013/11/13/406282.html</guid><wfw:comment>http://www.blogjava.net/qileilove/comments/406282.html</wfw:comment><comments>http://www.blogjava.net/qileilove/archive/2013/11/13/406282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qileilove/comments/commentRss/406282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qileilove/services/trackbacks/406282.html</trackback:ping><description><![CDATA[<div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　一直使用<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">junit</strong></u></a>做为服务<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">测试</strong></u></a>框架，感觉不错。最近有人反映在高并发的情况下，存在服务调不到。无奈再次打开<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none; line-height: normal !important;"><u style="word-break: break-all;"><strong style="word-break: break-all;">单元测试</strong></u></a>模拟高并发的情况，却发现junit不支持并发测试</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　引入groboutils jar包，其实我主要使用MultiThreadedTestRunner类和TestRunnable类。</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　原有的junit框架不做改变，导入GroboTestingJUnit-1.2.1-core.jar包</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;">　　代码如下</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 11.818181991577148px; background-color: #ffffff;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">public class FaultServiceTest extends TestCase {</div><div style="word-break: break-all; margin: 10px 0px;">/**</div><div style="word-break: break-all; margin: 10px 0px;">* @param args</div><div style="word-break: break-all; margin: 10px 0px;">* @throws FaultException</div><div style="word-break: break-all; margin: 10px 0px;">* @throws ExpParamNotFoundException</div><div style="word-break: break-all; margin: 10px 0px;">* @throws ParseException</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">private IFaultService faultService;</div><div style="word-break: break-all; margin: 10px 0px;">private static final int NUM_THREAD = 100; // 测试线程总数</div><div style="word-break: break-all; margin: 10px 0px;">public FaultServiceTest() {</div><div style="word-break: break-all; margin: 10px 0px;">super();</div><div style="word-break: break-all; margin: 10px 0px;">IInitService initService = (IInitService) CustomBeanFactory</div><div style="word-break: break-all; margin: 10px 0px;">.getBean("initService");</div><div style="word-break: break-all; margin: 10px 0px;">initService.initSiteDatabase();</div><div style="word-break: break-all; margin: 10px 0px;">this.faultService = (IFaultService) CustomBeanFactory</div><div style="word-break: break-all; margin: 10px 0px;">.getBean("faultService");</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public FaultServiceTest(String name) {</div><div style="word-break: break-all; margin: 10px 0px;">super(name);</div><div style="word-break: break-all; margin: 10px 0px;">IInitService initService = (IInitService) CustomBeanFactory</div><div style="word-break: break-all; margin: 10px 0px;">.getBean("initService");</div><div style="word-break: break-all; margin: 10px 0px;">initService.initSiteDatabase();</div><div style="word-break: break-all; margin: 10px 0px;">this.faultService = (IFaultService) CustomBeanFactory</div><div style="word-break: break-all; margin: 10px 0px;">.getBean("faultService");</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">// 高并发测试</div><div style="word-break: break-all; margin: 10px 0px;">public void testGetEquipEventAlertListByPage() throws Throwable {</div><div style="word-break: break-all; margin: 10px 0px;">EquipmentQueryBean equipmentQueryBean = new EquipmentQueryBean();</div><div style="word-break: break-all; margin: 10px 0px;">// 生成所有测试线程</div><div style="word-break: break-all; margin: 10px 0px;">TestRunnable[]&nbsp;<a href="" target="_self" style="word-break: break-all; color: #202859; text-decoration: none;"><u style="word-break: break-all;"><strong style="word-break: break-all;">test</strong></u></a>&nbsp;= new TestRunnable[NUM_THREAD];</div><div style="word-break: break-all; margin: 10px 0px;">long start = System.currentTimeMillis();</div><div style="word-break: break-all; margin: 10px 0px;">for (int i = 0; i &lt; test.length; i++) {</div><div style="word-break: break-all; margin: 10px 0px;">test[i] = new FaultServiceThread(faultService, equipmentQueryBean);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">// 生成测试线程运行器</div><div style="word-break: break-all; margin: 10px 0px;">MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(test);</div><div style="word-break: break-all; margin: 10px 0px;">// 运行测试线程</div><div style="word-break: break-all; margin: 10px 0px;">mttr.runTestRunnables();</div><div style="word-break: break-all; margin: 10px 0px;">long used = System.currentTimeMillis() - start;</div><div style="word-break: break-all; margin: 10px 0px;">System.out.printf("%s 调用花费 %s milli-seconds.\n", NUM_THREAD, used);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">public static Test suite() {</div><div style="word-break: break-all; margin: 10px 0px;">TestSuite test = new TestSuite("HealthService接口类测试");</div><div style="word-break: break-all; margin: 10px 0px;">test.addTest(new FaultServiceTest("testGetEquipEventAlertListByPage"));</div><div style="word-break: break-all; margin: 10px 0px;">return test;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">/*</div><div style="word-break: break-all; margin: 10px 0px;">* 测试线程类定义</div><div style="word-break: break-all; margin: 10px 0px;">*/</div><div style="word-break: break-all; margin: 10px 0px;">private static class FaultServiceThread extends TestRunnable {</div><div style="word-break: break-all; margin: 10px 0px;">private IFaultService faultService;</div><div style="word-break: break-all; margin: 10px 0px;">private EquipmentQueryBean equipmentQueryBean;</div><div style="word-break: break-all; margin: 10px 0px;">public FaultServiceThread(IFaultService faultService,</div><div style="word-break: break-all; margin: 10px 0px;">EquipmentQueryBean equipmentQueryBean) {</div><div style="word-break: break-all; margin: 10px 0px;">super();</div><div style="word-break: break-all; margin: 10px 0px;">this.faultService = faultService;</div><div style="word-break: break-all; margin: 10px 0px;">this.equipmentQueryBean = equipmentQueryBean;</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">@Override</div><div style="word-break: break-all; margin: 10px 0px;">public void runTest() throws Throwable {</div><div style="word-break: break-all; margin: 10px 0px;">faultService.getEquipEventAlertListByPage(equipmentQueryBean);</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">}</div><div style="word-break: break-all; margin: 10px 0px;">｝</div></td></tr></tbody></table><br /><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;">　运行代码，并发数开到100个后观察运行时间发现运行运行时间到了12秒了，看来问题出在DAO。需要进行sql代码优化了</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;">　　导入的测试包有：</div><div style="word-break: break-all; line-height: 21.59090805053711px; margin: 10px 0px; font-size: 11.818181991577148px;"><table align="center" style="word-break: break-all; border-style: solid; border-color: #999999; width: 612.7272338867188px; background-color: #dddddd; font-size: 12px;"><tbody style="word-break: break-all;"><tr style="word-break: break-all;"><td style="word-break: break-all;"><div style="word-break: break-all; margin: 10px 0px;">import net.sourceforge.groboutils.junit.v1.MultiThreadedTestRunner;</div><div style="word-break: break-all; margin: 10px 0px;">import net.sourceforge.groboutils.junit.v1.TestRunnable;</div><div style="word-break: break-all; margin: 10px 0px;">import junit.framework.Test;</div><div style="word-break: break-all; margin: 10px 0px;">import junit.framework.TestCase;</div><div style="word-break: break-all; margin: 10px 0px;">import junit.framework.TestSuite;</div></td></tr></tbody></table></div><br /></div><img src ="http://www.blogjava.net/qileilove/aggbug/406282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qileilove/" target="_blank">顺其自然EVO</a> 2013-11-13 10:19 <a href="http://www.blogjava.net/qileilove/archive/2013/11/13/406282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>