Я новичок в Django и Celery.
высокий уровень:
Я работаю над приложением Django. Со страницы администратора пользователи будут отправлять запросы (вакансии). Эти запросы будут отправлены в Redis. Затем Celery опрашивает Redis и извлекает задание из очереди. После завершения задачи результаты будут сохранены в postgres.
Вот пример задачи, которая используется для запуска некоторых тестов через pytest.main ().
# task for running tests by marker
def run_tests_mark(test_marker):
os.chdir('/service/lib/tests')
# only allow specific strings to be passed in by the user
if test_marker not in ['smoke', 'regression']: # update as more tages are introduced to the project
return 'You have entered an invalid term. Please use either smoke of regression.'
# run pytest command with self contained reporting
results = pytest.main(['-v', '--json-report', '-m', test_marker])
# TODO: after tests run send json report to postgres
Код будет запускать тесты, но, как вы можете видеть по последнему комментарию, я хочу взять полученный .json.report и сохранить его в базе данных postgres [обратите внимание, что я использую помощник для получения фактического отчета, созданного results]
Вот где я запутался.
Нужно ли мне сначала создать модель на основе всех ключей в отчете json, который будет сгенерирован pytest?
Если да, то я бы использовал что-то вроде TestResultModel.objects.create(.....), чтобы затем вставить отчет в postgres?
Вот образец json, который выводит pytest.main
{"created": 1535570420.542123, "duration": 215.14111948013306, "exitcode": 1, "root": "/test", "environment": {"Python": "3.6.6", "Platform": "Linux-4.9.93-linuxkit-aufs-x86_64-with-debian-9.5", "Packages": {"pytest": "3.6.2", "py": "1.5.4", "pluggy": "0.6.0"}, "Plugins": {"xdist": "1.22.5", "metadata": "1.7.0", "json-report": "0.7.0", "forked": "0.2", "django": "3.3.3", "cov": "2.5.1", "celery": "4.2.1"}}, "summary": {"passed": 34, "failed": 7, "total": 41}





Do I need to first create a model based on all the keys in the json report that is going to be generated by pytest?
В общем, да. Но это не похоже на реляционные данные, которые вы сохраняете в своей базе данных. Таким образом, вы можете использовать JSONField и вставить туда все за один раз. JSONField соответствует полям JSONB в postgresql, которые предназначены для хранения объектов json и позволяют искать, изменять эти объекты и т. д.
Вы также можете увидеть https://stackoverflow.com/a/32091771/267540
Рад помочь
Большое спасибо за предложение. Я сосредоточу свои усилия на реализации этого.