繁体   English   中英

如何通过小袋鼠自动化浏览器回滚对数据库所做的更改

[英]How to rollback changes that has made in the database by wallaby automation browser

我进行了长时间的测试,调用了许多测试所有应用程序的函数。 我正在寻找一种方法,如果测试失败,我可以回滚自动化对测试所做的特定更改。

例如:

test "add user and login", session do
  session
  |> add_user()
  # There can be more functions here...
end

def add_user(session, loops // 2) do
  try do
    session
    |> visit("example.com")
    |> fill_in(css("#user_name", with "John Doe")
    |> click(css("#add_user_button"))
    |> assert_has(css("#user_added_successfully_message")
  rescue
    msg -> if loops > 0, do: add_user(session, loops - 1), else: raise msg 
  end
end

如果 assert_has 函数失败(用户已添加但消息未显示),我想回滚在救援中再次调用 add_user 函数之前数据库上发生的所有更改。

如果您使用Ecto到处访问数据库,您可以使用它的沙箱模式

很可能您想在config/test.exs配置沙箱池(如果还没有):

config :my_app, Repo, # my_app being the name of the application that holds the Repo
  pool: Ecto.Adapters.SQL.Sandbox

然后在你的 test_helper 或测试中做这样的事情:

setup do
  :ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo)
  Ecto.Adapters.SQL.Sandbox.mode(Repo, {:shared, self()})
end

这样,您的所有测试都在单独的事务中运行,并在之后回滚。 此外,以上确保所有进程使用相同的连接并查看相同的事务数据(请参阅文档中的:shared模式)。 此示例取自文档,其中有更多相关信息。

如果由于某种原因您不能使用 Ectos 沙箱模式,一个不错的选择可能是自己启动数据库事务并共享您的测试和被测代码之间的连接。 这样您就可以在每次测试后手动回滚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM