|
JMeter example source code file (CompareAssertion.java)
The JMeter CompareAssertion.java source code
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.jmeter.assertions;
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.apache.jmeter.engine.event.LoopIterationEvent;
import org.apache.jmeter.engine.event.LoopIterationListener;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testbeans.TestBean;
import org.apache.jmeter.testelement.AbstractTestElement;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.oro.text.regex.StringSubstitution;
import org.apache.oro.text.regex.Util;
public class CompareAssertion extends AbstractTestElement implements Assertion, TestBean, Serializable,
LoopIterationListener {
private static final long serialVersionUID = 240L;
private transient List<SampleResult> responses;
private transient final StringSubstitution emptySub = new StringSubstitution(""); //$NON-NLS-1$
private boolean compareContent = true;
private long compareTime = -1;
private Collection<SubstitutionElement> stringsToSkip;
public CompareAssertion() {
super();
}
public AssertionResult getResult(SampleResult response) {
responses.add(response);
if (responses.size() > 1) {
CompareAssertionResult result = new CompareAssertionResult(getName());
compareContent(result);
compareTime(result);
return result;
} else
return new AssertionResult(getName());
}
private void compareTime(CompareAssertionResult result) {
if (compareTime >= 0) {
Iterator<SampleResult> iter = responses.iterator();
long prevTime = -1;
SampleResult prevResult = null;
boolean success = true;
while (iter.hasNext()) {
SampleResult sResult = iter.next();
long currentTime = sResult.getTime();
if (prevTime != -1) {
success = Math.abs(prevTime - currentTime) <= compareTime;
prevResult = sResult;
}
if (!success) {
result.setFailure(true);
StringBuilder buf = new StringBuilder();
appendResultDetails(buf, prevResult);
buf.append(JMeterUtils.getResString("comparison_response_time")).append(prevTime);
result.addToBaseResult(buf.toString());
buf = new StringBuilder();
appendResultDetails(buf, sResult);
buf.append(JMeterUtils.getResString("comparison_response_time")).append(currentTime);
result.addToSecondaryResult(buf.toString());
result.setFailureMessage(JMeterUtils.getResString("comparison_differ_time") //$NON-NLS-1$
+compareTime+JMeterUtils.getResString("comparison_unit")); //$NON-NLS-1$
break;
}
prevResult = sResult;
prevTime = currentTime;
}
}
}
private void compareContent(CompareAssertionResult result) {
if (compareContent) {
Iterator<SampleResult> iter = responses.iterator();
String prevContent = null;
SampleResult prevResult = null;
boolean success = true;
while (iter.hasNext()) {
SampleResult sResult = iter.next();
String currentContent = sResult.getResponseDataAsString();
currentContent = filterString(currentContent);
if (prevContent != null) {
success = prevContent.equals(currentContent);
}
if (!success) {
result.setFailure(true);
StringBuilder buf = new StringBuilder();
appendResultDetails(buf, prevResult);
buf.append(prevContent);
result.addToBaseResult(buf.toString());
buf = new StringBuilder();
appendResultDetails(buf, sResult);
buf.append(currentContent);
result.addToSecondaryResult(buf.toString());
result.setFailureMessage(JMeterUtils.getResString("comparison_differ_content")); //$NON-NLS-1$
break;
}
prevResult = sResult;
prevContent = currentContent;
}
}
}
private void appendResultDetails(StringBuilder buf, SampleResult result) {
final String samplerData = result.getSamplerData();
if (samplerData != null){
buf.append(samplerData.trim());
}
buf.append("\n"); //$NON-NLS-1$
final String requestHeaders = result.getRequestHeaders();
if (requestHeaders != null){
buf.append(requestHeaders);
}
buf.append("\n\n"); //$NON-NLS-1$
}
private String filterString(String content) {
if (stringsToSkip == null || stringsToSkip.size() == 0) {
return content;
} else {
for (SubstitutionElement regex : stringsToSkip) {
emptySub.setSubstitution(regex.getSubstitute());
content = Util.substitute(JMeterUtils.getMatcher(), JMeterUtils.getPatternCache().getPattern(regex.getRegex()),
emptySub, content, Util.SUBSTITUTE_ALL);
}
}
return content;
}
public void iterationStart(LoopIterationEvent iterEvent) {
responses = new LinkedList<SampleResult>();
}
public void iterationEnd(LoopIterationEvent iterEvent) {
responses = null;
}
/**
* @return Returns the compareContent.
*/
public boolean isCompareContent() {
return compareContent;
}
/**
* @param compareContent
* The compareContent to set.
*/
public void setCompareContent(boolean compareContent) {
this.compareContent = compareContent;
}
/**
* @return Returns the compareTime.
*/
public long getCompareTime() {
return compareTime;
}
/**
* @param compareTime
* The compareTime to set.
*/
public void setCompareTime(long compareTime) {
this.compareTime = compareTime;
}
/**
* @return Returns the stringsToSkip.
*/
public Collection<SubstitutionElement> getStringsToSkip() {
return stringsToSkip;
}
/**
* @param stringsToSkip
* The stringsToSkip to set.
*/
public void setStringsToSkip(Collection<SubstitutionElement> stringsToSkip) {
this.stringsToSkip = stringsToSkip;
}
}
Other JMeter examples (source code examples)Here is a short list of links related to this JMeter CompareAssertion.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.