我知道最佳做法是让测试独立运行。
我正在使用Rspec运行Selenium Webdriver测试。如果我为每个特定测试用例创建和拆除用户组 - 其他模型,则测试运行时间会显着增加(大约30分钟)。
所以我将spec文件分成create _...,delete _...,并想在一个spec文件中调用这些spec文件。这是可能的,这是设置测试的好或坏方法吗?
类似的东西:
create_users_spec.rb
create_user_groups_spec.rb
create_dashboard_spec.rb
==> run some tests....
delete_dashboard_spec.rb
delete_user_groups_spec.rb
delete_users_spec.rb
run_all_spec.rb => run all of the spec files above, so you can see that
it needs to run in a certain sequence
答案 0 :(得分:1)
您真的希望能够独立运行测试。必须运行所有测试,甚至"只是"在我看来,给定文件中的所有测试都是开发过程中不可接受的延迟。它还使得很难使用Guard等基于文件监视器为您运行测试的工具。
如果之前确实需要运行某些内容,例如每个请求规范,您可以执行以下操作:
[Exception: Error occurred. The error was Specified cast is not valid..]
***.DatabaseUtils.getData(OracleCommand oraCmd)
in d:\***\DatabaseUtils.cs:149
***.Transcripts.BindData(String orderByClause)
in ***\Transcripts.aspx.cs:365
***.Transcripts.search_click(Object sender, EventArgs e)
in ***\Transcripts.aspx.cs:81
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628722
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
但也要看你想要做什么。如果您只是为测试设置模型/数据库数据,那么您需要工具,或者更好的工厂。看看FactoryGirl。
答案 1 :(得分:0)
也许使用context
组织您的测试并明智地使用before(:each)
和before(:all)
可以提高性能。简化数据库,或使用像FactoryGirl这样的库也可以提供帮助。