Grinder multiple post url test not working properly

296 Views Asked by At

I am running grinder to test a POST URI with 10 different json bodies. The response times given by grinder are not proper.Individual json body tests are giving a reasonable response time though 10 the script with with 10 different json bodies is giving a very high response time and a very low tps. I am using 1 agent with 5 worker processes and 15 threads.Can someone help me figure out where the problem might be?

The script I am using are :-

`from net.grinder.script.Grinder import grinder
from net.grinder.script import Test
from net.grinder.plugin.http import HTTPRequest
from HTTPClient import NVPair
from java.io import FileInputStream
test1 = Test(1, "Request resource")
request1 = HTTPRequest()
#response1 = HTTPResponse()
test1.record(request1)
log = grinder.logger.info
class TestRunner:
    def __call__(self):
            #request1.setDataFromFile("ReqBody.txt")
            payload1 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req.txt")
            payload2 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req2.txt")
            payload3 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req3.txt")
            payload4 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req4.txt")
            payload5 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req5.txt")
            payload6 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req6.txt")
            payload7 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req7.txt")
            payload8 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req8.txt")
            payload9 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req9.txt")
            payload10 = FileInputStream("/home/ubuntu/grinder-3.11/scripts/Req10.txt")

            headersPost = [NVPair('Content-Type', ' application/json')]
            #request1.setHeaders(headersPost)
            #request1.setHeaders
            myload = [payload1, payload2, payload3, payload4, payload5, payload6, payload7, payload8, payload9, payload10]
            for f in myload:
                result1 = request1.POST("http://XX.XX.XX.XX:8080/api/USblocks/ORG101/1/N/",f,headersPost)
                log(result1.toString())`
1

There are 1 best solutions below

0
user666 On

First step for you is to run it with 1 thread 1 process and 1 agent . I hope it will run properly.

It looks since for loop is used all the scripts are going to run for each and every thread. I think what you want /what should be done is that each thread should be sending one request .

You can move the request out to a global method and take some random number like Grinder.threadNo and use it to return the script to be executed . This then also demands that you remove the for loop since you can control the number of times the script is executed or leave it running for a duration .

Running 10 threads in parallel is a good number to start with then slowly you can see how many requests are actually getting accepted.