Я импортирую тесты веб-сервиса из Excel и сериализую их как YAML.
Но, пользуясь тем, что YAML является надмножеством JSON, я бы хотел, чтобы часть запроса в тесте была действительной JSON, т.е.иметь разделители, кавычки и запятые.
Это позволит нам вырезать и вставлять запросы между автоматическим набором тестов и инструментами ручного тестирования (например, Почтальон).
Так вот, как бы я хотелtest to look (упрощенный):
- properties:
METHOD: GET
TYPE: ADDRESS
Request URL: /addresses
testCaseId: TC2
request:
{
"unitTypeCode": "",
"unitNumber": "15",
"levelTypeCode": "L",
"roadNumber1": "810",
"roadName": "HAY",
"roadTypeCode": "ST",
"localityName": "PERTH",
"postcode": "6000",
"stateTerritoryCode": "WA"
}
В Python мой объект запроса имеет атрибут dict
с именем fields
, который является частью объекта, который будет сериализован как JSON.Вот что я попробовал:
import yaml
def request_presenter(dumper, request):
json_string = json.dumps(request.fields, indent=8)
return dumper.represent_str(json_string)
yaml.add_representer(Request, request_presenter)
test = Test(...including embedded request object)
serialised_test = yaml.dump(test)
Я получаю:
- properties:
METHOD: GET
TYPE: ADDRESS
Request URL: /addresses
testCaseId: TC2
request: "{
\"unitTypeCode\": \"\",\n
\"unitNumber\": \"15\",\n
\"levelTypeCode": \"L\",\n
\"roadNumber1\": \"810\",\n
\"roadName\": \"HAY\",\n
\"roadTypeCode\": \"ST\",\n
\"localityName\": \"PERTH\",\n
\"postcode\": \"6000\",\n
\"stateTerritoryCode\": \"WA\"\n
}"
... только хуже, потому что все в одной строке и везде с пробелами.
Я пытался использовать стиль |
для буквенных многострочных строк, который помогает с переносами строк и экранированными кавычками (это более сложный вопрос, но этот ответ был полезен.) Однако экранированный или многострочныйрезультат по-прежнему является строкой, которую необходимо анализировать отдельно.
Как я могу остановить PyYaml, анализирующий блок JSON как строку, и заставить его просто принять блок текста как часть выданного YAML?Я предполагаю, что это как-то связано с переопределением эмиттера, но я мог бы помочь.Если возможно, я бы хотел избежать пост-обработки сериализованного теста для достижения этой цели.