- 浏览: 2702 次
- 性别:
- 来自: 上海/柏林
文章分类
最新评论
为了从grinder繁琐的script里解脱出来,决定压力测试平台改用JMeter。
以测试一个seam login功能为例。基本步骤如下
1. 自动为threadgroup生成request sampler
首先在workbench中加入http proxy server并开启,改browser设置通过http proxy server并访问测试网站的登入页面,之后输入测试账号登入。这时JMeter自动抓取requests,包括对其他resource例如图片,js等的request.这里我们只关心两个requests.一个是开启页面的,第二个是登入时的。所以保留这两个requests,其他统统删除。这个也可以通过在http proxy server中加exlusive filter来完成。
2.自动获取viewId
JSF让人火大的一个地方就是它隐藏在代码中的viewId, 在JSF1.2里,request中viewId不对立即会引发view can not be restored exception。而viewId在session里又是时常改变的。解决的方法是创造一个extractor,在每次request后parse 相应,分析出里面的viewId,具体实现可参考http://rfeest.blogspot.com/2008/02/jmeter-und-jsf.html
3.增加cookie manager
在threadgroup里添加http cookie manager来保持sessionId
这里是完整的testplan,因为request sampler是用proxy产生的,所以非常的冗长
<?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="2.1"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Testplan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="Benutzer definierte Variablen" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> </TestPlan> <hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread-Gruppe" enabled="true"> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Schleifen-Controller (Loop Controller)" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <stringProp name="LoopController.loops">1</stringProp> </elementProp> <stringProp name="ThreadGroup.num_threads">1</stringProp> <stringProp name="ThreadGroup.ramp_time">1</stringProp> <longProp name="ThreadGroup.start_time">1234863597000</longProp> <longProp name="ThreadGroup.end_time">1234863597000</longProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> </ThreadGroup> <hashTree> <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true"> <collectionProp name="CookieManager.cookies"/> <boolProp name="CookieManager.clearEachIteration">false</boolProp> </CookieManager> <hashTree/> <OnceOnlyController guiclass="OnceOnlyControllerGui" testclass="OnceOnlyController" testname="Once Only Controller" enabled="true"/> <hashTree> <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="/sd4/home.seam" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">ws029</stringProp> <stringProp name="HTTPSampler.port">8080</stringProp> <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.contentEncoding">ISO-8859-1</stringProp> <stringProp name="HTTPSampler.path">/sd4/home.seam</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.FILE_NAME"></stringProp> <stringProp name="HTTPSampler.FILE_FIELD"></stringProp> <stringProp name="HTTPSampler.mimetype"></stringProp> <stringProp name="HTTPSampler.monitor">false</stringProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> </HTTPSampler> <hashTree> <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="Browser-derived headers" enabled="true"> <collectionProp name="HeaderManager.headers"> <elementProp name="Host" elementType="Header"> <stringProp name="Header.name">Host</stringProp> <stringProp name="Header.value">ws029:8080</stringProp> </elementProp> <elementProp name="Accept-Language" elementType="Header"> <stringProp name="Header.name">Accept-Language</stringProp> <stringProp name="Header.value">de</stringProp> </elementProp> <elementProp name="Accept" elementType="Header"> <stringProp name="Header.name">Accept</stringProp> <stringProp name="Header.value">*/*</stringProp> </elementProp> <elementProp name="User-Agent" elementType="Header"> <stringProp name="Header.name">User-Agent</stringProp> <stringProp name="Header.value">Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)</stringProp> </elementProp> <elementProp name="Accept-Encoding" elementType="Header"> <stringProp name="Header.name">Accept-Encoding</stringProp> <stringProp name="Header.value">gzip, deflate</stringProp> </elementProp> <elementProp name="UA-CPU" elementType="Header"> <stringProp name="Header.name">UA-CPU</stringProp> <stringProp name="Header.value">x86</stringProp> </elementProp> </collectionProp> </HeaderManager> <hashTree/> </hashTree> <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="/sd4/home.seam" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="notloggedin:j_id113" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">true</boolProp> <stringProp name="Argument.name">notloggedin:j_id113</stringProp> <stringProp name="Argument.value">notloggedin:j_id113</stringProp> <stringProp name="Argument.metadata">=</stringProp> <boolProp name="HTTPArgument.use_equals">true</boolProp> </elementProp> <elementProp name="notloggedin:j_id113:j_id117" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">true</boolProp> <stringProp name="Argument.name">notloggedin:j_id113:j_id117</stringProp> <stringProp name="Argument.value">gu</stringProp> <stringProp name="Argument.metadata">=</stringProp> <boolProp name="HTTPArgument.use_equals">true</boolProp> </elementProp> <elementProp name="notloggedin:j_id113:j_id119" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">true</boolProp> <stringProp name="Argument.name">notloggedin:j_id113:j_id119</stringProp> <stringProp name="Argument.value">test</stringProp> <stringProp name="Argument.metadata">=</stringProp> <boolProp name="HTTPArgument.use_equals">true</boolProp> </elementProp> <elementProp name="notloggedin:j_id113:j_id121" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">true</boolProp> <stringProp name="Argument.name">notloggedin:j_id113:j_id121</stringProp> <stringProp name="Argument.value">Anmelden</stringProp> <stringProp name="Argument.metadata">=</stringProp> <boolProp name="HTTPArgument.use_equals">true</boolProp> </elementProp> <elementProp name="javax.faces.ViewState" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">false</boolProp> <stringProp name="Argument.name">javax.faces.ViewState</stringProp> <stringProp name="Argument.value">${jsfViewState}</stringProp> <stringProp name="Argument.metadata">=</stringProp> <boolProp name="HTTPArgument.use_equals">true</boolProp> </elementProp> </collectionProp> </elementProp> <stringProp name="HTTPSampler.domain">ws029</stringProp> <stringProp name="HTTPSampler.port">8080</stringProp> <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.contentEncoding">ISO-8859-1</stringProp> <stringProp name="HTTPSampler.path">/sd4/home.seam</stringProp> <stringProp name="HTTPSampler.method">POST</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.FILE_NAME"></stringProp> <stringProp name="HTTPSampler.FILE_FIELD"></stringProp> <stringProp name="HTTPSampler.mimetype"></stringProp> <stringProp name="HTTPSampler.monitor">false</stringProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> </HTTPSampler> <hashTree> <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="Browser-derived headers" enabled="true"> <collectionProp name="HeaderManager.headers"> <elementProp name="Content-Type" elementType="Header"> <stringProp name="Header.name">Content-Type</stringProp> <stringProp name="Header.value">application/x-www-form-urlencoded</stringProp> </elementProp> <elementProp name="Host" elementType="Header"> <stringProp name="Header.name">Host</stringProp> <stringProp name="Header.value">ws029:8080</stringProp> </elementProp> <elementProp name="Accept-Language" elementType="Header"> <stringProp name="Header.name">Accept-Language</stringProp> <stringProp name="Header.value">de</stringProp> </elementProp> <elementProp name="Accept" elementType="Header"> <stringProp name="Header.name">Accept</stringProp> <stringProp name="Header.value">image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-silverlight, */*</stringProp> </elementProp> <elementProp name="User-Agent" elementType="Header"> <stringProp name="Header.name">User-Agent</stringProp> <stringProp name="Header.value">Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)</stringProp> </elementProp> <elementProp name="Accept-Encoding" elementType="Header"> <stringProp name="Header.name">Accept-Encoding</stringProp> <stringProp name="Header.value">gzip, deflate</stringProp> </elementProp> <elementProp name="Referer" elementType="Header"> <stringProp name="Header.name">Referer</stringProp> <stringProp name="Header.value">http://ws029:8080/sd4/home.seam</stringProp> </elementProp> <elementProp name="UA-CPU" elementType="Header"> <stringProp name="Header.name">UA-CPU</stringProp> <stringProp name="Header.value">x86</stringProp> </elementProp> <elementProp name="Pragma" elementType="Header"> <stringProp name="Header.name">Pragma</stringProp> <stringProp name="Header.value">no-cache</stringProp> </elementProp> </collectionProp> </HeaderManager> <hashTree/> </hashTree> </hashTree> <ResultCollector guiclass="GraphVisualizer" testclass="ResultCollector" testname="Graph Results" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <name>saveConfig</name> <value class="SampleSaveConfiguration"> <time>true</time> <latency>true</latency> <timestamp>true</timestamp> <success>true</success> <label>true</label> <code>true</code> <message>true</message> <threadName>true</threadName> <dataType>true</dataType> <encoding>false</encoding> <assertions>true</assertions> <subresults>true</subresults> <responseData>false</responseData> <samplerData>false</samplerData> <xml>true</xml> <fieldNames>false</fieldNames> <responseHeaders>false</responseHeaders> <requestHeaders>false</requestHeaders> <responseDataOnError>false</responseDataOnError> <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> </value> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor" enabled="true"> <stringProp name="RegexExtractor.useHeaders">false</stringProp> <stringProp name="RegexExtractor.refname">jsfViewState</stringProp> <stringProp name="RegexExtractor.regex"><input type="hidden" name="javax\.faces\.ViewState" id="javax\.faces\.ViewState" value="(.+?)" /></stringProp> <stringProp name="RegexExtractor.template">$1$</stringProp> <stringProp name="RegexExtractor.default"></stringProp> <stringProp name="RegexExtractor.match_number">0</stringProp> </RegexExtractor> <hashTree/> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <name>saveConfig</name> <value class="SampleSaveConfiguration"> <time>true</time> <latency>true</latency> <timestamp>true</timestamp> <success>true</success> <label>true</label> <code>true</code> <message>true</message> <threadName>true</threadName> <dataType>true</dataType> <encoding>false</encoding> <assertions>true</assertions> <subresults>true</subresults> <responseData>false</responseData> <samplerData>false</samplerData> <xml>true</xml> <fieldNames>false</fieldNames> <responseHeaders>false</responseHeaders> <requestHeaders>false</requestHeaders> <responseDataOnError>false</responseDataOnError> <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> </value> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> </hashTree> </hashTree> </hashTree> </jmeterTestPlan>
相关推荐
2. Web 应用程序测试:Jmeter+Jenkins+maven 接口自动化集成测试框架可以应用于 Web 应用程序测试,自动化测试和报告生成。 3. API 测试:Jmeter+Jenkins+maven 接口自动化集成测试框架可以应用于 API 测试,自动化...
**JMeter** 是一个开源的性能测试工具,主要适用于Web应用的压力和负载测试,但也可以用于接口测试。JMeter提供了一个图形化的界面,使得测试脚本的编写和执行变得简单易懂。在接口自动化测试中,我们可以创建HTTP...
Jmeter测试,在目前来说也是主流的工具测试方式,这个PPT,以前也是从网上收集的,希望对软件测试的爱好者有帮助。
首先,Apache JMeter是一款强大的性能测试工具,它主要用于测试Web应用,包括接口测试。通过JMeter,我们可以设计各种类型的测试计划,如HTTP请求、SOAP/REST服务测试等,来模拟用户对接口的并发访问,从而评估系统...
接口自动化测试方案jmeter+ant+jenkins 本文描述了一个基于jmeter、ant和jenkins的接口自动化测试方案,该方案旨在解决手工测试的低效率和不准确性问题。通过搭建自动化测试框架,测试人员可以快速、准确地测试接口...
JMeter是一款开源的性能测试工具,主要用于Web应用的负载测试和功能测试。它支持多种协议,包括HTTP、HTTPS、FTP等,并且可以用于测试静态和动态资源(如静态文件、JSP、CGI、HTML、JSON、XML等)。通过JMeter,可以...
本文标题“Jmeter+maven+Jenkins构建云性能测试平台”表明了本文的主题,即使用Jmeter、Maven和Jenkins来构建一个云性能测试平台。这个标题涵盖了三个关键技术点:Jmeter、Maven和Jenkins,都是当前IT行业中流行的...
使用Ant编写build.xml文件,包含JMeter测试计划的执行逻辑,如设置测试计划路径、输出结果文件等。通过`jmeter Ant任务`执行JMeter测试。 五、集成到Jenkins,构建持续化集成 1. 在Jenkins中创建新项目,选择Free...
基于Prometheus+Grafana搭建JMeter性能测试监控平台.docx 做性能测试,如果没有养成良好的保存结果习惯,那么一个业务指标监控平台就必不可少,不仅可以在线监控,还可以用于报告总结,数据持久化的好处就是让人眼前...
本文将介绍如何使用 Jenkins、Jmeter 和 Ant 实现接口自动化测试,并将其应用于实际项目中。 一、准备工作 在开始之前,我们需要下载并安装相关的软件包,包括 Jmeter、Ant 和 Jenkins。Jmeter 是一个开源的性能...
5. 如果使用 jMeter,需要在测试脚本中添加监听器,如“生产概要结果”监听器,将测试结果发送到 InfluxDB。 6. 在 Grafana 中创建新的面板,展示 jMeter 的测试结果和系统的其他监控数据。 这套系统特别适合实时...
用Jmeter编写接口测试用例,把用例保存到svn中,利用Jenkins上实现持续集成,Jenkins中用Ant进行构建操作,Jenkins中加入HTML报告、性能报告、邮件发送等功能。
jmter+ant+jenkins自动化测试pptjmter+ant+jenkins自动化测试pptjmter+ant+jenkins自动化测试ppt,个人总结
基于jmeter+Java+HttpclientUtil实现的接口测试工具,通过Excel表格进行维护接口相关参数信息,借助Jmeter工具通过java请求设计接口测试自动化测试用例。代码重写了JavaSampleClient类,在使用过程中取出了冗余的...
在使用这些jar包进行JMeter测试时,你需要将它们添加到JMeter的lib目录下,然后重启JMeter,这样JMeter就能识别并使用这些库。在JMeter的测试计划中,配置JDBC Connection Configuration,填写正确的数据库连接信息...
标题 "JMeter+Standard+Extras+mqtt" 指向的是使用Apache JMeter进行MQTT协议测试的主题。Apache JMeter是一款强大的性能测试工具,主要用于Web应用的负载和压力测试,但也可以扩展到其他协议,如MQTT(Message ...
JMeter是一款开源的Java应用,专门用于压力测试和性能测试。它支持多种协议,包括HTTP、FTP、JDBC等,非常适合进行接口自动化测试。在JMeter中,可以通过编写脚本模拟并发用户请求,测试接口的响应时间、吞吐量和...
标题中的"jmeter+Badboy+JMeterPlugins-Extras+JMeterPlugins-Standard+ServerAgent"揭示了这个压缩包集合是一套完整的性能测试工具组合,主要用于Web应用的压力和并发测试。接下来,我会详细讲解这些组件的功能和...
**JMeter** 是一个开源的、跨平台的性能测试工具,专门用于测试Web应用性能和负载。它可以模拟多个用户并发访问服务,从而测试服务器的响应时间、吞吐量以及资源消耗等关键指标。在【JMeter】中,你可以创建脚本来...