В модульном тесте, который я запускаю, я получаю исключение KeyError для 4-го объекта json в тексте json ниже, потому что фрагмент кода, отвечающий за декодирование, ищет объект, которого нет, но он должен быть ,
Я просмотрел подобъекты и обнаружил, что это был объект "cpuid", который вызывает проблему. Когда я удаляю его и запускаю тест, он работает нормально.
def _make_report_entry (запись):
response = self.app.post(
'/machinestats',
params=dict(record=self.json_encode([
{"type": "crash", "instance_id": "xxx",
"version": "0.2.0", "build_id": "unknown",
"crash_text": "Gah!"},
{"type": "machine_info", "machine_info": "I'm awesome.",
"version": "0.2.0", "build_id": "unknown",
"instance_id": "yyy"},
{"machine_info": "Soup", "crash_text": "boom!",
"version": "0.2.0", "build_id": "unknown",
"instance_id": "zzz", "type": "crash"},
{"build_id" : "unknown", "cpu_brand" : "intel",
"cpu_count" : 4,
"cpuid": {
"00000000":
{"eax" :123,"ebx" :456,
"ecx" :789,"edx" :321},
"00000001":
{"eax" :123,"ebx" :456,
"ecx" :789,"edx" :321}},
"driver_installed" : True,
"instance_id" : "yyy",
"version" : "0.2.0",
"machine_info" : "I'm awesome.",
"os_version" : "linux",
"physical_memory_mib" : 1024,
"product_loaded" : True,
"type" : "machine_info",
"virtualization_advertised" : True}
])))
В тестируемом фрагменте кода я использую simplejson.JSONDecoder из django.utils для декодирования JSON. Когда я регистрирую декодированный вывод для вышеуказанного JSON, который передается в мою функцию декодирования, я получаю это:
root: INFO: {u'instance_id ': u'xxx', u'type ': u'crash', u'crash_text ': u'Gah!', U'version ': u'0.2.0' , u'build_id ': u'unknown'}
root: INFO: {u'build_id ': u'unknown', u'instance_id ': u'yyy', u'version ': u'0.2.0', u'machine_info ': u "Я удивительно. ", u'type ': u'machine_info'}
root: INFO: {u'build_id ': u'unknown', u'machine_info ': u'Soup', u'version ': u'0.2.0', u'instance_id ': u'zzz', u'crash_text ': u'boom!', u'type ': u'crash'}
root: INFO: {u'eax ': 123, u'edx': 321, u'ebx ': 456, u'ecx': 789}
В последнем объекте JSON только объект в объекте JSON cpuid передается в мою функцию декодирования. Поскольку моя функция декодирования ожидает другие объекты (например, 'type', 'instance_id' и т. Д.), Я получаю исключение KeyError.
[Извините за ранее неоправданно длинный пост, я надеюсь, что это сузит его еще немного]