jmeter icon indicating copy to clipboard operation
jmeter copied to clipboard

AutoCorrelation: Add initial support

Open t-imoto002 opened this issue 6 years ago • 59 comments

Description

New Feature Enhancement for auto correlation https://bz.apache.org/bugzilla/show_bug.cgi?id=63640

Motivation and Context

It is hard to fix JMeter's scripts for collaboration like session value. So, we created a prototype for the auto-correlation feature covering the following use case: a. Record the first test plan & Save it. b. Record the second test plan keep it open in JMeter and upload the first test plan for auto-correlation. c. Select the parameters for correlation and save the correlated test plan.

We shared the prototype to our internal teams to try and we received a positive feedback from them.

It encouraged us to share the idea with the community and we received a positive response from community as well.

  • Mr. Phillipe responded saying the community will definitely take interest in the PR.
  • Mr. Alex shared an additional use case which can be supported. Use case is to allow the user to export the correlation rules file from an existing correlated script. The user can use the rules to correlate scripts in future. These rules can be standardized and distributed across the community. Although this will be implemented in future.

How Has This Been Tested?

We have tested auto-correlation feature on in-house applications and global applications like gitlab, redmine, etc. Business logic is tested using JUnit Test with 100% coverage. GUI has been covered via Functional tests.

Screenshots (if appropriate):

https://bz.apache.org/bugzilla/attachment.cgi?id=36704

Types of changes

  • New feature (non-breaking change which adds functionality)

-New feature (non-breaking change which adds functionality) The following modules have been added in the code:

  1. Comparator (Correlation.java) - Used to compare parameters from two scripts.
  2. CSS Selector Extractor Creator (CreateCSSSelectorExtractor.java) - Used to create CSS Selector expression for a parameter in response data.
  3. Create Regular Expression Extractor (CorrelationExtractor.java) - Used to create Regular Expression for a parameter in a response data.

The following changes are done to the code

  1. GUI Action - "Correlation" (ActionNames.java, MenuFactory.java)
  2. JTable to Display parameters which are a candidate for correlation. (CorrelationTableModel.java, CorrelationGui.java)
  3. JFileChooser browse menu to browse for script. (CorrelationDialoger.java, FileDialoger.java)

Checklist:

  • [x] My code follows the code style of this project.
  • [ ] I have updated the documentation accordingly.

TODOs

  1. Mr. Phillipe had some initial comments on the enhancement proposal asking to support different extractors based on different response content type. We have implemented CSSSelectorExtractor and we have plan to implement XPath2Extractor and JSONPathExtractor in future.

  2. We have plan to implement the use case shared by Mr. Alex as mentioned in the motivation, i.e., allow the user to export auto-correlation rules file and use that rule file to correlate scripts.

t-imoto002 avatar Sep 24 '19 09:09 t-imoto002

Hi,

I would personally like to be in the team that is testing and validating the Auto-Correlation feature in Jmeter.

Developers - Please contact me privately anytime with any requests.

Thank you very much for all the efforts and cooperation.

Sincerely,

Shay Ginsbourg

Former HP (Mercury) LoadRunner QA Manager

From: Graham Russell [email protected] Sent: Thursday, September 26, 2019 19:12 To: apache/jmeter [email protected] Cc: Subscribed [email protected] Subject: Re: [apache/jmeter] AutoCorrelation: Add initial support (#499)

@ham1 commented on this pull request.

I think this functionality is really valuable for JMeter, I've just made a few comments only based upon quickly reading the code, with the aim of trying to make it easier to read :)


In src/components/src/main/java/org/apache/jmeter/extractor/CreateCssSelectorExtractor.java https://github.com/apache/jmeter/pull/499#discussion_r328687471 :

  • * @param requestUrl              URL of the request whose response yields the
    
  • *                                parameter required to correlate
    
  • * @param contentType             responseData content type
    
  • * @return
    
  • * @throws Error
    
  • * @throws UnsupportedEncodingException
    
  • */
    
  • public static Map<String, String> createCssSelectorExtractor(String html, String attributeValue,
  •        String correlationVariableName, String requestUrl, String contentType) throws UnsupportedEncodingException {
    
  •    // parse the HTML string
    
  •    Document doc = getDocument(html);
    
  •    Map<String, String> cssSelectorExtractor = new HashMap<>();
    
  •    String cssSelectorExpression;
    

Please declare variables where they are initialised (or at closed as possible in scope)


In src/components/src/main/java/org/apache/jmeter/extractor/CreateCssSelectorExtractor.java https://github.com/apache/jmeter/pull/499#discussion_r328687677 :

  • static final String TEST_NAME = "testname";
  • static final String ONE = "1";
  • /**
  • * @param html                    HTML response
    
  • * @param attributeValue          Value of the parameter required to correlate
    
  • * @param correlationVariableName alias of the correlated variable
    
  • * @param requestUrl              URL of the request whose response yields the
    
  • *                                parameter required to correlate
    
  • * @param contentType             responseData content type
    
  • * @return
    
  • * @throws Error
    
  • * @throws UnsupportedEncodingException
    
  • */
    

no need for the extra blank line :)


In src/core/src/main/java/org/apache/jmeter/functions/CorrelationFunction.java https://github.com/apache/jmeter/pull/499#discussion_r328688911 :

    • See the License for the specific language governing permissions and
    • limitations under the License.
  • */

+package org.apache.jmeter.functions; + +import org.apache.commons.lang3.StringUtils; + +/**

    • utility class which contains utility methods.
  • */ +public class CorrelationFunction {
  • // Initialize constants variables

I don't think this comment is required.


In src/core/src/main/java/org/apache/jmeter/gui/CorrelationTableModel.java https://github.com/apache/jmeter/pull/499#discussion_r328689544 :

    • 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.gui; + +import javax.swing.table.AbstractTableModel; + +public class CorrelationTableModel extends AbstractTableModel { +

  • /**
  • * serialVersionUID
    

This comment isn't required.


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/CorrelationGui.java https://github.com/apache/jmeter/pull/499#discussion_r328690970 :

  •        // prepare the list of user selected parameters
    
  •        for (int i = 0; i < rowCount; i++) {
    
  •            if ((Boolean) jTable.getValueAt(i, 0) && jTable.getValueAt(i, 1) != null) {
    
  •                argumentsList.add(jTable.getValueAt(i, 1).toString());
    
  •                bodyParameterMap.put(jTable.getValueAt(i, 1).toString(), jTable.getValueAt(i, 3).toString());
    
  •            }
    
  •        }
    
  •        CorrelationExtractor.readResponse(argumentsList, bodyParameterMap);
    
  •        frame.dispose();
    
  •    }
    
  •    );
    
  •    /**
    

The comments in this function can be a // comment not a JavaDoc comments.


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/Correlation.java https://github.com/apache/jmeter/pull/499#discussion_r328691762 :

  • public static final String UNDERSCORE = "_";
  • public static final String EQUAL = "=";
  • private Correlation() {
  • }
  • /**
  • * Compare the list of api-request objects and prepare the map containing
    
  • * the parameter list which are candidates for correlation.
    
  • *
    
  • * @param file JMX file whose parameters need to be extracted
    
  • */
    
  • public static void extractParameters(File file) {
  •    if (file == null) {
    
  •        log.error("Unable to load JMX file.");
    

Should this throw an exception or return? Otherwise the behaviour when the file is null is difficult to understand.


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/Correlation.java https://github.com/apache/jmeter/pull/499#discussion_r328696144 :

  • }
  • /**
  • * recursively call the method to find the HTTPSamplerProxy object and
    
  • * prepare a list.
    
  • *
    
  • * @param tree
    
  • * @return Set of HTTPSampleProxy objects.
    
  • */
    
  • private static Set<HTTPSamplerProxy> convertSubTree(HashTree tree) {
  •    for (Object o : new LinkedList<>(tree.list())) {
    
  •        TestElement item = (TestElement) o;
    
  •        if (item instanceof HTTPSamplerProxy) {
    
  •            HTTPSamplerProxy proxyObj = (HTTPSamplerProxy) item;
    
  •            samplerList.add(proxyObj);
    

Does this have to be a member variable? It seems a little confusing to me to be modifying the state of this object and then returning it from this method.It's also not obvious from the name.

It might be clearer to create a local list samplerList here, return that then add the result to the global samplerList if required in the calling method.


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/Correlation.java https://github.com/apache/jmeter/pull/499#discussion_r328697823 :

+import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy; +import org.apache.jmeter.protocol.http.util.HTTPArgument; +import org.apache.jmeter.save.SaveService; +import org.apache.jmeter.testelement.TestElement; +import org.apache.jmeter.util.JMeterUtils; +import org.apache.jorphan.collections.HashTree; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory;

+public class Correlation { +

  • private static final Logger log = LoggerFactory.getLogger(Correlation.class);
  • // Initialize member variables
  • private static Map<String, List<String>> candidatesMap = new HashMap<>();
  • private static Set<HTTPSamplerProxy> samplerList = new HashSet<>();

Why is this called SampleList but is a Set?


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/CorrelationExtractor.java https://github.com/apache/jmeter/pull/499#discussion_r328699163 :

  •        Map<String, String> bodyParameterMap) {
    
  •    readBufferObject(arguments, bodyParameterMap);
    
  • }
  • /**
  • * Iterate the buffer object and prepare the list of extractor tag.
    
  • *
    
  • * @param arguments
    
  • * @param bodyParameterMap
    
  • */
    
  • public static void readBufferObject(List<String> arguments,
  •        Map<String, String> bodyParameterMap) {
    
  •    for (Object sampler : CorrelationRecorder.buffer) {
    
  •        log.info("processing of buffer objects start.");
    

I think info is too high a level for this, especially inside a loop, perhaps debug?


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/CorrelationExtractor.java https://github.com/apache/jmeter/pull/499#discussion_r328699987 :

  • /**
  • * create the extractor tags based on the content type. eg. {if
    
  • * contentType:text/html then create the HTML extractor tag.}
    
  • *
    
  • * @param sampleResult
    
  • * @param arguments
    
  • * @param bodyParameterMap
    
  • */
    
  • public static void createExtractor(SampleResult sampleResult,List<String> arguments, Map<String, String> bodyParameterMap) {
  •    // TODO-support more extractors like JSON Path
    
  •    // extractor and XPath2 extractor.
    
  •    for (String argument : arguments) {
    
  •        try {
    
  •            Map<String, String> htmlExtractor = CreateCssSelectorExtractor.createCssSelectorExtractor(sampleResult.getResponseDataAsString(),
    

Could this line be made slightly more readable, something like

Map<String, String> htmlExtractor = CreateCssSelectorExtractor.createCssSelectorExtractor( sampleResult.getResponseDataAsString(), bodyParameterMap.get(argument), argument, sampleResult.getSampleLabel(), sampleResult.getContentType());


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/CorrelationExtractor.java https://github.com/apache/jmeter/pull/499#discussion_r328700972 :

  • * @param argument
    
  • * @return Map Modified map with escaped or decoded values
    
  • */
    
  • public static Map<String, String> modifyValuesForRegularExpression(Map<String, String> map, String argument) {
  •    Set<Entry<String, String>> entries = map.entrySet();
    
  •    try {
    
  •        for (Entry<String, String> entry : entries) {
    
  •            String key = entry.getKey();
    
  •            String temp = map.get(argument);
    
  •            if (temp.indexOf("%3A") >= 0) {
    
  •                map.put(key, temp.replace("%3A", ":"));
    
  •            } else if (temp.indexOf('+') >= 0
    

Could .indexOf(X) >= 0 be replaced with .contains(X)?


In src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/gui/action/CorrelationExtractor.java https://github.com/apache/jmeter/pull/499#discussion_r328701488 :

  •        RegexExtractor regexExtractor = (RegexExtractor) testElement;
    
  •        regexExtractor.setRefName(extractor.get(REGEX_EXTRACTOR_VARIABLE_NAME));
    
  •        regexExtractor.setRegex(extractor.get(REGEX_EXTRACTOR_EXPRESSION));
    
  •        regexExtractor.setDefaultValue(ONE);
    
  •        regexExtractor.setMatchNumber(ONE);
    
  •        return regexExtractor;
    
  •    }
    
  •    return null;
    
  • }
  • /**
  • * @param arguments
    
  • * @param bodyParameterMap
    
  • */
    
  • private static void updateJmxFile(List<String> arguments,

Could params be kept visually closer together e.g.

private static void updateJmxFile( List<String> arguments, String, String> bodyParameterMap) {


In src/protocol/http/src/test/java/org/apache/jmeter/gui/action/TestCorrelationExtractor.java https://github.com/apache/jmeter/pull/499#discussion_r328702078 :

+public class TestCorrelationExtractor { + +

  • @SuppressWarnings("deprecation")
  • @Test
  • public void testcreateExtractor() {
  •    Map<String, String> bodyParameterMap = new HashMap<>();
    
  •    bodyParameterMap.put("_csrf", "7d1de481-34af-4342-a9b4-b8288c451f7c");
    
  •    List<String> arguments = new ArrayList<>();
    
  •    arguments.add("_csrf");
    
  •    SampleResult sampleResult = new SampleResult();
    
  •    sampleResult.setResponseData("<html><head><title>Login Page</title></head><body onload='document.f.username.focus();'>"
    

Does this test data need to be so large? Could some of the tags or tag attributes or text be reduced/removed to make the purpose of the test clearer?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/apache/jmeter/pull/499?email_source=notifications&email_token=AAXQDSS57O4JSQPRVZC46Y3QLTNNJA5CNFSM4IZ46XI2YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCGBVSQQ#pullrequestreview-293820738 , or mute the thread https://github.com/notifications/unsubscribe-auth/AAXQDSUNS6WPD7U2CI72M43QLTNNJANCNFSM4IZ46XIQ . https://github.com/notifications/beacon/AAXQDSXGUPRGLQREK7LKURLQLTNNJA5CNFSM4IZ46XI2YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCGBVSQQ.gif

sginsbourg avatar Sep 26 '19 17:09 sginsbourg

Hi, I would personally like to be in the team that is testing and validating the Auto-Correlation feature in Jmeter. Developers - Please contact me privately anytime with any requests. Thank you very much for all the efforts and cooperation. Sincerely, Shay Ginsbourg Former HP (Mercury) LoadRunner QA Manager

That is easy. Clone this PR, build it, test it and give feedback (either here or on the mailing list). Looking forward to your comments.

FSchumacher avatar Sep 27 '19 08:09 FSchumacher

Where are the installation and user operational instructions ?

Thanks,

Shay

From: Felix Schumacher [email protected] Sent: Friday, September 27, 2019 11:08 To: apache/jmeter [email protected] Cc: Shay Ginsbourg [email protected]; Comment [email protected] Subject: Re: [apache/jmeter] AutoCorrelation: Add initial support (#499)

Hi, I would personally like to be in the team that is testing and validating the Auto-Correlation feature in Jmeter. Developers - Please contact me privately anytime with any requests. Thank you very much for all the efforts and cooperation. Sincerely, Shay Ginsbourg Former HP (Mercury) LoadRunner QA Manager That is easy. Clone this PR, build it, test it and give feedback (either here or on the mailing list). Looking forward to your comments.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/apache/jmeter/pull/499?email_source=notifications&email_token=AAXQDSUPNYS5G5YEY4TDD3LQLW5NFA5CNFSM4IZ46XI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD7YD7UQ#issuecomment-535838674 , or mute the thread https://github.com/notifications/unsubscribe-auth/AAXQDSQ6VD4VWPFJ2X2RGHLQLW5NFANCNFSM4IZ46XIQ .

sginsbourg avatar Sep 27 '19 08:09 sginsbourg

Where are the installation and user operational instructions ? Thanks, Shay

For building take a look at CONTRIBUTING.md. Instructions for this extension should be included in the PR. If they are not, then reporting it would be your first completed task :) Instructions on general usage of JMeter can be found on the JMeter homepage

FSchumacher avatar Sep 27 '19 08:09 FSchumacher

@sginsbourg ,

Instructions to test this PR are as follows:

git clone --depth 100 https://github.com/t-imoto002/jmeter.git jmeter_autocorrelation
cd jmeter_autocorrelation
./gradlew runGui

It will build and launch JMeter, then you could follow the instructions in "Motivation and Context" from the first comment.

vlsi avatar Sep 27 '19 08:09 vlsi

To: sginsbourg-san

Where are the installation and user operational instructions ?

Attached screen shot explain use case of auto-correlation. https://bz.apache.org/bugzilla/attachment.cgi?id=36704

Official documents will prepare, all of the requirements and fix is finished.

t-imoto002 avatar Sep 27 '19 08:09 t-imoto002

To: sginsbourg-san

I would personally like to be in the team that is testing and validating the Auto-Correlation feature in Jmeter.

Thank you for interesting our request. I want to work with you. So if any idea, please share us.

t-imoto002 avatar Sep 27 '19 08:09 t-imoto002

Hi,

Can the AutoCorrelation be compiled in the form of a standard JAR that is externally added to Jmeter (in the style of the great collection of Plugins) ?

That would make the AutoCorrelation accessible to every Jmeter user and allow a lot of testing a debugging?

Please consider creating that JAR.

Regards,

Shay Ginsbourg

Former HP (Mercury) LoadRunner QA Manager

From: Felix Schumacher [email protected] Sent: Friday, September 27, 2019 11:33 To: apache/jmeter [email protected] Cc: Shay Ginsbourg [email protected]; Comment [email protected] Subject: Re: [apache/jmeter] AutoCorrelation: Add initial support (#499)

Where are the installation and user operational instructions ? Thanks, Shay

For building take a look at CONTRIBUTING.md https://github.com/apache/jmeter/blob/master/CONTRIBUTING.md . Instructions for this extension should be included in the PR. If they are not, then reporting it would be your first completed task :) Instructions on general usage of JMeter can be found on the JMeter homepage https://jmeter.apache.org

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/apache/jmeter/pull/499?email_source=notifications&email_token=AAXQDSTYLX5WEGMXNVZJX4DQLXANTA5CNFSM4IZ46XI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD7YGEJQ#issuecomment-535847462 , or mute the thread https://github.com/notifications/unsubscribe-auth/AAXQDSWZDQNOBG7FWVYH533QLXANTANCNFSM4IZ46XIQ . https://github.com/notifications/beacon/AAXQDSX57WIDQB7DB6AUCY3QLXANTA5CNFSM4IZ46XI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD7YGEJQ.gif

sginsbourg avatar Sep 28 '19 18:09 sginsbourg

Codecov Report

Merging #499 into master will decrease coverage by 0.75%. The diff coverage is 22.44%.

Impacted file tree graph

@@             Coverage Diff              @@
##             master     #499      +/-   ##
============================================
- Coverage     55.28%   54.53%   -0.76%     
- Complexity    10088    10205     +117     
============================================
  Files          1038     1068      +30     
  Lines         63858    65346    +1488     
  Branches       7229     7435     +206     
============================================
+ Hits          35306    35637     +331     
- Misses        26060    27178    +1118     
- Partials       2492     2531      +39     
Impacted Files Coverage Δ Complexity Δ
...apache/jmeter/visualizers/CorrelationRecorder.java 0.00% <0.00%> (ø) 0.00 <0.00> (?)
.../jmeter/visualizers/ViewResultsFullVisualizer.java 40.14% <ø> (ø) 17.00 <0.00> (ø)
.../java/org/apache/jmeter/gui/util/FileDialoger.java 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
.../main/java/org/apache/jmeter/save/SaveService.java 73.79% <ø> (ø) 41.00 <0.00> (ø)
...relation/rule/BoundryExtractorCorrelationRule.java 0.00% <0.00%> (ø) 0.00 <0.00> (?)
...rotocol/http/correlation/rule/CorrelationRule.java 0.00% <0.00%> (ø) 0.00 <0.00> (?)
...correlation/rule/HtmlExtractorCorrelationRule.java 0.00% <0.00%> (ø) 0.00 <0.00> (?)
...correlation/rule/JsonExtractorCorrelationRule.java 0.00% <0.00%> (ø) 0.00 <0.00> (?)
...orrelation/rule/RegexExtractorCorrelationRule.java 0.00% <0.00%> (ø) 0.00 <0.00> (?)
...rrelation/rule/XPath2ExtractorCorrelationRule.java 0.00% <0.00%> (ø) 0.00 <0.00> (?)
... and 57 more

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 2289ac9...c77b62b. Read the comment docs.

codecov-io avatar Sep 30 '19 06:09 codecov-io

To: sginsbourg -san.

Can the AutoCorrelation be compiled in the form of a standard JAR that is externally added to Jmeter (in the style of the great collection of Plugins) ?

Currently auto correlation feature related to JMeter's code. Because it need to load JTL file, and for easy to use it read JTL variable on memory. So at now, I have not planed standard jar.

Our team consider this issue, and If you try, we are very happy.

t-imoto002 avatar Oct 01 '19 11:10 t-imoto002

To: FSchumacher-san.

About this pull request, currently we get following 3 feedback and requirement items.

  • Architecture change: Different extractors should support different response content type.
  • Add UseCase : Import and export correlation rule.
  • Auto correlation feature release as plugin.

Should I managed these item as other Enhancements of bugzilla and other pull request ?

t-imoto002 avatar Oct 04 '19 00:10 t-imoto002

To: FSchumacher-san.

About this pull request, currently we get following 3 feedback and requirement items.

* Architecture change: Different extractors should support different response content type.

* Add UseCase : Import and export correlation rule.

* Auto correlation feature release as plugin.

Should I managed these item as other Enhancements of bugzilla and other pull request ?

Hello, It would be better to do it in this PR. Regards

pmouawad avatar Oct 08 '19 20:10 pmouawad

To: Pmouawad-san

Thanks comments. Our team first experienced to contribute this kind of new feature.

I want to know what is the conditions to merged and release this pull request to next release. So would you advice me what kind of task that we should.

t-imoto002 avatar Oct 15 '19 10:10 t-imoto002

@vlsi

Instructions to test this PR are as follows:

git clone --depth 100 https://github.com/t-imoto002/jmeter.git jmeter_autocorrelation
cd jmeter_autocorrelation
./gradlew runGui

It will build and launch JMeter, then you could follow the instructions in "Motivation and Context" from the first comment.

Hi,

I was able to build it following these instructions - but I don't see "correlate" in the right-click menu. Is it still valid way to test it?

Thanks, Alex

apodelko avatar Jan 15 '20 16:01 apodelko

@apodelko , the build instructions are still valid, however, I do not follow the development of this feature closely, so I don't really know the way to use it.

However, it looks like the feature has been moved to Tools -> Correlation menu

vlsi avatar Jan 15 '20 17:01 vlsi

As vlsi-san reply. We change the location of correlation menu.

Tools -> Correlation have 3 menu.

  • Export Rule Export correlation setting as rule file.

  • Import Rule Import correlation rule that previously made.

  • JMX File Input previous execution of JMX File, and list up correlation list.

So, if the comments of menu location and name, please comments me .

thanks.

@vlsi

Instructions to test this PR are as follows:

git clone --depth 100 https://github.com/t-imoto002/jmeter.git jmeter_autocorrelation
cd jmeter_autocorrelation
./gradlew runGui

It will build and launch JMeter, then you could follow the instructions in "Motivation and Context" from the first comment.

Hi,

I was able to build it following these instructions - but I don't see "correlate" in the right-click menu. Is it still valid way to test it?

Thanks, Alex

t-imoto002 avatar Jan 16 '20 05:01 t-imoto002

Do you have a default set of correlation rules ? I see examples in the test classes ( _csrf, Bearer or [id=javax.faces.ViewState]) but you have a file with rules ? What is the format rule syntax in JSON ? More generally do you have a user manual for this very interesting feature ?

vdaburon avatar Jan 29 '20 17:01 vdaburon

To: Vdaburon-san.

Thanks comments.

Do you have a default set of correlation rules ? I see examples in the test classes ( _csrf, Bearer or [id=javax.faces.ViewState]) but you have a file with rules ?

At now, we don't have default correlation rule. And have no plan to add Jmeter's function. But I want to make and contribute same famous correlation rule like spring, JSF, dot net framework. The procedure and upload site is now considering.

What is the format rule syntax in JSON ? Yes. Our rule format is JSON.

More generally do you have a user manual for this very interesting feature ? We create auto-correlation manual as following, if you can please try our feature.

https://t-imoto002.github.io/autocorrelation_doc/usermanual/correlation.html

Thanks.

t-imoto002 avatar Jan 30 '20 01:01 t-imoto002

Hi, I compiled the auto correlation feature and use it on simple personal web application. And the correlation look fine. In the documentation could you be more exhaustive with JSON rule format.

For example, you add the regex_header but what is the regex_body ? I think is important to add all possibilities (boundary_extractor, regex_extractor ...) May be the default value could be optional but could be declare in the rule json Example : {"name":"refDoc","lBoundary":"Doc=","rBoundary":""> D","type":"boundary_extractor", "defaultValue":"##refDoc##"}

Less important, the naming rule for the correlation variable could be prefixe, upcase, or caseFormatSynthaxe ( LOWER_CAMEL, LOWER_HYPHEN, LOWER_UNDERSCORE, UPPER_CAMEL, UPPER_UNDERSCORE) https://guava.dev/releases/20.0/api/docs/com/google/common/base/CaseFormat.html This configuration could be global before rules { globalConfig { "prefixeVariable":"V_", "suffixeVariable":"", "syntaxe":"UPPER_UNDERSCORE", "defaultValuePrefix":"##", "defaultValueSuffix":"_NOT_FOUND"}

{"name":"refDoc","lBoundary":"Doc=","rBoundary":""> D","type":"boundary_extractor"} becomes {"name":"V_REF_DOC","lBoundary":"Doc=","rBoundary":""> D","type":"boundary_extractor", "defaultValue":"##V_REF_DOC_NOT_FOUND"}

vdaburon avatar Jan 31 '20 12:01 vdaburon

To: vdaburon-san.

I compiled the auto correlation feature and use it on simple personal web application. And the correlation look fine.

In the documentation could you be more exhaustive with JSON rule format.

Our intention was to not allow the user to create the rule file manually, rather, the user can correlate using JMX file once and export existing extractors into rule file by using Export Rule feature.

For example, you add the regex_header but what is the regex_body ? I think is important to add all possibilities (boundary_extractor, regex_extractor ...) May be the default value could be optional but could be declare in the rule json Example : {"name":"refDoc","lBoundary":"Doc=","rBoundary":""> D","type":"boundary_extractor", "defaultValue":"##refDoc##"} We will update the existing documents with the details of all extractors with their rule file keys and values.

Less important, the naming rule for the correlation variable could be prefixe, upcase, or caseFormatSynthaxe ( LOWER_CAMEL, >LOWER_HYPHEN, LOWER_UNDERSCORE, UPPER_CAMEL, UPPER_UNDERSCORE) https://guava.dev/releases/20.0/api/docs/com/google/common/base/CaseFormat.html This configuration could be global before rules { globalConfig { "prefixeVariable":"V_", "suffixeVariable":"", "syntaxe":"UPPER_UNDERSCORE", "defaultValuePrefix":"##", >"defaultValueSuffix":"_NOT_FOUND"} {"name":"refDoc","lBoundary":"Doc=","rBoundary":""> D","type":"boundary_extractor"} becomes {"name":"V_REF_DOC","lBoundary":"Doc=","rBoundary":""> D","type":"boundary_extractor", "defaultValue":"##V_REF_DOC_NOT_FOUND"} Since we have not considered above in our previous development. It requires further investigation. So please guide us how to proceed further.

Thanks.

t-imoto002 avatar Feb 12 '20 01:02 t-imoto002

Hello @pmouawad san,

Thank you for sharing the comments, they are very good suggestions. We have incorporated your comments. Please check and let us know, if we have resolved as per your expectations. Also let us know, in case of any other comment.

Thanks.

AbhaySinghNec avatar Apr 03 '20 10:04 AbhaySinghNec

@t-imoto002 , can you please clarify why the feature is named correlation? Frankly speaking, it is not clear what is correlated with what.

vlsi avatar Apr 07 '20 10:04 vlsi

Hi Vladimir, Dynamic variables. It is quite an established term in load testing - see, for example, https://www.blazemeter.com/blog/how-to-handle-correlation-in-jmeter/https://huddle.eurostarsoftwaretesting.com/tips-correlation-load-testing/ While there were some complains that is not a good use of that term (considering its meaning in math), it looks like it is too late to change - especially because there is no alternative terms for that.

Thanks,Alex

On Tuesday, April 7, 2020, 6:46:09 AM EDT, Vladimir Sitnikov <[email protected]> wrote:  

@t-imoto002 , can you please clarify why the feature is named correlation? Frankly speaking, it is not clear what is correlated with what.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

apodelko avatar Apr 07 '20 12:04 apodelko

Hi all.

Is auto-correlation functionality included in Jmeter 5.3 ?

When is its release due ?

Thank you very much, Shay

On Tue, Apr 7, 2020 at 3:25 PM Alexander Podelko [email protected] wrote:

Hi Vladimir, Dynamic variables. It is quite an established term in load testing - see, for example,

https://www.blazemeter.com/blog/how-to-handle-correlation-in-jmeter/https://huddle.eurostarsoftwaretesting.com/tips-correlation-load-testing/ While there were some complains that is not a good use of that term (considering its meaning in math), it looks like it is too late to change - especially because there is no alternative terms for that.

Thanks,Alex

On Tuesday, April 7, 2020, 6:46:09 AM EDT, Vladimir Sitnikov < [email protected]> wrote:

@t-imoto002 , can you please clarify why the feature is named correlation? Frankly speaking, it is not clear what is correlated with what.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/apache/jmeter/pull/499#issuecomment-610356110, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXQDSROF77AEULHUNZX3QLRLMLU5ANCNFSM4IZ46XIQ .

--

Sincerely,

Shay Ginsbourg *Performance, Automation, and Load Testing Expert. * ​Regulatory Affairs Consultant​ for Medical Software​. (Since 2008)

Formerly QA Manager of LoadRunner at Mercury Interactive

M.Sc. cum laude in Bio-Medical Engineering M.Sc. in Mechanical Engineering

Mobile: +972(0)54-6690915 Email: [email protected]

Visit my personal page on LinkedIn at: http://www.linkedin.com/in/shayginsbourg

sginsbourg avatar Apr 07 '20 12:04 sginsbourg

Hello @sginsbourg , Not for now.

Could you checkout jmeter from github and do: git clone https://github.com/apache/jmeter git checkout -b t-imoto002-master master git pull https://github.com/t-imoto002/jmeter.git master ./gradlew clean runGui

And test it, then give some feedback ?

Thank you

pmouawad avatar Apr 07 '20 18:04 pmouawad

@t-imoto002 , can you please clarify why the feature is named correlation? Frankly speaking, it is not clear what is correlated with what.

I think "correlation" is frequently used at Jmeter's load testing For example, following blog explain "correlation".

https://tudip.com/blog-post/correlation-in-jmeter-using-post-processor-regular-expression-extractor/

t-imoto002 avatar Apr 08 '20 00:04 t-imoto002

Other load testing tool (like Loadrunner) use the correlation name. I saw this name correlation when i use LR in 1999.

vdaburon avatar Apr 09 '20 15:04 vdaburon

Indeed this is the exact correct name.

The recording is being correlated to the replay so that dynamic values are detected and regex-ed.

-S

On Thu, Apr 9, 2020 at 6:37 PM vdaburon [email protected] wrote:

Other load testing tool (like Loadrunner) use the correlation name. I saw this name correlation when i use LR in 1999.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/apache/jmeter/pull/499#issuecomment-611595962, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXQDSQMRUYJUETWRJRBRP3RLXTT7ANCNFSM4IZ46XIQ .

--

Sincerely,

Shay Ginsbourg *Performance, Automation, and Load Testing Expert. * ​Regulatory Affairs Consultant​ for Medical Software​. (Since 2008)

Formerly QA Manager of LoadRunner at Mercury Interactive

M.Sc. cum laude in Bio-Medical Engineering M.Sc. in Mechanical Engineering

Mobile: +972(0)54-6690915 Email: [email protected]

Visit my personal page on LinkedIn at: http://www.linkedin.com/in/shayginsbourg

sginsbourg avatar Apr 09 '20 16:04 sginsbourg

Hello @t-imoto002 , I tried to follow the Auto Correlation manual. I did a first recording and saved Test Plan in file 1 I did a second recording and saved Test Plan in file 2 I do step 3, I get "No Response data found. Make sure you have recorded the script and not opened it."

I think there is something missing in documentation. Don't we need to add Correlation Response Recorder as a child of HTTP(S) Test Script Recorder ?

pmouawad avatar Apr 28 '20 20:04 pmouawad

Hi all. Is auto-correlation functionality included in Jmeter 5.3 ? When is its release due ? Thank you very much, Shay On Tue, Apr 7, 2020 at 3:25 PM Alexander Podelko [email protected] wrote: Hi Vladimir, Dynamic variables. It is quite an established term in load testing - see, for example, https://www.blazemeter.com/blog/how-to-handle-correlation-in-jmeter/https://huddle.eurostarsoftwaretesting.com/tips-correlation-load-testing/ While there were some complains that is not a good use of that term (considering its meaning in math), it looks like it is too late to change - especially because there is no alternative terms for that. Thanks,Alex On Tuesday, April 7, 2020, 6:46:09 AM EDT, Vladimir Sitnikov < @.***> wrote: @t-imoto002 , can you please clarify why the feature is named correlation? Frankly speaking, it is not clear what is correlated with what. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub <#499 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXQDSROF77AEULHUNZX3QLRLMLU5ANCNFSM4IZ46XIQ . -- Sincerely, Shay Ginsbourg *Performance, Automation, and Load Testing Expert. * ​Regulatory Affairs Consultant​ for Medical Software​. (Since 2008) Formerly QA Manager of LoadRunner at Mercury Interactive M.Sc. cum laude in Bio-Medical Engineering M.Sc. in Mechanical Engineering Mobile: +972(0)54-6690915 Email: [email protected] Visit my personal page on LinkedIn at: http://www.linkedin.com/in/shayginsbourg

Hello, You request feature integration but have you tested it ? What is your feedback ? Regards

pmouawad avatar Apr 28 '20 20:04 pmouawad