Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to parse response of sample1 to create new sample in JMeter

Tags:

jmeter

I use JMeter to do performance test of web server. My test case is as following:

step1: send file update request to server.
step2: server will return some files URL as html response
step3: client need to create new request with the URL returned in step2,thus need to parse 
the response of step2.

I am new to JMeter, and do not know how to implement it. I basically learned JMeter about the pre-processor and post-processor, but still no clue about how to do.

like image 332
Simon Wang Avatar asked Jun 25 '12 09:06

Simon Wang


People also ask

What is response assertion in JMeter?

Assertion in JMeter is used to validate response of the request, that you have sent to the server. Assertion is a process where you verify expected result with the actual result of the request at run time. If you need to apply assertion on a particular Sampler, then add it as a child of that Sampler.

What is the use of JSR223 PostProcessor in JMeter?

The JSR223 postprocessor allows you to use precompiled scripts within test plans. The fact that the scripts are compiled before they are actually used brings a significant performance boost compared to other postprocessors.

What is pre processor in JMeter?

PreProcessors are JMeter elements that are used to execute actions before the sampler requests are executed in the test scenario. PreProcessors can be used for different performance testing needs, like fetching data from a database, setting a timeout between sampler execution or before test data generation.


2 Answers

Ok let's start before the first step :

Right click -> Add -> Threads (Users) -> Thread Group

  • Now the actual first step (If you use REST) :

Add -> Sampler -> Http Request

You have at the bottom part Send Files With the Request. You can add file attachment if that is what you asked.

  • Extracting response from the server :

Let's assume your response is this :

<Response>
  <name>StackOverflow.com</name>
  <url>http://stackoverflow.com/questions/11186423/how-to-parse-response-of-sample1-to-create-new-sample-in-jmeter</url>
</Response>

Here is what you do :

Right click on The http request you previously added (in step 1) -> Post Processors -> Xpath Extractor

Reference Name is the name of the variable in which you want to store the value. Let's name it url. And Xpath query is Response/url or //Response/url if you get more response tags. If you want the first one //Response[1]/url and so on..

  • Repeat step 1 (copy/paste sampler and remove the Xpath Extractor you don't need it anymore), and change the Server Name or IP to ${url} which is the value previously returned.

And Voila there you go. Let me know if you got more specific questions. Jmeter is fun.

Per Grace comment :

Wants to extract https://192.168.100.46/updserver/download?action=signature_download&amp;token=&#xd;

Out of response data :

<responseData class="java.lang.String">&lt;html&gt;&#xd;
&lt;body&gt;&#xd;
ERROR=0&#xd;
MSG=N/A&#xd;
FILELIST=1555;1340778737370;1526545487;&#xd;
VERSION=1.002&#xd;
URL=https://192.168.100.46/updserver/download?action=signature_download&amp;token=&#xd;
INTERVAL=0&#xd;
&lt;/body&gt;&#xd;
&lt;/html&gt;&#xd;
</responseData>

This should be pretty simple. Add a post processor -> Regular Expression Extractor and put the following :

Reference Name : url 
Regular Expression : (http[\S]+)
Template : $1$
Match No. (0 for Random): 1

So now you have url variable that you can use further in your test as ${url}. Let me know if that works for you. I tested with dummy sampler and it works for me.

like image 128
ant Avatar answered Oct 03 '22 02:10

ant


This is how I extract some value from url and pass it further as variable so next requests will contain it.

Here are some nice screenshot and wider description about making test in JMeter http://jmeter.apache.org/usermanual/build-web-test-plan.html

Add the Thread Group and HTTP Requests

When this HTTP Requests response with some data (in this example in URL) you want to extract it and us it after

So lets go:

  1. Go to your first HTTP Request after which one you receive response with variable:

    Add -> Post Processor -> Regular Expression Extractor

    In this window set:

    Response Field To Check: URL

    Reference Name: MY-CUSTOM-VARIABLE-NAME

    define name of variable whatever you like

    Regular Expression: permanent.part.of.url.com/([a-zA-Z0-9]*)

    so expression ([a-zA-Z0-9]*) is responsible for getting all occurrences of alphabetic and numeric chars after meeting permanent url at start

    Template: $1$

    only one expression is extracted in our case and it need to be read

    Match No. (0 for Random): 1

    in this case there is only one match, but if more occur you can choose which one use

  2. Now put extracted value into next HTTP Request Path: some.other.url.com/${MY-CUSTOM-VARIABLE-NAME}

    remember that you read JMeter variables with this pattern ${}, so use ${MY-CUSTOM-VARIABLE-NAME} whenever you need this value

Run your test and check what did you get in url of your request with MY-CUSTOM-VARIABLE-NAME Experiment with regexp to get desired output.

Here is blogpost about this stuff: http://kenning.co.nz/development/extracting-variables-using-regular-expressions-in-jmeter/

And always useful JMeter documentation: http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor

like image 40
pbaranski Avatar answered Oct 03 '22 01:10

pbaranski