没有项目描述

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.

PyPI version

它将:运行任务列表。如果可能,它将异步运行它们

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.

例如,如果要从更高的级别测试函数内部的代码,则可能需要这样做。 理想情况下,你不应该经常这样做。我们建议您最好测试 直接调用函数(而不是在更高级别的函数中检查副作用)

运行所有副作用代码:

基本上将关闭此测试的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可能会称之为测试引起的损伤

待办事项

  • 使其成为工作类方法

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用并发hashmap减少线程池的内存使用?   java为什么在提交片段后出现错误“getParentActivityIntent:badActivity name”?   vim UltiSnips扩展java包   java给出了一个名称列表,如何插入、删除、显示、搜索和退出?Java程序   java Spring集成:只从FTP服务器下载新的或更新的文件?   使用Java中的Scala:将函数作为参数传递   java线程1每秒填充一个映射,线程2每60秒保存一个条目   java从私有类访问公共类中的方法/字段   如何使用ApacheSpark流媒体和JavaAPI从所有人那里获取英语推文?   java是否可以在父标记和子标记中编写XMLSchemainstance?   java无法读取文本文件,也找不到解决方案   java在运行时加载类时无法创建bean