我可以在同一解决方案的单元测试项目中使用 Selenium 测试 ASP.NET MVC web 项目吗?

Can I test an ASP.NET MVC web project using Selenium from a unit test project in the same solution?

我有一个 ASP.NET MVC 5 网络项目,我有一个基于 MsTest 的单元测试项目,该项目使用 Selenium 进行一些自动化 "browser" 测试。

目前,我必须 运行 Web 项目(在我本地的 IIS Express 中),然后 运行 针对它的测试,但这有各种限制。例如,我只能 "run" 测试,不能 "debug" 它们。很明显,这对我的持续集成管道来说效果不佳。

有没有办法让测试启动网站实例? (我知道 ASP.NET MVC 6 可以自托管,所以这可能会打开一些可能性,但这个项目将停留在 MVC 5 上。

我不确定您如何仅使用 Selenium 来完成此操作。 Selenium 只是自动化浏览器进程。您也许可以编写脚本,或者可以使用像 SpecFlow 这样的测试框架在测试前启动网络服务器 运行.

http://www.radicalgeek.co.uk/Post/12/starting-up-iis-express-for-a-specflow-and-selenium-webdriver-test-run

存档 link 以防第一个不起作用:https://web.archive.org/web/20160927003518/http://www.radicalgeek.co.uk/Post/12/starting-up-iis-express-for-a-specflow-and-selenium-webdriver-test-run

好的,这是一种方法:

  1. 在用 the [AssemblyInitialize] attribute 修饰的方法中启动 Web 服务器(此方法必须在用 [TestClass] 属性修饰的测试项目中的 class 中).

    [AssemblyInitialize]
    public Initialize()
    {
        ...
    }
    
  2. 在用 [AssemblyCleanup] 属性修饰的方法中停止 Web 服务器。

    [AssemblyCleanup]
    public Cleanup()
    {
        ...
    }
    

要启动 IIS Express,您只需在 IISExpress.exe 上使用 Process.Start,并传入 pathport 参数。 (要停止它,您可以简单地终止您启动的进程)。有关示例,请参见 Fran 的回答中的 link。

path 参数应指向包含您的网站项目的文件夹(项目文件夹,而不是 bin 文件夹)。

port 参数需要与您在本地 运行 网站时使用的本地端口号相同(因此如果浏览器 window 中的 URL 是 http://localhost:57941那么你需要的端口号是57941).