Question

Use Locust to load test a REST service with following info:

  • need login first to get secCode, userCode and sessionId, share them to all users
  • post request to /v1/prt/getList with above info
  • post to /v1/prt/getAba with above info plus countryCode

Answer

Sure! Here’s an example script using Locust to load test a REST service with the given information:

from locust import HttpUser, task, between

class MyUser(HttpUser):
    wait_time = between(1, 5)

    def on_start(self):
        # login to get secCode, userCode, and sessionId
        response = self.client.post("/login", {"username": "my_username", "password": "my_password"})
        self.secCode = response.json()["secCode"]
        self.userCode = response.json()["userCode"]
        self.sessionId = response.json()["sessionId"]
        self.token = response.json()["token"]

    @task
    def get_list(self):
        # make a POST request to /v1/prt/getList with secCode, userCode, sessionId, and XBA-Token header
        headers = {"XBA-Token": self.token}
        data = {"secCode": self.secCode, "userCode": self.userCode, "sessionId": self.sessionId}
        self.client.post("/v1/prt/getList", headers=headers, data=data)

    @task
    def get_aba(self):
        # make a POST request to /v1/prt/getAba with secCode, userCode, sessionId, countryCode, and XBA-Token header
        headers = {"XBA-Token": self.token}
        data = {"secCode": self.secCode, "userCode": self.userCode, "sessionId": self.sessionId, "countryCode": "US"}
        self.client.post("/v1/prt/getAba", headers=headers, data=data)

This script defines a MyUser class that inherits from HttpUser and sets a wait time between 1 and 5 seconds. The on_start method logs in to the REST service and saves the secCode, userCode, and sessionId for future requests. The get_list task makes a POST request to /v1/prt/getList with the saved login information, and the get_aba task makes a POST request to /v1/prt/getAba with the saved login information and a hard-coded countryCode value of "US". The script also includes an XBA-Token header with the saved token value in each request. You can replace "my_username" and "my_password" with actual login credentials, and the "US" value for countryCode can be replaced with a valid country code for your REST service.

Written on April 30, 2025