Skip to content

Commit

Permalink
Add "testdata from csv" example.
Browse files Browse the repository at this point in the history
  • Loading branch information
cyberw committed Oct 24, 2024
1 parent bb4ded8 commit 262dfd5
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
2 changes: 2 additions & 0 deletions examples/testdata_from_csv.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
myuser1@example.com,password1
myuser2@example.com,password2
55 changes: 55 additions & 0 deletions examples/testdata_from_csv.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""
This shows an easy way to get testdata from a csv file into locust and use it for requests
"""

from locust import FastHttpUser, events, run_single_user, task

import csv
import os

csvfile = open(os.path.join(os.path.dirname(__file__), "testdata_from_csv.csv"))
iter = csv.reader(csvfile)


class DemoUser(FastHttpUser):
@task
def t(self):
try:
username, password = next(iter)
except StopIteration:
# go back to start of the file once its been exhausted
csvfile.seek(0, 0)
username, password = next(iter)
with self.rest("POST", "/authenticate", json={"username": username, "password": password}) as resp:
if message := resp.js and resp.js.get("message"):
if not "Welcome" in message:
resp.failure(f"bad response: {message}")


# We'll now add endpoints to Locust's own WebUI to use as a target for the test.
# This means so you can't use headless or run_single_user, unless you also start a "headful" Locust instance.
#
# It is not very relevant to what this example is explaining, so feel free to ignore it.

FastHttpUser.host = "http://127.0.0.1:8089"

from flask import request


@events.init.add_listener
def locust_init(environment, **kwargs):
if environment.web_ui:

@environment.web_ui.app.route("/authenticate", methods=["POST"])
def authenticate():
username = request.get_json()["username"]
return {"message": f"Welcome {username}!"}

@environment.web_ui.app.route("/checkout/confirm", methods=["POST"])
def checkout_confirm():
foo = request.get_json()["foo"]
return {"orderId": 42}


if __name__ == "__main__":
run_single_user(DemoUser)

0 comments on commit 262dfd5

Please sign in to comment.