簡體   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