You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2006/06/02 21:14:53 UTC
svn commit: r411255 - in /jakarta/jmeter/branches/rel-2-1:
src/components/org/apache/jmeter/extractor/
src/components/org/apache/jmeter/extractor/gui/
test/src/org/apache/jmeter/extractor/ xdocs/ xdocs/images/screenshots/
Author: sebb
Date: Fri Jun 2 12:14:53 2006
New Revision: 411255
URL: http://svn.apache.org/viewvc?rev=411255&view=rev
Log:
Bug 39707 - allow Regex match against URL
Modified:
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/RegexExtractor.java
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/gui/RegexExtractorGui.java
jakarta/jmeter/branches/rel-2-1/test/src/org/apache/jmeter/extractor/TestRegexExtractor.java
jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
jakarta/jmeter/branches/rel-2-1/xdocs/images/screenshots/regex_extractor.png
Modified: jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/RegexExtractor.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/RegexExtractor.java?rev=411255&r1=411254&r2=411255&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/RegexExtractor.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/RegexExtractor.java Fri Jun 2 12:14:53 2006
@@ -50,24 +50,39 @@
*/
public class RegexExtractor extends AbstractTestElement implements PostProcessor, Serializable {
- private static final Logger log = LoggingManager.getLoggerForClass();
- public static final String USEHEADERS = "RegexExtractor.useHeaders"; // $NON-NLS-1$
+ private static final Logger log = LoggingManager.getLoggerForClass();
- public static final String REGEX = "RegexExtractor.regex"; // $NON-NLS-1$
+ // What to match against. N.B. do not change the string value or test plans will break!
+ private static final String MATCH_AGAINST = "RegexExtractor.useHeaders"; // $NON-NLS-1$
+ /*
+ * Permissible values:
+ * true - match against headers
+ * false or absent - match against body (this was the original default)
+ * URL - match against URL
+ * These are passed to the setUseField() method
+ *
+ * Do not change these values!
+ */
+ public static final String USE_HDRS = "true"; // $NON-NLS-1$
+ public static final String USE_BODY = "false"; // $NON-NLS-1$
+ public static final String USE_URL = "URL"; // $NON-NLS-1$
+
+ private static final String REGEX = "RegexExtractor.regex"; // $NON-NLS-1$
- public static final String REFNAME = "RegexExtractor.refname"; // $NON-NLS-1$
+ private static final String REFNAME = "RegexExtractor.refname"; // $NON-NLS-1$
- public static final String MATCH_NUMBER = "RegexExtractor.match_number"; // $NON-NLS-1$
+ private static final String MATCH_NUMBER = "RegexExtractor.match_number"; // $NON-NLS-1$
- public static final String DEFAULT = "RegexExtractor.default"; // $NON-NLS-1$
+ private static final String DEFAULT = "RegexExtractor.default"; // $NON-NLS-1$
- public static final String TEMPLATE = "RegexExtractor.template"; // $NON-NLS-1$
+ private static final String TEMPLATE = "RegexExtractor.template"; // $NON-NLS-1$
private static final String REF_MATCH_NR = "_matchNr"; // $NON-NLS-1$
private static final String UNDERSCORE = "_"; // $NON-NLS-1$
+
private Object[] template = null;
private static PatternCacheLRU patternCache = new PatternCacheLRU(1000, new Perl5Compiler());
@@ -104,13 +119,22 @@
}
Perl5Matcher matcher = (Perl5Matcher) localMatcher.get();
- PatternMatcherInput input = new PatternMatcherInput(
- useHeaders()
- ? previousResult.getResponseHeaders()
- : previousResult.getResponseDataAsString()); // Bug 36898
- log.debug("Regex = " + getRegex());
+ String inputString =
+ useUrl() ? previousResult.getUrlAsString() // Bug 39707
+ :
+ useHeaders() ? previousResult.getResponseHeaders()
+ : previousResult.getResponseDataAsString() // Bug 36898
+ ;
+ if (log.isDebugEnabled()) {
+ log.debug("Input = " + inputString);
+ }
+ PatternMatcherInput input = new PatternMatcherInput(inputString);
+ String regex = getRegex();
+ if (log.isDebugEnabled()) {
+ log.debug("Regex = " + regex);
+ }
try {
- Pattern pattern = patternCache.getPattern(getRegex(), Perl5Compiler.READ_ONLY_MASK);
+ Pattern pattern = patternCache.getPattern(regex, Perl5Compiler.READ_ONLY_MASK);
List matches = new ArrayList();
int x = 0;
boolean done = false;
@@ -168,7 +192,7 @@
log.warn("Error while generating result");
}
} catch (MalformedCachePatternException e) {
- log.warn("Error in pattern: " + getRegex());
+ log.warn("Error in pattern: " + regex);
}
}
@@ -309,10 +333,18 @@
setProperty(new IntegerProperty(MATCH_NUMBER, matchNumber));
}
+ public void setMatchNumber(String matchNumber) {
+ setProperty(MATCH_NUMBER, matchNumber);
+ }
+
public int getMatchNumber() {
return getPropertyAsInt(MATCH_NUMBER);
}
+ public String getMatchNumberAsString() {
+ return getPropertyAsString(MATCH_NUMBER);
+ }
+
/**
* Sets the value of the variable if no matches are found
*
@@ -334,7 +366,23 @@
return getPropertyAsString(TEMPLATE);
}
- boolean useHeaders() {
- return "true".equalsIgnoreCase(getPropertyAsString(USEHEADERS));
+ public boolean useHeaders() {
+ return USE_HDRS.equalsIgnoreCase( getPropertyAsString(MATCH_AGAINST));
+ }
+
+ // Allow for property not yet being set (probably only applies to Test cases)
+ public boolean useBody() {
+ String body = getPropertyAsString(MATCH_AGAINST);
+ return body.length()==0 || USE_BODY.equalsIgnoreCase(body);// $NON-NLS-1$
+ }
+
+ public boolean useUrl() {
+ String body = getPropertyAsString(MATCH_AGAINST);
+ return USE_URL.equalsIgnoreCase(body);
+ }
+ public void setUseField(String actionCommand) {
+ setProperty(MATCH_AGAINST,actionCommand);
+ // TODO Auto-generated method stub
+
}
}
Modified: jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/gui/RegexExtractorGui.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/gui/RegexExtractorGui.java?rev=411255&r1=411254&r2=411255&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/gui/RegexExtractorGui.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/extractor/gui/RegexExtractorGui.java Fri Jun 2 12:14:53 2006
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2004 The Apache Software Foundation.
+ * Copyright 2003-2004,2006 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,7 +34,6 @@
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.gui.JLabeledTextField;
-import org.apache.jorphan.util.JOrphanUtils;
/**
*/
@@ -49,10 +48,13 @@
private JLabeledTextField refNameField;
- // NOTUSED private JCheckBox scanHeader;
private JRadioButton useBody;
private JRadioButton useHeaders;
+
+ private JRadioButton useURL;
+
+ private ButtonGroup group;
public RegexExtractorGui() {
super();
@@ -60,18 +62,22 @@
}
public String getLabelResource() {
- return "regex_extractor_title";
+ return "regex_extractor_title"; //$NON-NLS-1$
}
public void configure(TestElement el) {
super.configure(el);
- useHeaders.setSelected(el.getPropertyAsBoolean(RegexExtractor.USEHEADERS));
- useBody.setSelected(!el.getPropertyAsBoolean(RegexExtractor.USEHEADERS));
- regexField.setText(el.getPropertyAsString(RegexExtractor.REGEX));
- templateField.setText(el.getPropertyAsString(RegexExtractor.TEMPLATE));
- defaultField.setText(el.getPropertyAsString(RegexExtractor.DEFAULT));
- matchNumberField.setText(el.getPropertyAsString(RegexExtractor.MATCH_NUMBER));
- refNameField.setText(el.getPropertyAsString(RegexExtractor.REFNAME));
+ if (el instanceof RegexExtractor){
+ RegexExtractor re = (RegexExtractor) el;
+ useHeaders.setSelected(re.useHeaders());
+ useBody.setSelected(re.useBody());
+ useURL.setSelected(re.useUrl());
+ regexField.setText(re.getRegex());
+ templateField.setText(re.getTemplate());
+ defaultField.setText(re.getDefaultValue());
+ matchNumberField.setText(re.getMatchNumberAsString());
+ refNameField.setText(re.getRefName());
+ }
}
/**
@@ -90,14 +96,18 @@
*/
public void modifyTestElement(TestElement extractor) {
super.configureTestElement(extractor);
- extractor.setProperty(RegexExtractor.USEHEADERS, JOrphanUtils.booleanToString(useHeaders.isSelected()));
- extractor.setProperty(RegexExtractor.MATCH_NUMBER, matchNumberField.getText());
if (extractor instanceof RegexExtractor) {
RegexExtractor regex = (RegexExtractor) extractor;
+ regex.setUseField(group.getSelection().getActionCommand());
+// regex.setUseHeaders(useHeaders.isSelected());
+// regex.setUseBody(useBody.isSelected());
+// regex.setUseUrl(useURL.isSelected());
+
regex.setRefName(refNameField.getText());
regex.setRegex(regexField.getText());
regex.setTemplate(templateField.getText());
regex.setDefaultValue(defaultField.getText());
+ regex.setMatchNumber(matchNumberField.getText());
}
}
@@ -114,28 +124,35 @@
private JPanel makeSourcePanel() {
JPanel panel = new JPanel();
- panel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("regex_source")));
+ panel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("regex_source"))); //$NON-NLS-1$
- useBody = new JRadioButton(JMeterUtils.getResString("regex_src_body"));
- useHeaders = new JRadioButton(JMeterUtils.getResString("regex_src_hdrs"));
+ useBody = new JRadioButton(JMeterUtils.getResString("regex_src_body")); //$NON-NLS-1$
+ useHeaders = new JRadioButton(JMeterUtils.getResString("regex_src_hdrs")); //$NON-NLS-1$
+ useURL = new JRadioButton(JMeterUtils.getResString("regex_src_url")); //$NON-NLS-1$
- ButtonGroup group = new ButtonGroup();
+ group = new ButtonGroup();
group.add(useBody);
group.add(useHeaders);
+ group.add(useURL);
panel.add(useBody);
panel.add(useHeaders);
+ panel.add(useURL);
useBody.setSelected(true);
+
+ useBody.setActionCommand(RegexExtractor.USE_BODY);
+ useHeaders.setActionCommand(RegexExtractor.USE_HDRS);
+ useURL.setActionCommand(RegexExtractor.USE_URL);
return panel;
}
private JPanel makeParameterPanel() {
- regexField = new JLabeledTextField(JMeterUtils.getResString("regex_field"));
- templateField = new JLabeledTextField(JMeterUtils.getResString("template_field"));
- defaultField = new JLabeledTextField(JMeterUtils.getResString("default_value_field"));
- refNameField = new JLabeledTextField(JMeterUtils.getResString("ref_name_field"));
- matchNumberField = new JLabeledTextField(JMeterUtils.getResString("match_num_field"));
+ regexField = new JLabeledTextField(JMeterUtils.getResString("regex_field")); //$NON-NLS-1$
+ templateField = new JLabeledTextField(JMeterUtils.getResString("template_field")); //$NON-NLS-1$
+ defaultField = new JLabeledTextField(JMeterUtils.getResString("default_value_field")); //$NON-NLS-1$
+ refNameField = new JLabeledTextField(JMeterUtils.getResString("ref_name_field")); //$NON-NLS-1$
+ matchNumberField = new JLabeledTextField(JMeterUtils.getResString("match_num_field")); //$NON-NLS-1$
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
Modified: jakarta/jmeter/branches/rel-2-1/test/src/org/apache/jmeter/extractor/TestRegexExtractor.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-1/test/src/org/apache/jmeter/extractor/TestRegexExtractor.java?rev=411255&r1=411254&r2=411255&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/test/src/org/apache/jmeter/extractor/TestRegexExtractor.java (original)
+++ jakarta/jmeter/branches/rel-2-1/test/src/org/apache/jmeter/extractor/TestRegexExtractor.java Fri Jun 2 12:14:53 2006
@@ -18,6 +18,8 @@
package org.apache.jmeter.extractor;
+import java.net.URL;
+
import junit.framework.TestCase;
import org.apache.jmeter.samplers.SampleResult;
@@ -176,11 +178,38 @@
extractor.setRegex("Header1: (\\S+)");
extractor.setTemplate("$1$");
extractor.setMatchNumber(1);
+ assertTrue("useBody should be true", extractor.useBody());
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useURL should be false", extractor.useUrl());
+ extractor.setUseField(RegexExtractor.USE_BODY);
+ assertTrue("useBody should be true", extractor.useBody());
assertFalse("useHdrs should be false", extractor.useHeaders());
- extractor.setProperty(RegexExtractor.USEHEADERS, "true");
+ assertFalse("useURL should be false", extractor.useUrl());
+ extractor.setUseField(RegexExtractor.USE_HDRS);
assertTrue("useHdrs should be true", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertFalse("useURL should be false", extractor.useUrl());
extractor.process();
assertEquals("Value1", vars.get("regVal"));
+ extractor.setUseField(RegexExtractor.USE_URL);
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertTrue("useURL should be true", extractor.useUrl());
+ }
+
+ public void testVariableExtraction8() throws Exception {
+ extractor.setRegex("http://jakarta\\.apache\\.org/(\\w+)");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(1);
+ extractor.setUseField(RegexExtractor.USE_URL);
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertTrue("useURL should be true", extractor.useUrl());
+ extractor.process();
+ assertNull(vars.get("regVal"));
+ result.setURL(new URL("http://jakarta.apache.org/index.html?abcd"));
+ extractor.process();
+ assertEquals("index",vars.get("regVal"));
}
public void testNoDefault() throws Exception {
Modified: jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml?rev=411255&r1=411254&r2=411255&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml Fri Jun 2 12:14:53 2006
@@ -109,6 +109,7 @@
<li>Automatically include properties from user.properties file</li>
<li>Add __jexl() function - evaluates Commons JEXL expressions</li>
<li>Optionally load JMeter properties from user.properties and system properties from system.properties.</li>
+<li>Bug 39707 - allow Regex match against URL</li>
</ul>
<h4>Bug fixes:</h4>
Modified: jakarta/jmeter/branches/rel-2-1/xdocs/images/screenshots/regex_extractor.png
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-1/xdocs/images/screenshots/regex_extractor.png?rev=411255&r1=411254&r2=411255&view=diff
==============================================================================
Binary files - no diff available.
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org