我已经编写了使用Selenium测试Web应用程序的NUnit测试用例。我希望针对不同的环境运行相同的测试案例(例如QA,分期,&生产)实现该目标的最简单方法是什么?如何使用Selenium运行我的NUnit测试用例以针对不同的环境运行?
回答
NUnit支持参数化测试装置以及参数化测试。所以第一件事就是你想要针对不同的环境运行特定的测试,还是整个测试夹具都将在两种环境中重新运行?
我问,因为这个答案决定你将通过参数(环境)的位置。如果您只是想重新运行整个测试夹具,则应该在测试夹具级别传递环境,即创建参数化测试夹具。如果您只想针对这些环境运行特定的测试,则必须将其传递给每个单独的测试用例。下面是一个例子,我如何去了解相同的事情:
首先创建一种方法来定义测试可以'附加'的'环境'。我建议也许搡到的app.config这一点,并有一个“设置”类和枚举去用它:
public enum Environment
{
QA,
Production,
Hotfix,
Development
}
public class Settings
{
public static string QAUrl { get { return "some url"; } }
public static string ProductionUrl { get { return "some url"; } }
public static string HotfixUrl { get { return "some url"; } }
public static string DevUrl { get { return "some url"; } }
}
上面“某些URL”将会从您的配置文件或硬编码的读取,不过你请。
我们现在已经有了一个环境的概念,它是URL,但它们没有以任何方式链接在一起或相关。理想情况下,您希望为其提供枚举的“QA”值,然后它将为您整理网址。
接下来创建一个基础测试夹具,您的所有测试夹具都可以继承,这样可以保持当前的环境。我们还创建了一个Dictionary
,现在涉及的环境价值,它的网址:
public class BaseTestFixture
{
private Dictionary<Environment, string> PossibleEnvironments
{
get
{
return new Dictionary<Environment, string>()
{
{ Environment.QA, Settings.QAUrl },
{ Environment.Production, Settings.ProductionUrl },
{ Environment.Hotfix, Settings.HotfixUrl },
{ Environment.Development, Settings.DevelopmentUrl },
}
}
}
private Environment CurrentEnvironment { get; set; }
public BaseTestFixture(Environment environment)
{
CurrentEnvironment = environment;
}
}
你也许可以使用反射来有它的工作什么的URL映射到什么enum
价值的。
太酷了,我们有一个可以对付的环境。一个样本测试,以管理员身份登录到您的网站:
public class LoginToSite
{
[Test]
public void CanAdministratorSeeAdministratorMenu()
{
// go to the site
driver.Navigate().GoToUrl("production site");
// login as administrator
}
}
我们如何获取此信息以访问特定网址?让我们修改我们的基类有点...
public class BaseTestFixture
{
private Dictionary<Environment, string> PossibleEnvironments
{
get
{
return new Dictionary<Environment, string>()
{
{ Environment.QA, Settings.QAUrl },
{ Environment.Production, Settings.ProductionUrl },
{ Environment.Hotfix, Settings.HotfixUrl },
{ Environment.Development, Settings.DevelopmentUrl },
}
}
}
private Environment CurrentEnvironment { get; set; }
protected string CurrentEnvironmentURL
{
get
{
string url;
if (PossibleEnviroments.TryGetValue(CurrentEnviroment, out url))
{
return url;
}
throw new InvalidOperationException(string.Format("The current environment ({0}) is not valid or does not have a mapped URL!", CurrentEnviroment));
}
}
public BaseTestFixture(Environment environment)
{
CurrentEnvironment = environment;
}
public BaseTestFixture()
{
}
}
我们的基类,现在可以告诉我们,取决于我们是在什么样的环境,要到什么网页...
所以我们现在有这样的测试,从我们的基地继承:
public class LoginToSite : BaseTestFixture
{
[Test]
public void CanAdministratorSeeAdministratorMenu()
{
// go to the site
driver.Navigate().GoToUrl(CurrentEnvironmentURL);
// login as administrator
}
}
但是,这是伟大的,但上述不会编译...为什么?我们实际上并没有给它一个环境,所以我们必须通过......
[TestFixture(Environment.QA)]
public class LoginToSite : BaseTestFixture
{
[Test]
public void CanAdministratorSeeAdministratorMenu()
{
// go to the site
driver.Navigate().GoToUrl(CurrentEnvironmentURL);
// login as administrator
}
}
这是伟大的,它现在已经通过在环境中,URL等的检查都在后台为你做了,现在......然而,这仍然将不能编译。由于我们使用继承,我们必须有一个构造函数来传递给我们:
public LoginToSite(Environment currentEnvironment)
{
CurrentEnvironment = currentEnvironment;
}
等voilà。
至于具体的测试情况下,这是一个更容易一些,从早期的以我们的测试案例:
public class LoginToSite
{
[TestCase(Environment.QA)]
public void CanAdministratorSeeAdministratorMenu(Environment environment)
{
// go to the site
driver.Navigate().GoToUrl("production site");
// login as administrator
}
}
这将通过在环境成具体测试用例。然后,您将需要一个新的Settings
类某种,做环境检查您(以类似的方式和我一样前):
public class EnvironmentHelper
{
private static Dictionary<Environment, string> PossibleEnvironments
{
get
{
return new Dictionary<Environment, string>()
{
{ Environment.QA, Settings.QAUrl },
{ Environment.Production, Settings.ProductionUrl },
{ Environment.Hotfix, Settings.HotfixUrl },
{ Environment.Development, Settings.DevelopmentUrl },
}
}
}
public static string GetURL(Environment environment)
{
string url;
if (PossibleEnviroments.TryGetValue(environment, out url))
{
return url;
}
throw new InvalidOperationException(string.Format("The current environment ({0}) is not valid or does not have a mapped URL!", environment));
}
}
感谢您的回答。这对我帮助很大。我应该更具体。我想找到一种方法让我们的QA人员运行我的回归工具。所以对我来说最好的方法是在每个环境中使用[配置文件](http://www.nunit.org/index.php?p=configFiles&r=2.2.10)。所以我在我们的共享文件夹“QA”和“Production”上创建了多个文件夹,然后将我的test.dll和test.dll.config复制过来。因此,他们可以在他们的盒子上安装NUnit,并根据他们想要运行回归测试的环境打开相应文件夹中的dll。 – Duk 2013-03-27 19:17:36
最好的办法是使用变量而不是硬编码链接来实现所有功能。以便在需要改变环境时可以改变它。更简单的方法是从记事本/ excel文件中读取链接。
- 1. 如何设置单元测试以运行不同的环境?
- 2. 如何使用selenium + testng并行运行测试用例
- 3. 不使用鼠标运行NUnit测试?
- 4. NUnit不运行我的新测试
- 5. 使用NANT并行运行NUnit测试
- 6. 如何同时运行NUnit测试?
- 7. 如何让Nunit针对不同的服务器运行硒测试?
- 8. 使用不同的测试用例运行SpecFlow测试
- 9. 运行Selenium测试用例时出错
- 10. 运行Java Selenium Pararel测试用例
- 11. 测试用例未运行iin selenium webdriver
- 12. 如何使用Selenium连续运行单个测试用例?
- 13. 如何使用Maven在Chrome中运行Selenium WebDriver测试用例?
- 14. 如何使用Maven在Firefox中运行Selenium WebDriver测试用例?
- 15. NUnit并行运行测试
- 16. 如何并行运行NUnit(Selenium Grid)测试?
- 17. 使用Nunit错误运行WatiN测试?
- 18. 如何使用NAnt 0.86测试版运行NUnit v2.4.8测试?
- 19. 如何在不同环境下运行rspec测试?
- 20. jenkins selenium不运行测试
- 21. 如何使用TeamCity的NUnit运行器运行忽略的测试?
- 22. 我想从命令行运行Selenium测试用例文件
- 23. Rails单元测试可以运行在与测试不同的环境中吗?
- 24. 使用不同凭据运行NUnit集成测试
- 25. 在Rails API中针对测试环境运行契约
- 26. 如何配置CI Bamboo计划以在不同的环境中运行测试?
- 27. 运行使用Selenium,NUnit的并行多browsertypes一个测试和C#
- 28. Nunit TestFixtureData未运行测试
- 29. F#运行NUnit测试
- 30. 指定NUnit测试运行
一个配置文件..但是,为什么你的环境是基本上是? UAT和生产有什么不同? – 2013-03-27 00:17:10