当请求输入是元素列表时,蝗虫请求后出错

时间:2020-07-20 17:38:53

标签: python locust

我正在尝试发送元素列表的发布请求,并且获取的值太多,无法解包异常。

代码:

    @task
    def success_predict(self):
        success_payload = [
            {"REQUEST_ID": "123456", "ATT1": "A", "ATT2": "T2", "ATT3": "NS", "ATT4": 65,
             "ATT5": 122, "ATT6": "F", "ATT6": 67}, {"REQUEST_ID": "7890", "ATT1": "A", "ATT2": "T2", "ATT3": "NS", "ATT4": 65,
             "ATT5": 122, "ATT6": "F", "ATT6": 67}]

        self.client.post("/predict", success_payload)

例外:

  File "D:\CodeBase\blood_only_pipeline_api\load_test\locustfile.py", line 16, in success_predict
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\requests\sessions.py", line 578, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\locust\clients.py", line 114, in request
    response = self._send_request_safe_mode(method, url, **kwargs)
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\locust\clients.py", line 167, in _send_request_safe_mode
    return requests.Session.request(self, method, url, **kwargs)
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\requests\sessions.py", line 516, in request
    prep = self.prepare_request(req)
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\requests\sessions.py", line 459, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\requests\models.py", line 317, in prepare
    self.prepare_body(data, files, json)
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\requests\models.py", line 508, in prepare_body
    body = self._encode_params(data)
  File "d:\users\user_name\.conda\envs\py36env\lib\site-packages\requests\models.py", line 97, in _encode_params
    for k, vs in to_key_val_list(data):
ValueError: too many values to unpack (expected 2)

让我知道我做错了什么。

1 个答案:

答案 0 :(得分:2)

有效载荷应该是字典,而不是列表(也许在某些情况下也可以与列表一起使用,但我从未这样做过:)

json帖子的正确语法是:

 self.client.post("/predict", json=success_payload)

或对于表单编码的帖子:

 self.client.post("/predict", data=success_payload)

有关更多示例/详细信息,请参见requests的文档:https://requests.readthedocs.io/en/master/