Author: sebb
Date: Sat Mar 10 12:46:38 2007
New Revision: 516782
URL: http://svn.apache.org/viewvc?view=rev&rev=516782
Log:
Bug 40933, 40945 - optional matching of embedded resource URLs
Modified:
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml
Modified:
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
Sat Mar 10 12:46:38 2007
@@ -760,6 +760,7 @@
web_server=Web Server
web_server_domain=Server Name or IP\:
web_server_port=Port Number\:
+web_testing_embedded_url_pattern=Embedded URLs must match\:
web_testing_retrieve_images=Retrieve All Embedded Resources from HTML Files
web_testing_title=HTTP Request
webservice_proxy_host=Proxy Host
Modified:
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
Sat Mar 10 12:46:38 2007
@@ -50,6 +50,7 @@
import org.apache.jorphan.util.JOrphanUtils;
import org.apache.log.Logger;
import org.apache.oro.text.PatternCacheLRU;
+import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
import org.xml.sax.XMLReader;
@@ -174,6 +175,35 @@
return patternCache;
}
+ /**
+ * Get a compiled expression from the pattern cache (READ_ONLY).
+ *
+ * @param expression
+ * @return compiled pattern
+ *
+ * @throws MalformedPatternException (Runtime)
+ * This should be caught for expressions that may vary (e.g. user input)
+ *
+ */
+ public static Pattern getPattern(String expression){
+ return getPattern(expression, Perl5Compiler.READ_ONLY_MASK);
+ }
+
+ /**
+ * Get a compiled expression from the pattern cache.
+ *
+ * @param expression RE
+ * @param options e.g. READ_ONLY_MASK
+ * @return compiled pattern
+ *
+ * @throws MalformedPatternException (Runtime)
+ * This should be caught for expressions that may vary (e.g. user input)
+ *
+ */
+ public static Pattern getPattern(String expression, int options){
+ return patternCache.getPattern(expression, options);
+ }
+
public void initializeProperties(String file) {
System.out.println("Initializing Properties: " + file);
getProperties(file);
Modified:
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
Sat Mar 10 12:46:38 2007
@@ -23,9 +23,12 @@
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
+import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JTextField;
import org.apache.jmeter.gui.util.HorizontalPanel;
+import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.protocol.http.config.gui.MultipartUrlConfigGui;
import org.apache.jmeter.protocol.http.config.gui.UrlConfigGui;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerFactory;
@@ -33,6 +36,7 @@
import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.gui.JLabeledTextField;
//For unit tests, @see TestHttpTestSampleGui
@@ -47,6 +51,8 @@
private JCheckBox isMon;
+ private JLabeledTextField embeddedRE; // regular expression used to
match against embedded resource URLs
+
public HttpTestSampleGui() {
init();
}
@@ -54,8 +60,10 @@
public void configure(TestElement element) {
super.configure(element);
urlConfigGui.configure(element);
- getImages.setSelected(((HTTPSamplerBase)
element).isImageParser());
- isMon.setSelected(((HTTPSamplerBase) element).isMonitor());
+ final HTTPSamplerBase samplerBase = (HTTPSamplerBase) element;
+ getImages.setSelected(samplerBase.isImageParser());
+ isMon.setSelected(samplerBase.isMonitor());
+ embeddedRE.setText(samplerBase.getEmbeddedUrlRE());
}
public TestElement createTestElement() {
@@ -73,12 +81,15 @@
TestElement el = urlConfigGui.createTestElement();
sampler.clear();
sampler.addTestElement(el);
+ final HTTPSamplerBase samplerBase = (HTTPSamplerBase) sampler;
if (getImages.isSelected()) {
- ((HTTPSamplerBase) sampler).setImageParser(true);
+ samplerBase.setImageParser(true);
} else {
- sampler.removeProperty(HTTPSamplerBase.IMAGE_PARSER);//
TODO - why?
+ // The default is false, so we can remove the property
to simplify JMX files
+ sampler.removeProperty(HTTPSamplerBase.IMAGE_PARSER);
}
- ((HTTPSamplerBase) sampler).setMonitor(isMon.isSelected());
+ samplerBase.setMonitor(isMon.isSelected());
+ samplerBase.setEmbeddedUrlRE(embeddedRE.getText());
this.configureTestElement(sampler);
}
@@ -102,19 +113,21 @@
private JPanel createOptionalTasksPanel() {
// OPTIONAL TASKS
- HorizontalPanel optionalTasksPanel = new HorizontalPanel();
+ JPanel optionalTasksPanel = new VerticalPanel();
optionalTasksPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
JMeterUtils
.getResString("optional_tasks"))); //
$NON-NLS-1$
+ JPanel checkBoxPanel = new HorizontalPanel();
// RETRIEVE IMAGES
- JPanel retrieveImagesPanel = new JPanel();
getImages = new
JCheckBox(JMeterUtils.getResString("web_testing_retrieve_images")); //
$NON-NLS-1$
- retrieveImagesPanel.add(getImages);
- JPanel isMonitorPanel = new JPanel();
+ // Is monitor
isMon = new
JCheckBox(JMeterUtils.getResString("monitor_is_title")); // $NON-NLS-1$
- isMonitorPanel.add(isMon);
- optionalTasksPanel.add(retrieveImagesPanel);
- optionalTasksPanel.add(isMonitorPanel);
+ checkBoxPanel.add(getImages);
+ checkBoxPanel.add(isMon);
+ optionalTasksPanel.add(checkBoxPanel);
+ // Embedded URL match regex
+ embeddedRE = new
JLabeledTextField(JMeterUtils.getResString("web_testing_embedded_url_pattern"),30);
// $NON-NLS-1$
+ optionalTasksPanel.add(embeddedRE);
return optionalTasksPanel;
}
Modified:
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
Sat Mar 10 12:46:38 2007
@@ -52,6 +52,10 @@
import org.apache.jorphan.logging.LoggingManager;
import org.apache.jorphan.util.JOrphanUtils;
import org.apache.log.Logger;
+import org.apache.oro.text.MalformedCachePatternException;
+import org.apache.oro.text.regex.Pattern;
+import org.apache.oro.text.regex.Perl5Compiler;
+import org.apache.oro.text.regex.Perl5Matcher;
/**
* Common constants and methods for HTTP samplers
@@ -147,7 +151,12 @@
public final static String MULTIPART_FORM = "multipart_form"; //
$NON-NLS-1$
// public final static String ENCODED_PATH= "HTTPSampler.encoded_path";
+
+ // IMAGE_PARSER now really means EMBEDDED_PARSER
public final static String IMAGE_PARSER = "HTTPSampler.image_parser";
// $NON-NLS-1$
+
+ // Embedded URLs must match this RE (if provided)
+ public final static String EMBEDDED_URL_RE =
"HTTPSampler.embedded_url_re"; // $NON-NLS-1$
public final static String MONITOR = "HTTPSampler.monitor"; //
$NON-NLS-1$
@@ -531,6 +540,19 @@
}
/**
+ * Get the regular expression URLs must match.
+ *
+ * @return regular expression (or empty) string
+ */
+ public String getEmbeddedUrlRE() {
+ return getPropertyAsString(EMBEDDED_URL_RE,"");
+ }
+
+ public void setEmbeddedUrlRE(String regex) {
+ setProperty(new StringProperty(EMBEDDED_URL_RE, regex));
+ }
+
+ /**
* Obtain a result that will help inform the user that an error has
occured
* during sampling, and how long it took to detect the error.
*
@@ -776,6 +798,18 @@
res = container;
}
+ // Get the URL matcher
+ String re=getEmbeddedUrlRE();
+ Perl5Matcher localMatcher = null;
+ Pattern pattern = null;
+ if (re.length()>0){
+ try {
+ pattern = JMeterUtils.getPattern(re);
+ localMatcher =
JMeterUtils.getMatcher();// don't fetch unless pattern compiles
+ } catch (MalformedCachePatternException e) {
+ log.warn("Ignoring embedded URL match
string: "+e.getMessage());
+ }
+ }
while (urls.hasNext()) {
Object binURL = urls.next();
try {
@@ -790,6 +824,9 @@
res.setSuccessful(false);
continue;
}
+ }
+ if (pattern != null && !localMatcher.matches(urlStrEnc,
pattern)) {
+ continue; // we have a pattern and the URL does not
match, so skip it
}
HTTPSampleResult binRes = sample(url, GET, false,
frameDepth + 1);
res.addSubResult(binRes);
Modified: jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml Sat Mar 10 12:46:38 2007
@@ -108,6 +108,7 @@
<li>Bug 40381 - LDAP: more descriptive strings</li>
<li>Bug 40369 (partial) Equals Response Assertion</li>
<li>Bug 41705 - add content-encoding option to HTTP samplers for POST
requests</li>
+<li>Bug 40933, 40945 - optional matching of embedded resource URLs</li>
</ul>
<h4>Non-functional improvements:</h4>
@@ -116,6 +117,7 @@
<li>Replace com.sun.net classes with javax.net</li>
<li>Extract external jar definitions into build.properties file</li>
<li>Use specific jar names in build classpaths so errors are detected
sooner</li>
+<li>Tidied up ORO calls; now only one cache</li>
</ul>
<h4>External jar updates:</h4>
Modified:
jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml
(original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml
Sat Mar 10 12:46:38 2007
@@ -42,7 +42,7 @@
<description>
<br>Samplers perform the actual work of JMeter.</br>
</description>
-<component name="FTP Request" index="§-num;.1.1" width="407" height="238"
screenshot="gen-controller/ftp-request.gif">
+<component name="FTP Request" index="§-num;.1.1" width="407" height="238"
screenshot="ftptest/ftp-request.gif">
<description>This controller lets you send an FTP "retrieve file" request to
an FTP server.
If you are going to send multiple requests to the same FTP server, consider
using a <complink name="FTP Request Defaults"/> Configuration
@@ -64,7 +64,7 @@
</component>
-<component name="HTTP Request" index="§-num;.1.2" width="608"
height="574" screenshot="gen-controller/http-request.png">
+<component name="HTTP Request" index="§-num;.1.2" width="558"
height="600" screenshot="webtest/http-request.png">
<description>
<p>This sampler lets you send an HTTP/HTTPS request to a web server.
It
@@ -174,6 +174,11 @@
See below for more details.
</property>
<property name="Use as monitor" required="Yes">For use with the
<complink name="Monitor Results"/> listener.</property>
+ <property name="Embedded URLs must match:" required="No">
+ If present, this must be a regular expression that is used to match
against any embedded URLs found.
+ So if you only want to download embedded resources from
http://server.com/, use the expression:
+ http://server\.com/.*
+ </property>
</properties>
<p>Upto and including JMeter 2.1.1, only responses with the content-type
"text/html" were scanned for
embedded resources. Other content-types were assumed to be something other
than HTML.
@@ -201,7 +206,7 @@
</component>
-<component name="JDBC Request" index="§-num;.1.3" width="492"
height="264" screenshot="gen-controller/jdbc-request.png">
+<component name="JDBC Request" index="§-num;.1.3" width="492"
height="264" screenshot="jdbctest/jdbc-request.png">
<description><p>This sampler lets you send an JDBC Request (an SQL query) to a
database.</p>
<p>Before using this you need to set up a
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]