【问题标题】:Can you set a different JSON for every users in Locust?您可以为 Locust 中的每个用户设置不同的 JSON 吗?
【发布时间】:2021-12-31 10:39:13
【问题描述】:

所以我有一个负载测试场景,每个生成用户发布不同的 JSON(在这种情况下我生成 100 个用户)

这是 POST 的 JSON 示例,其中 SITE_CODE 对于每个请求都应该不同

def generateJson(site): 

try:

 payload = {
                "clockin":  [
                    {
                    "SITE_CODE": generateSiteCode(site),
                    "EMP_NO": "1202-31009",
                    "SEQUENCE": 120,
                    "EMP_NO": "1202-00036",
                    "CLOCKING_STATUS": "40",
                    "CLOCK_IN_TIMESTAMP": "2021-11-16 12:09:24.276",
                    "CLOCK_IN_LONGITUDE": 106.8630792,
                    "CLOCK_IN_LATITUDE": -6.2426467,
                    "CLOCK_IN_PHOTO": f.read(),
                    "CLOCK_OUT_PHOTO": "",
                    "CLOCK_OUT_TIMESTAMP": "2021-11-16 12:11:53.797",
                    "CLOCK_OUT_LONGITUDE": 106.8631024,
                    "CLOCK_OUT_LATITUDE": -6.2426843,
                    "CREATION_USER_ID": "auto_retry",
                    "CREATION_DATETIME": "2021-11-16 12:09:24.276",
                    "CHANGE_USER_ID": "1202-00036",
                    "CHANGE_DATETIME": "2021-11-16 12:11:53.797"
                    }
                ],

这是为每个用户实现任务的示例

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

   @task(1)
    def gen_variable(self):
        self.client.get("GenVariable/getVar")
    
   @task(2)
   def post_shift(self):
       self.client.post("/Log", json=generateJson(1), headers={'Content-Type': 'application/json', 'Accept': 'application/json'})
    
   @task(3)
   def get_item(self):
       self.client.get("/item/getItem")

如何使用 Locust 实现这一目标?

【问题讨论】:

    标签: python json load-testing locust


    【解决方案1】:

    Locust 可以帮助您以分布式方式运行您提供的任何代码。在 Python 中运行的大多数典型代码应该只在放入或从 Locust 任务中调用时才可以工作。 post_shift 任务中的代码看起来应该可以工作,假设 generateJson 实际上返回了您需要的 JSON。 (generateJson 的代码示例不完整,没有显示完整的字典,也没有返回任何内容,因此在修复之前,您的代码将无法工作。)

    如果您修复了generateJson,但仍然没有产生您期望的行为,请提出一个新问题,使用您的代码、预期行为和实际行为/您遇到的任何错误的详细信息更新此问题.

    编辑:

    如果您想让所有用户点击/Log,但又希望Locust 将每个请求分别报告给/Log,您可以在客户端调用中使用name 参数。 Locust 将use whatever you put in there 报告请求。示例:

       self.client.post("/Log", name="/Log 1", json=generateJson(1), headers={'Content-Type': 'application/json', 'Accept': 'application/json'})
    

    【讨论】:

    • 首先,感谢您的回复,所以我真正要寻找的是如何让 Locust 使用不同的 JSON 显示每个请求的日志?因为 Locust 只显示一个请求(“/Log”)
    • 不确定我是否理解。您是否希望每个 Locust 用户访问与 /Log 不同的端点?或者您是否希望每个用户使用不同的 JSON 有效负载点击 /Log,但在 Locust UI 和统计信息中将其报告为 /Log 1/Log 2 等其他内容?
    • 很抱歉让您感到困惑,我希望每个用户使用不同的 JSON 有效负载点击 /Log,而且我可以跟踪每次点击的日志
    • 好的,然后我编辑了我的答案以添加有关如何让所有客户点击/Log 并分别报告每个请求的详细信息。
    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多