Форматирование Json для Python LocustIO
Пожалуйста, почему я получаю плохой запрос на эту почту? Это связано с форматированием JSON. Как переформатировать объект json, переданный как параметр? Я запускаю нагрузочный тест с использованием LocustIO, Python
from locust import HttpLocust, TaskSet, task
from slumber import API
import json, requests
nameInquiry = """
[{
"data": {
"Account Number": "1234567898",
"Bank Code": "EBN",
"AppId": "com.appzonegroup.zone",
"deviceId": "a4a7427032c286e3",
"Sender Phone Number": "+2348094399450",
"Sender Conversation ID": "161503479186618e8726fc4-70c0-4768-a2ea-5217c3a3c26d",
"FileId": ""
},
"instruction": {
"FunctionId": "",
"FlowId": "813dac4f-7e44-4873-b45f-f6f3b5dbe436",
"InstitutionCode": "",
"TimeOutSeconds": 30
}
}]
"""
myheaders = {'Content-Type': 'application/json', 'Accept': 'application/json'}
class NameInquiries(TaskSet):
@task(1)
def send(self):
response = self.client.post("/zoneflowsapi/api/Goto/goto/", data=json.dumps(nameInquiry), headers= myheaders )
print("Response status code:", response.status_code)
print("Response content:", response.text)
1 ответ
json.dumps принимает в качестве входного объекта json (списки и словари) и сериализует его, выдавая строку в качестве вывода. Вы кормите его nameInquiry
, который уже является строкой, таким образом, ошибка.
Кроме того, пост получает словарь в качестве входных данных, поэтому нет необходимости его сериализации. Простое решение состоит в том, чтобы установить nameInquiry
как объект JSON (обратите внимание на отсутствие """
ниже) и кормить его прямо в пост.
nameInquiry = [{
"data": {
"Account Number": "1234567898",
"Bank Code": "EBN",
"AppId": "com.appzonegroup.zone",
...
}]
...
response = self.client.post("/zoneflowsapi/api/Goto/goto/", data=nameInquiry, headers=myheaders)
В противном случае вы можете сохранить строку и десериализовать ее, используя json.loads:
nameInquiry = json.loads("""
[{
"data": {
"Account Number": "1234567898",...
""")
Есть два основных способа POST данных JSON с Locust. Я предпочитаю передать словарьself.client.post
используя аргумент ключевого слова json, потому что мне не нужно беспокоиться о создании действительного JSON:
nameInquiry = [{
"data": {
"Account Number": "1234567898",
"Bank Code": "EBN",
"AppId": "com.appzonegroup.zone",
"deviceId": "a4a7427032c286e3",
"Sender Phone Number": "+2348094399450",
"Sender Conversation ID": "161503479186618e8726fc4-70c0-4768-a2ea-5217c3a3c26d",
"FileId": ""
},
...
}]
response = self.client.post("/zoneflowsapi/api/Goto/goto/", json=nameInquiry)
Другой подход - вручную создать допустимую строку JSON или использовать json.dumps(dict)
чтобы создать допустимую строку JSON и передать ее в self.client.post
используя data
аргумент:
nameInquiryString = """
[{
"data": {
"Account Number": "1234567898",
"Bank Code": "EBN",
"AppId": "com.appzonegroup.zone",
"deviceId": "a4a7427032c286e3",
"Sender Phone Number": "+2348094399450",
"Sender Conversation ID": "161503479186618e8726fc4-70c0-4768-a2ea-5217c3a3c26d",
"FileId": ""
}
...
}]
"""
response = self.client.post("/zoneflowsapi/api/Goto/goto/", data=nameInquiryString)
Если вы используете self.client.put
, вы должны использовать второй подход, потому что put
метод не поддерживает json
аргумент ключевого слова.