没有项目描述
dj-saferunner的Python项目详细描述
A mechanism for running processes which might have side effects (e.g.: calling an external API etc.) in a way that is safe by default during testing and provides useful introspection functionality.
它将:运行任务列表。如果可能,它将异步运行它们
在TEST_MODE
:
- 它不会运行代码
- 它将存储有关在中拨打的电话的信息
用法
安装并配置
pip install dj-saferunner
配置选项
django设置
SAFERUNNER_USE_SENTRY
-设置为True
以接受错误并登录到哨兵
在你的代码中:
之前
frommyapp.tasksimportping_googleping_google(url='http://foo.com')
之后
frommyapp.tasksimportping_googlefromsaferunner.process_runnerimportsafely_run_processestask_list=[# task, args, async(ping_google,{"url","http://foo.com"},False)]safely_run_processes(run_id='identifier giving some context about where this is run',task_list=task_list)
在你的测试中
在测试模式下,默认情况下,saferunner不会执行您的代码。相反,它将使用django的缓存记录您的呼叫
示例测试
deftest_run_some_tasks(self):clear_run_cache()run_id='this_is_a_test'task_list=[(hello,{"msg":"hi"},False),(do_something_slowly,{"sleep":10},True),]safely_run_processes(run_id=run_id,task_list=task_list)res=get_process_run(run_id)
get_process_run
的结果如下:
[{
'task_name': 'hello',
'task_args': "OrderedDict([('msg', 'hi')])",
'is_async': False
}, {
'task_name': 'do_something_slowly',
'task_args': "OrderedDict([('sleep', 10)])",
'is_async': True
}]
显式运行副作用代码
In your tests, You can force saferunner
to execute safely run code.
In your tests, You can force saferunner
to execute safely run code.
例如,如果要从更高的级别测试函数内部的代码,则可能需要这样做。 理想情况下,你不应该经常这样做。我们建议您最好测试 直接调用函数(而不是在更高级别的函数中检查副作用)
运行所有副作用代码:
基本上将关闭此测试的saferunner
@override_settings(FORCE_RUN_SIDE_EFFECTS='__all__')
您还可以指定要通过的特定任务:
这将强制saferunner
显式运行这个精确的函数/方法
@override_settings(FORCE_RUN_SIDE_EFFECTS=task.name)
@override_settings(FORCE_RUN_SIDE_EFFECTS=task.__name__)
常见问题解答:
问:为什么不直接使用mocks呢? 答: 这个用例用于可能经常执行的代码 (例如信号中的代码),可能有不需要的 如果在测试期间意外运行会产生副作用(例如:发送smse或进行api调用)。 我们希望在这里注意错误,并在测试期间默认模拟 并明确说明何时运行此代码
附言:DHH可能会称之为测试引起的损伤
待办事项
- 使其成为工作类方法