如何通过wallaby automation browser回滚在数据库中所做的更改

如何通过wallaby automation browser回滚在数据库中所做的更改,automation,elixir,wallaby,Automation,Elixir,Wallaby,我有一个很长的测试,它调用了很多测试所有应用程序的函数。 我正在寻找一种方法,在测试失败的情况下,我可以回滚自动化在测试中所做的特定更改 例如: 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 |&g

我有一个很长的测试,它调用了很多测试所有应用程序的函数。 我正在寻找一种方法,在测试失败的情况下,我可以回滚自动化在测试中所做的特定更改

例如:

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函数之前回滚数据库上发生的所有更改。

如果您使用
exto
访问数据库,您可以使用其沙箱模式

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

然后在测试助手或测试中执行以下操作:

setup do
  :ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo)
  Ecto.Adapters.SQL.Sandbox.mode(Repo, {:shared, self()})
end
这样,您的所有测试都在单独的事务中运行,然后回滚。此外,上述操作确保所有流程使用相同的连接并查看相同的事务数据(请参见文档中的共享模式)。 此示例取自有更多相关信息的


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

我使用的是Ecto,但自动化在不同的应用程序中,我无法将自动化数据库连接到应用程序数据库。即使我成功了,我也希望只有在我明确要求的时候才有选择rollbak,并且只有最后的几个动作。
setup do
  :ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo)
  Ecto.Adapters.SQL.Sandbox.mode(Repo, {:shared, self()})
end