0

我有一个小问题,我创建了一些 Selenium 测试。问题是我无法订购我创建的测试用例。我知道不应该订购单元测试,但这是我在我的情况下需要的。我必须遵循以下步骤:首先登录,创建一个新客户,更改有关客户的一些详细信息,最后注销。

由于没有选项可以在 NUnit 中订购单元测试,因此我无法执行此操作。

我已经尝试过另一种选择,在 Visual Studio 中创建一个 unittest 项目,因为 Visual Studio 2012 能够创建有序的单元测试。但这不起作用,因为我在运行 ASP.NET 项目时无法运行单元测试。另一个解决方案文件也不是一个好的选择,因为我想在 Selenium 测试提交后验证我的数据。

你们中有人有其他解决方案来解决我的问题吗?

4

1 回答 1

1

如果您想以特定顺序测试所有这些步骤(并且通过它的声音,作为单个会话),那么实际上它更像是您正在谈论的验收测试;在这种情况下,编写更复杂的测试方法并在每一步之后断言你的条件并不是一种罪过。

如果您想真正孤立地测试每个步骤(纯单元测试),那么每个单元测试必须能够独立运行,而无需参考任何其他测试;但是当您测试实际的站点 UI 本身时,这对您来说并不是一个真正的选择。


当然,如果你真的想让每一个测试以某种方式设置每一个依赖而不参考任何其他操作(例如,在最后一个测试中你需要伪造登录令牌,你的数据层将不得不假装你添加了一个新的客户等。很多工作都是为了可疑的利益......)

我这样说是基于假设您已经为服务器端控制器、层、模型等编写了单元测试,您在没有任何参考在浏览器中运行的实际站点的情况下运行这些单元测试,因此相信各种支持 -结束您网站的一部分做他们应该做的事情


在你的情况下,我会推荐更多的混合集成/验收测试

void Login(IWebDriver driver)
{
   //use driver to open browser, navigate to login page, type user/password into box and press enter

}

void CreateNewCustomer(IWebDriver driver)
{
  Login(driver);
  //and then use driver to click "Create Customer" link, etc, etc

}

void EditNewlyCreatedCustomer(IWebDriver driver)
{
  Login(driver);
  CreateNewCustomer(driver);
  //do your selenium stuff..

}

and then your test methods:
[Test]
void Login_DoesWhatIExpect()
{
  var driver = new InternetExplorerDriver("your Login URL here");   
  Login(driver);
  Assert(Something);
}
[Test]
void CreateNewCustomer_WorksProperly()
{
   var driver = new InternetExplorerDriver("your Login URL here");   
   CreateNewCustomer(driver);
   Assert(Something);
}
[Test]
void EditNewlyCreatedCustomer_DoesntExplodeTheServer()
{
   var driver = new InternetExplorerDriver("your Login URL here");   
   EditNewlyCreatedCustomer(driver);
   Assert(Something);
}

这样,特定测试的顺序无关紧要;当然,如果Login测试失败,那么CreateNewCustomerandEditNewlyCreatedCustomer测试也会失败,但在这种情况下这实际上是无关紧要的,因为您正在测试整个“线程”的操作

于 2013-09-10T22:34:19.727 回答