如何在本地运行 Oban 任务并验证其执行是否正常
本地验证Oban任务的实现方案
方案1:直接调用任务逻辑(最快验证)
不需要走Oban调度流程,直接验证函数逻辑是否符合预期:
- 在项目根目录执行
iex -S mix进入Elixir交互控制台 - 直接执行
ObanJobOne.job(nil),此时控制台会直接输出IO.inspect打印的SQL内容 - 执行完成后到你配置的文件生成路径,检查文件内容是否符合预期即可
方案2:通过Oban队列调度运行(模拟真实生产场景)
如果要验证任务在Oban调度体系下的执行表现,按以下步骤操作:
- 首先把任务改造为符合Oban规范的Worker结构:
defmodule ObanJobOne do # 这里的queue参数对应你项目中配置的Oban队列名 use Oban.Worker, queue: :default @impl Oban.Worker def perform(_args, _job) do """ some sql query """ |> IO.inspect # 原有映射、生成文件逻辑 :ok end # 可保留原有job函数,也可以直接把逻辑迁移到perform中 def job(_) do # 原有逻辑 end end
- 确保本地Oban服务已经正常启动(默认在dev环境下配置了Oban的话,项目启动时会自动运行)
- 进入
iex -S mix控制台,执行ObanJobOne.new(%{}) |> Oban.insert()将任务插入队列 - 任务执行时控制台会打印
IO.inspect的输出,执行完成后检查生成的文件即可
- 如果需要验证Cron配置是否正确,可在dev环境的Oban配置中把该任务的Cron触发间隔改短(例如设置为每分钟触发一次),启动项目后观察控制台输出和文件生成情况即可
方案3:自动化测试验证
如果需要编写可重复执行的测试用例,使用Oban官方测试工具实现:
- 在
test/test_helper.exs中开启Oban测试模式:
Oban.start(testing: :inline)
inline模式下插入的Oban任务会同步执行,无需等待调度
2. 编写测试用例验证逻辑:
test "ObanJobOne 生成正确的结果文件" do # 执行任务 :ok = ObanJobOne.perform(%{}, %{}) # 读取生成的文件断言内容符合预期 file_content = File.read!("/你的/文件/生成/路径/xxx") assert file_content == "期望的文件内容" end
注意:如果你的文件生成路径用的是相对路径,默认是相对于项目根目录,检查文件时不要找错路径。
内容的提问来源于stack exchange,提问作者hnhl
相关产品推荐
相关产品推荐

