我正在使用.NET Core上的Selenium Webdriver开发集成测试 -在本地,需要代理才能访问我要测试的网站 -但在舞台上则相反:无需设置代理(否则将使网站无法访问)
我的代码如下:
测试示例:
{"template":{"id":1,"name":"Attractions & Shows ","disable":false,"href":"/en-MY/search?template_id=1"},"tags"}
TestScope类:
[TestFixture]
[Parallelizable(ParallelScope.Children)]
public class LoginPageTests
{
[Test]
public void TestLoginPageDisplaysWell()
{
using (var scope = new TestScope())
{
var page = new LoginPage(scope.Driver);
page.GoTo();
// Page
Assert.AreEqual(expected: "Index", actual: page.BrowserTitle);
Assert.AreEqual(expected: "Login", actual: page.ContentTitle.Text);
}
}
}
testsettings.json:
private sealed class TestScope : IDisposable
{
public IWebDriver Driver { get; }
public TestScope()
{
var options = new ChromeOptions();
// Proxy settings
var proxySettings = default(Proxy);
var proxySettingsSection = new ConfigurationBuilder()
.AddJsonFile("testsettings.json")
.Build()
.GetSection("ProxySettings");
if (proxySettingsSection.Exists())
{
proxySettings = new Proxy();
proxySettingsSection.Bind(proxySettings);
options.Proxy = proxySettings;
}
options.AddArgument("--headless");
Driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), options);
}
public void Dispose()
{
Driver?.Quit();
}
}
如何根据环境加载不同的代理设置?
我找到的所有解决方案都涉及检查ASPNETCORE_ENVIRONMENT变量以加载特定的测试设置。{environmentName}文件 但这仅适用于IIS上托管的Web解决方案
我的项目是一个测试项目:我没有找到一种向测试运行者指定任何环境信息的方法
答案 0 :(得分:0)
解决此问题的一种方法是使用多个JSON设置文件,并使用不同的部署工具来确保根据测试环境(本地与暂存)部署正确的JSON。
另一种方法是对测试设置文件进行重做,以包含多个配置和一个在运行时加载活动配置的属性。例如:
{
"ActiveConfig": "local",
"TestConfigs": {
"local": {
"ProxySettings": {
"Kind": "Manual",
"IsAutoDetect": false,
"SslProxy": "_PROXY_ADDRESS_"
}
},
"staging": {
}
}
}
顺便说一句,大多数测试运行程序都可以在命令行上指定参数。例如,对于NUnit的控制台运行程序,其名称为--testparam
(尽管控制台运行程序尚不支持.NET Core测试),您可以使用它来告诉测试哪个配置处于活动状态。否则,环境变量很容易达到相同的目的。