如何通过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