The Apache JMeter™ application is open source software, a 100% pure Java application originally designed to load test functional behavior and measure performance.

1 Installing JMeter

  1. Download application

    JMeter application could be downloaded from JMeter official site. The following documentation has been implemented with JMeter v.3.1. From the given site you can download either binaries or source code of JMeter application. In order to use JMeter for testing Axional Studio application, we recommend downloading just the binaries.

  2. Unzip content

    The downloaded content is a compressed .tgz or .zip file. After uncompressing the file you will get a folder containing the binaries of JMeter application. Move the folder wherever you want in your filesystem

  3. Execute application

    As jMeter is a Java application, the best way to execute the application cross all operating systems is executing the ApacheJMeter.jar file inside the /bin directory inside the uncompressed folder. Executing that file the JMeter application will immediately start.

Info

For getting further information about JMeter requirements and installation visit the Get Started manual from the official site.

2 Configuring JMeter

JMeter is a tool for setting and executing automatic tests, generally based on testing automation plan design. The design could be very simple or incredibly complex, depending on the purpose of the test. In any case, developing the testing automation plan design is out of the objectives of this documentation. Then, in order to make this documentation as simple as possible we will define the simplest design, which consists of a single Test plan and a single Thread Group.

2.1 Creating Test Plan

Once the application is open a Test plan is created by default. You can rename it with a proper name for the current test plan, for example we will use the name Testing Axional Studio.

2.2 Adding HTTP Request Defaults

An HTTP Request Defaults configuration is not required, but is very advisable in order to have a centralized configuration for further requests. It allows, for example, changing the application server destination of following requests just modifying this configuration. The alternative will be to specify all request setting on each HTTP Requests, which we will see forward.

Taking this into account, for creating an HTTP Request Defaults we have to right click on the Test Plan and choose the option Add/Config Element/HTTP Request Defaults. The settings we will define by the default for each HTTP Request are:

  • Server Name or IP. As we are executing test locally, we will use the server name localhost.
  • Port Number. The default port number for Axional Studio application server is 8080.

2.3 Adding Thread Group

The next step is creating a Thread Group, for this purpuse you must right click over the test plan and select the option Add/Thread (Users)/Thread Group from the context menu.

Thread Group elements are the begging points of any test plan, each element controls the number of threads JMeter will use to execute your test. The controls for a thread group allow you to:

  • Set the number of threads
  • Set the ramp-up period, which allows stress progression by indicating how long it will take to reach the full number of threads.
  • Set the number of times to execute the test

Each thread will execute the test plan independently of other test threads. Multiple threads are used to simulate concurrent connections to your server application.

2.4 Login with Axional Studio

  • Login through HTTP Request

    The simplest way to login into Axional Studio application is via an HTTP Request to the login page. Then, for creating an HTTP Request we have to right click on the previously created Thread Group and choosing Add/Sampler/HTTP Request. Once created, we have to define the following settings:

    • Method: GET
    • Path: /account/j_security_check
    Send Parameters With the Request
    Name Value Encode? Include Equals?
    j_username myUserName
    j_password myPassword

    In order to execute further HTTP Request in an authenticated session context, each Thread Group must have a Login HTTP Request before any other HTTP Request.

    Rember to setup the server using FORM authentication without salt. If server has salt enabled, basic authentication will fail cause password will not be hashed with server session salt key.
  • Login using tokens

    There are two token login modes.

    • Login: Using a token to identify yourself in the system. This token could be used along a time period.
    • Process execution: This token allows user to execute a system XSQL-Script resource without using username and password. When execution ends up user will be logged out.

    Visit link for more detailed information.

2.5 View Test Result

Once here, we were able to execute the test plan and login to Axional Studio application, but what is the result of the execution? In order to capture the results of a test execution we need to create at least one Listener, for example a View Results Tree will serve for our purpose. Then, for creating a View Results Tree we have to right click on the Test Plan and choosing Add/Listeners/View Results Tree.

Afterwards, we can execute the test plan, via the play button, and we will see the execution results on the created View Results. If you analyze the result of the Login HTTP Request you could see the entire request message, the response, the redirects, etc.

2.6 Evaluating Results

As you can see in the HTTP Login case, all executions of test plan are correct, even if login parameters are incorrect. That is, because for the testing evaluator any HTTP Request is correct unless otherwise noted. So, if we want to introduce any restricion for evaluating the given response we should add Assertions.

It exists many kinds of Assertion, for evaluating the content of the response, it's size, the response type etc.

For example, we will create a Response Asertion to evaluate that the login is successful, in that case we know that if the login is successful we will be redirected to /os/desktop. Then, we have to right click on the previously created HTTP Login Request Sampler and choosing Add/Assertion/Response Assertion

3 Test cases

We will use JMeter to setup test cases.

3.1 Accessing an object

Using the HTTP Request Sampler you can perform a test plan on the execution of a particular object. Below is the configuration example to access the ctercero object.

The path parameter for method Get request has the following format:

Copy
/apps/jrep/adapter/{adapterID}/runtime/json

Where adapterID is:

  1. Object code
  2. Database
  3. Condition
  4. Meta Condition
  5. Order by
  6. Page position

Example:

Copy
/apps/jrep/adapter/gcompedh&dbtest&1=1&&gcompedh.delega,gcompedh.cabid DESC&0/runtime/json
  • Accessing the ctercero object
    • Method: GET
    • Path: /apps/jrep/adapter/ctercero&dbtest&1=1&&codigo&0/runtime/json

3.2 Accessing a report

Using the HTTP Request Sampler you can perform a test plan on the execution of a particular report. Below is the configuration example to access the PURCHASE SITUATION BY ITEMS report. The parameter code is indicated the report code into wic metadata, the parameter cond is indicated the condicion sql apply on the report. Finally _VAR_FECINI and _VAR_FECFIN are two variables required for the execution of the report.

  • Accessing the gcominf_sit_articul report
    • Method: GET
    • Path: /servlet/jrep
    Send Parameters With the Request
    Name Value Encode? Include Equals?
    code gcominf_sit_articul
    cond 1=1
    _VAR_FECINI 01-01-2016
    _VAR_FECFIN 23-01-2017

3.3 Generating simple PDF

Generate a PDF from object ctercero
  • Method: GET
  • Path: /servlet/jrep
Send Parameters With the Request
Name Value Encode? Include Equals?
code ctercero
cond 1=1
mode xsl
attach 0
oricode ctercero
ppos 0
sort codigo
xsl ctercero
plen 1
din A4

3.4 Generating simple Excel

Generate a Excel from object ctercero
  • Method: GET
  • Path: /servlet/jrep
Send Parameters With the Request
Name Value Encode? Include Equals?
code ctercero
cond 1=1
mode xls
ppos 0
sort codigo

3.5 Performing an insert transaction

The path parameter for method Post request has the following format:

Copy
/apps/jrep/sdm/{adapterID}/{adapterVerify}

Where adapterID is:

  1. Object code
  2. Database
  3. Condition
  4. Meta Condition
  5. Order by
  6. Page position

And adapterVerify is the crc code.

Example:

Copy
/apps/jrep/sdm/gcompedh&dbtest&1=1&&gcompedh.delega,gcompedh.cabid DESC&0/&-1&
  • Make an insert on the ctercero object
    • Method: POST
    • Path: /apps/jrep/sdm/ctercero&dbtest&1=1&&ctercero.codigo&0/&-1&
    Send Parameters With the Request
    Name Value Encode? Include Equals?
    ctercero.seqno 0
    ctercero.codigo ${ctercero.codigo}
    ctercero.nombre JMETER TEST
    ctercero.codare 100
    ctercero.cif 0

    Info

    The ctercero.codigo parameter refers to a Config Element Counter called with Reference name is ctercero.codigo.
    • Name: Codigo Tercero
    • Start: 1
    • Increment: 1
    • Maximum: 1000
    • Number format: JM-000
    • Reference Name: ctercero.codigo

3.6 Performing an update transaction

The path parameter for method PUT request has the following format:

Copy
/apps/jrep/sdm/{adapterID}/{adapterVerify}

Where adapterID is:

  1. Object code
  2. Database
  3. Condition
  4. Meta Condition
  5. Order by
  6. Page position

And adapterVerify is the crc code.

Example:

Copy
/apps/jrep/sdm/gcompedh&dbtest&1=1&&gcompedh.delega,gcompedh.cabid DESC&0/&-1&
  • Make an update on the ctercero object:
    • Method: PUT
    • Path: /apps/jrep/sdm/ctercero&dbtest&ctercero.codigo MATCHES 'JM-001'&&ctercero.codigo&0/&-1&
    • Body Data: ctercero.codigo=JM-001&ctercero.nombre=JMETER TEST UPDATE&ctercero.codare=100&

    Info

    The put method requires the HTTP Header Manager element.
    Headers Stored in the Header Manager
    Name Value
    Accept application/json
    Content-Type application/x-www-form-urlencoded

3.7 Performing a delete transaction

The path parameter for method DELETE request has the following format:

Copy
/apps/jrep/sdm/{adapterID}/{adapterVerify}

Where adapterID is:

  1. Object code
  2. Database
  3. Condition
  4. Meta Condition
  5. Order by
  6. Page position

And adapterVerify is the crc code.

Example:

Copy
/apps/jrep/sdm/gcompedh&dbtest&1=1&&gcompedh.delega,gcompedh.cabid DESC&0/&-1&
  • Make an delete on the ctercero object:
    • Method: DELETE
    • Path: /apps/jrep/sdm/ctercero&dbtest&ctercero.codigo MATCHES 'JM-001'&&ctercero.codigo&0/&-1&

    Info

    The delete method requires the HTTP Header Manager element.
    Headers Stored in the Header Manager
    Name Value
    Accept application/json

3.8 Interacting directly with database

3.9 Executing multiple threads (Sessions)

4 Saving the plan

This JMX file includes the complete test plan.

Copy
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1 r1770033">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Studio Test Plan" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <stringProp name="LoopController.loops">1</stringProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">1</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <longProp name="ThreadGroup.start_time">1482335481000</longProp>
        <longProp name="ThreadGroup.end_time">1482335481000</longProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
      </ThreadGroup>
      <hashTree>
        <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
          <boolProp name="ResultCollector.error_logging">false</boolProp>
          <objProp>
            <name>saveConfig</name>
            <value class="SampleSaveConfiguration">
              <time>true</time>
              <latency>true</latency>
              <timestamp>true</timestamp>
              <success>true</success>
              <label>true</label>
              <code>true</code>
              <message>true</message>
              <threadName>true</threadName>
              <dataType>true</dataType>
              <encoding>false</encoding>
              <assertions>true</assertions>
              <subresults>true</subresults>
              <responseData>false</responseData>
              <samplerData>false</samplerData>
              <xml>false</xml>
              <fieldNames>true</fieldNames>
              <responseHeaders>false</responseHeaders>
              <requestHeaders>false</requestHeaders>
              <responseDataOnError>false</responseDataOnError>
              <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
              <assertionsResultsToSave>0</assertionsResultsToSave>
              <bytes>true</bytes>
              <sentBytes>true</sentBytes>
              <threadCounts>true</threadCounts>
              <idleTime>true</idleTime>
              <connectTime>true</connectTime>
            </value>
          </objProp>
          <stringProp name="filename"></stringProp>
        </ResultCollector>
        <hashTree/>
        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
          <collectionProp name="CookieManager.cookies"/>
          <boolProp name="CookieManager.clearEachIteration">false</boolProp>
          <stringProp name="CookieManager.policy">standard</stringProp>
          <stringProp name="CookieManager.implementation">org.apache.jmeter.protocol.http.control.HC4CookieHandler</stringProp>
        </CookieManager>
        <hashTree/>
        <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="dbms" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">dbtest</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">dbms</stringProp>
              </elementProp>
              <elementProp name="user" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">jmeter</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">user</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain">192.168.56.104</stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout">8080</stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path"></stringProp>
          <stringProp name="HTTPSampler.concurrentPool">6</stringProp>
        </ConfigTestElement>
        <hashTree/>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Login" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="j_username" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">jmeter</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">j_username</stringProp>
              </elementProp>
              <elementProp name="j_password" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">jmeter123</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">j_password</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/account/j_security_check</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ctercero_get" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="code" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">ctercero</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">code</stringProp>
              </elementProp>
              <elementProp name="cond" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">1=1</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">cond</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/apps/jrep/formauto_s</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ctercero_pdf" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="code" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">ctercero</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">code</stringProp>
              </elementProp>
              <elementProp name="cond" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">1=1</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">cond</stringProp>
              </elementProp>
              <elementProp name="mode" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">xsl</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">mode</stringProp>
              </elementProp>
              <elementProp name="attach" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">0</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">attach</stringProp>
              </elementProp>
              <elementProp name="oricode" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">ctercero</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">oricode</stringProp>
              </elementProp>
              <elementProp name="ppos" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">0</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">ppos</stringProp>
              </elementProp>
              <elementProp name="sort" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">codigo</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">sort</stringProp>
              </elementProp>
              <elementProp name="xsl" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">ctercero</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">xsl</stringProp>
              </elementProp>
              <elementProp name="plen" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">1</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">plen</stringProp>
              </elementProp>
              <elementProp name="din" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">A4</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">din</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/servlet/jrep</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ctercero_excel" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="code" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">ctercero</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">code</stringProp>
              </elementProp>
              <elementProp name="cond" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">1=1</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">cond</stringProp>
              </elementProp>
              <elementProp name="mode" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">xls</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">mode</stringProp>
              </elementProp>
              <elementProp name="ppos" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">0</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">ppos</stringProp>
              </elementProp>
              <elementProp name="sort" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">codigo</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">sort</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/servlet/jrep</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ctercero_insert" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="ctercero.seqno" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">0</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">ctercero.seqno</stringProp>
              </elementProp>
              <elementProp name="ctercero.codigo" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">${ctercero.codigo}</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">ctercero.codigo</stringProp>
              </elementProp>
              <elementProp name="ctercero.nombre" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">JMETER TEST</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">ctercero.nombre</stringProp>
              </elementProp>
              <elementProp name="ctercero.codare" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">100</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">ctercero.codare</stringProp>
              </elementProp>
              <elementProp name="ctercero.cif" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">0</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">ctercero.cif</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/apps/jrep/sdm/ctercero&amp;dbtest&amp;1=1&amp;&amp;ctercero.codigo&amp;0/&amp;-1&amp;</stringProp>
          <stringProp name="HTTPSampler.method">POST</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree>
          <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Codigo Tercero" enabled="true">
            <stringProp name="CounterConfig.start">1</stringProp>
            <stringProp name="CounterConfig.end">1000</stringProp>
            <stringProp name="CounterConfig.incr">1</stringProp>
            <stringProp name="CounterConfig.name">ctercero.codigo</stringProp>
            <stringProp name="CounterConfig.format">JM-000</stringProp>
            <boolProp name="CounterConfig.per_user">false</boolProp>
            <stringProp name="TestPlan.comments">Codigo Tercero</stringProp>
          </CounterConfig>
          <hashTree/>
        </hashTree>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ctercero_update" enabled="true">
          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
            <collectionProp name="Arguments.arguments">
              <elementProp name="" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">ctercero.codigo=JM-001&amp;ctercero.nombre=JMETER TEST UPDATE&amp;ctercero.codare=100&amp;</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/apps/jrep/sdm/ctercero&amp;dbtest&amp;ctercero.codigo MATCHES &apos;JM-001&apos;&amp;&amp;ctercero.codigo&amp;0/&amp;-1&amp;</stringProp>
          <stringProp name="HTTPSampler.method">PUT</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree>
          <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
            <collectionProp name="HeaderManager.headers">
              <elementProp name="" elementType="Header">
                <stringProp name="Header.name">Accept</stringProp>
                <stringProp name="Header.value">application/json</stringProp>
              </elementProp>
              <elementProp name="" elementType="Header">
                <stringProp name="Header.name">Content-Type</stringProp>
                <stringProp name="Header.value">application/x-www-form-urlencoded</stringProp>
              </elementProp>
            </collectionProp>
          </HeaderManager>
          <hashTree/>
        </hashTree>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ctercero_delete" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments"/>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/apps/jrep/sdm/ctercero&amp;dbtest&amp;ctercero.codigo MATCHES &apos;JM-001&apos;&amp;&amp;ctercero.codigo&amp;0/&amp;-1&amp;</stringProp>
          <stringProp name="HTTPSampler.method">DELETE</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree>
          <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
            <collectionProp name="HeaderManager.headers">
              <elementProp name="" elementType="Header">
                <stringProp name="Header.name">Accept</stringProp>
                <stringProp name="Header.value">application/json</stringProp>
              </elementProp>
            </collectionProp>
          </HeaderManager>
          <hashTree/>
        </hashTree>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="gcominf_sit_articul_report" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="code" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">gcominf_sit_articul</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">code</stringProp>
              </elementProp>
              <elementProp name="cond" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">1=1</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">cond</stringProp>
              </elementProp>
              <elementProp name="_VAR_FECINI" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">01-01-2016</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">_VAR_FECINI</stringProp>
              </elementProp>
              <elementProp name="_VAR_FECFIN" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.value">23-01-2017</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <stringProp name="Argument.name">_VAR_FECFIN</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.domain"></stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/servlet/jrep</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>