我是Django和Celery的新手。
高水平:
我正在开发一个Django应用程序。从管理页面使用将提交请求(作业(。这些请求将被发送到 Redis。然后,芹菜将轮询 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
生成的实际报告 ]
现在这就是我感到困惑的地方。
我是否需要首先基于 pytest 将生成的 json 报告中的所有键创建一个模型?
如果是这样,我会使用TestResultModel.objects.create(.....)
之类的东西然后将报告插入到帖子中吗?
下面是由 pytest.main 输出的 json 示例
{"created": 1535570420.542123, "duration": 215.14111948013306, "exitcode": 1, "root": "/test", "environment": {"Python": "3.6.6", "平台": "Linux-4.9.93-linuxkit-aufs-x86_64-with-debian-9.5", "软件包": {"pytest": "3.6.2", "py": "1.5.4", "pluggy": "0.6.0"}, "插件": {"xdist": "1.22.5", "元数据": "1.7.0", "json-report": "0.7.0", "分叉": "0.2", "姜戈": "3.3.3", "cov": "2.5.1", "芹菜": "4.2.1"}}, "摘要": {"通过": 34, "失败": 7, "总计": 41}
我是否需要首先根据 pytest 将生成的 json 报告中的所有键创建一个模型?
一般来说,答案是肯定的。但它看起来不像您保存在数据库中的关系数据。因此,您可以使用 JSONField 并一次性将所有内容插入其中。JSONField对应于postgresql中的JSONB字段,该字段旨在存储json对象,并允许搜索,修改这些对象等。
您可能还想查看 https://stackoverflow.com/a/32091771/267540