You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2016/12/30 22:23:59 UTC
svn commit: r1776651 - in /jmeter/trunk:
src/components/org/apache/jmeter/assertions/
src/components/org/apache/jmeter/assertions/gui/
src/core/org/apache/jmeter/resources/
test/src/org/apache/jmeter/assertions/ xdocs/
Author: pmouawad
Date: Fri Dec 30 22:23:59 2016
New Revision: 1776651
URL: http://svn.apache.org/viewvc?rev=1776651&view=rev
Log:
Bug 60507 - Added 'Or' Function into ResponseAssertion
Based on contribution by \u5ffb\u9686
Bugzilla Id: 60507
Modified:
jmeter/trunk/src/components/org/apache/jmeter/assertions/ResponseAssertion.java
jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/AssertionGui.java
jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
jmeter/trunk/src/core/org/apache/jmeter/resources/messages_zh_CN.properties
jmeter/trunk/test/src/org/apache/jmeter/assertions/ResponseAssertionTest.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/components/org/apache/jmeter/assertions/ResponseAssertion.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/assertions/ResponseAssertion.java?rev=1776651&r1=1776650&r2=1776651&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/assertions/ResponseAssertion.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/assertions/ResponseAssertion.java Fri Dec 30 22:23:59 2016
@@ -39,15 +39,14 @@ import org.apache.oro.text.regex.Pattern
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
-// @see org.apache.jmeter.assertions.ResponseAssertionTest for unit tests
-
/**
* Test element to handle Response Assertions, @see AssertionGui
+ * see org.apache.jmeter.assertions.ResponseAssertionTest for unit tests
*/
public class ResponseAssertion extends AbstractScopedAssertion implements Serializable, Assertion {
private static final Logger log = LoggingManager.getLoggerForClass();
- private static final long serialVersionUID = 240L;
+ private static final long serialVersionUID = 241L;
private static final String TEST_FIELD = "Assertion.test_field"; // $NON-NLS-1$
@@ -85,7 +84,9 @@ public class ResponseAssertion extends A
private static final int SUBSTRING = 1 << 4;
- // Mask should contain all types (but not NOT)
+ private static final int OR = 1 << 5;
+
+ // Mask should contain all types (but not NOT nor OR)
private static final int TYPE_MASK = CONTAINS | EQUALS | MATCH | SUBSTRING;
private static final int EQUALS_SECTION_DIFF_LEN
@@ -220,6 +221,10 @@ public class ResponseAssertion extends A
public boolean isNotType() {
return (getTestType() & NOT) != 0;
}
+
+ public boolean isOrType() {
+ return (getTestType() & OR) != 0;
+ }
public void setToContainsType() {
setTestTypeMasked(CONTAINS);
@@ -244,6 +249,14 @@ public class ResponseAssertion extends A
public void unsetNotType() {
setTestType(getTestType() & ~NOT);
}
+
+ public void setToOrType() {
+ setTestType((getTestType() | OR));
+ }
+
+ public void unsetOrType() {
+ setTestType(getTestType() & ~OR);
+ }
public boolean getAssumeSuccess() {
return getPropertyAsBoolean(ASSUME_SUCCESS, false);
@@ -290,9 +303,9 @@ public class ResponseAssertion extends A
}
result.setFailure(false);
- result.setError(false);
-
+ result.setError(false);
boolean notTest = (NOT & getTestType()) > 0;
+ boolean orTest = (OR & getTestType()) > 0;
boolean contains = isContainsType(); // do it once outside loop
boolean equals = isEqualsType();
boolean substring = isSubstringType();
@@ -300,6 +313,7 @@ public class ResponseAssertion extends A
boolean debugEnabled = log.isDebugEnabled();
if (debugEnabled){
log.debug("Type:" + (contains?"Contains" : "Match") + (notTest? "(not)" : ""));
+ log.debug("Type:" + (contains?"Contains" : "Match") + (orTest? "(or)" : ""));
}
if (StringUtils.isEmpty(toCheck)) {
@@ -313,6 +327,8 @@ public class ResponseAssertion extends A
}
boolean pass = true;
+ boolean hasTrue = false;
+ ArrayList<String> allCheckMessage = new ArrayList<>();
try {
// Get the Matcher for this thread
Perl5Matcher localMatcher = JMeterUtils.getMatcher();
@@ -333,17 +349,37 @@ public class ResponseAssertion extends A
found = localMatcher.matches(toCheck, pattern);
}
pass = notTest ? !found : found;
- if (!pass) {
+ if (orTest) {
+ if (!pass) {
+ if (debugEnabled) {
+ log.debug("Failed: "+stringPattern);
+ }
+ allCheckMessage.add(getFailText(stringPattern,toCheck));
+ } else {
+ hasTrue=true;
+ break;
+ }
+ } else {
+ if (!pass) {
+ if (debugEnabled){
+ log.debug("Failed: "+stringPattern);
+ }
+ result.setFailure(true);
+ result.setFailureMessage(getFailText(stringPattern,toCheck));
+ break;
+ }
if (debugEnabled){
- log.debug("Failed: "+stringPattern);
+ log.debug("Passed: "+stringPattern);
}
- result.setFailure(true);
- result.setFailureMessage(getFailText(stringPattern,toCheck));
- break;
}
- if (debugEnabled){
- log.debug("Passed: "+stringPattern);
+ }
+ if (orTest && !hasTrue){
+ StringBuilder errorMsg = new StringBuilder();
+ for(String tmp : allCheckMessage){
+ errorMsg.append(tmp).append('\t');
}
+ result.setFailure(true);
+ result.setFailureMessage(errorMsg.toString());
}
} catch (MalformedCachePatternException e) {
result.setError(true);
@@ -415,7 +451,6 @@ public class ResponseAssertion extends A
}
sb.append("/");
-
return sb.toString();
}
Modified: jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/AssertionGui.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/AssertionGui.java?rev=1776651&r1=1776650&r2=1776651&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/AssertionGui.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/AssertionGui.java Fri Dec 30 22:23:59 2016
@@ -110,6 +110,11 @@ public class AssertionGui extends Abstra
* patterns.
*/
private JCheckBox notBox;
+
+ /**
+ * Add new OR checkbox.
+ */
+ private JCheckBox orBox;
/** A table of patterns to test against. */
private JTable stringTable;
@@ -187,6 +192,12 @@ public class AssertionGui extends Abstra
} else {
ra.unsetNotType();
}
+
+ if (orBox.isSelected()) {
+ ra.setToOrType();
+ } else {
+ ra.unsetOrType();
+ }
}
}
@@ -208,6 +219,7 @@ public class AssertionGui extends Abstra
substringBox.setSelected(true);
notBox.setSelected(false);
+ orBox.setSelected(false);
}
/**
@@ -237,6 +249,7 @@ public class AssertionGui extends Abstra
}
notBox.setSelected(model.isNotType());
+ orBox.setSelected(model.isOrType());
if (model.isTestFieldResponseData()) {
responseStringButton.setSelected(true);
@@ -357,6 +370,9 @@ public class AssertionGui extends Abstra
notBox = new JCheckBox(JMeterUtils.getResString("assertion_not")); //$NON-NLS-1$
panel.add(notBox);
+ orBox = new JCheckBox(JMeterUtils.getResString("assertion_or")); //$NON-NLS-1$
+ panel.add(orBox);
+
return panel;
}
Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1776651&r1=1776650&r2=1776651&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Fri Dec 30 22:23:59 2016
@@ -111,6 +111,7 @@ assertion_matches=Matches
assertion_message_resp=Response Message
assertion_network_size=Full Response
assertion_not=Not
+assertion_or=Or
assertion_pattern_match_rules=Pattern Matching Rules
assertion_patterns_to_test=Patterns to Test
assertion_regex_empty_default_value=Use empty default value
@@ -1343,4 +1344,4 @@ xpath_tidy_report_errors=Report errors
xpath_tidy_show_warnings=Show warnings
you_must_enter_a_valid_number=You must enter a valid number
zh_cn=Chinese (Simplified)
-zh_tw=Chinese (Traditional)
+zh_tw=Chinese (Traditional)
\ No newline at end of file
Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1776651&r1=1776650&r2=1776651&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties Fri Dec 30 22:23:59 2016
@@ -104,6 +104,7 @@ assertion_matches=Correspond \u00E0 (exp
assertion_message_resp=Message de r\u00E9ponse
assertion_network_size=R\u00E9ponse compl\u00E8te
assertion_not=Inverser
+assertion_or=Ou
assertion_pattern_match_rules=Type de correspondance du motif
assertion_patterns_to_test=Motifs \u00E0 tester
assertion_regex_empty_default_value=Utiliser la cha\u00EEne vide comme valeur par d\u00E9faut
Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages_zh_CN.properties
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_zh_CN.properties?rev=1776651&r1=1776650&r2=1776651&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages_zh_CN.properties (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages_zh_CN.properties Fri Dec 30 22:23:59 2016
@@ -35,6 +35,7 @@ assertion_contains=\u5305\u62EC
assertion_matches=\u5339\u914D
assertion_message_resp=\u54CD\u5E94\u4FE1\u606F
assertion_not=\u5426
+assertion_or=\u6216\u8005
assertion_pattern_match_rules=\u6A21\u5F0F\u5339\u914D\u89C4\u5219
assertion_patterns_to_test=\u8981\u6D4B\u8BD5\u7684\u6A21\u5F0F
assertion_resp_field=\u8981\u6D4B\u8BD5\u7684\u54CD\u5E94\u5B57\u6BB5
@@ -401,5 +402,4 @@ web_testing_retrieve_images=\u4ECEHTML\u
web_testing_title=HTTP\u8BF7\u6C42
workbench_title=\u5DE5\u4F5C\u53F0
xml_assertion_title=XML\u65AD\u8A00
-you_must_enter_a_valid_number=\u5FC5\u987B\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57
-
+you_must_enter_a_valid_number=\u5FC5\u987B\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57
\ No newline at end of file
Modified: jmeter/trunk/test/src/org/apache/jmeter/assertions/ResponseAssertionTest.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/assertions/ResponseAssertionTest.java?rev=1776651&r1=1776650&r2=1776651&view=diff
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/assertions/ResponseAssertionTest.java (original)
+++ jmeter/trunk/test/src/org/apache/jmeter/assertions/ResponseAssertionTest.java Fri Dec 30 22:23:59 2016
@@ -122,7 +122,38 @@ public class ResponseAssertionTest {
assertion.addTestString("line 2");
result = assertion.getResult(sample);
assertPassed();
-
+
+ assertion.clearTestStrings();
+ assertion.addTestString("line 2");
+ assertion.addTestString("NOTINSAMPLEDATA");
+ result = assertion.getResult(sample);
+ assertFailed();
+
+ assertion.clearTestStrings();
+ assertion.setToOrType();
+ assertion.addTestString("line 2");
+ assertion.addTestString("NOTINSAMPLEDATA");
+ result = assertion.getResult(sample);
+ assertPassed();
+ assertion.unsetOrType();
+
+ assertion.clearTestStrings();
+ assertion.setToOrType();
+ assertion.addTestString("NOTINSAMPLEDATA");
+ assertion.addTestString("line 2");
+ result = assertion.getResult(sample);
+ assertPassed();
+ assertion.unsetOrType();
+
+
+ assertion.clearTestStrings();
+ assertion.setToNotType();
+ assertion.addTestString("NOTINSAMPLEDATA");
+ result = assertion.getResult(sample);
+ assertPassed();
+ assertion.unsetNotType();
+
+
assertion.clearTestStrings();
assertion.addTestString("(?s)line \\d+.*EOF");
result = assertion.getResult(sample);
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1776651&r1=1776650&r2=1776651&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Fri Dec 30 22:23:59 2016
@@ -123,6 +123,7 @@ Fill in some detail.
<h3>Timers, Assertions, Config, Pre- & Post-Processors</h3>
<ul>
<li><bug>60154</bug>User Parameters GUI: allow rows to be moved up & down in the list. Contributed by Murdecai777 (https://github.com/Murdecai777).</li>
+ <li><bug>60507</bug>Added 'Or' Function into ResponseAssertion. Based on a contributed from \u5ffb\u9686 (298015902 at qq.com)</li>
</ul>
<h3>Functions</h3>
@@ -211,6 +212,7 @@ Fill in some detail.
<li>Murdecai777 (https://github.com/Murdecai777)</li>
<li>Logan Mauzaize (https://github.com/loganmzz)</li>
<li>Maxime Chassagneux (https://github.com/max3163)</li>
+<li>\u5ffb\u9686 (298015902 at qq.com)</li>
</ul>
<p>We also thank bug reporters who helped us improve JMeter. <br/>
For this release we want to give special thanks to the following reporters for the clear reports and tests made after our fixes:</p>