![](/img/trans.png)
[英]How to save changes you made from test browser to actual browser? (selenium)
[英]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.