集成测试:如何根据环境加载不同的代理设置

时间:2019-07-16 05:00:57

标签: c# selenium-webdriver .net-core environment-variables integration-testing

我正在使用.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解决方案

我的项目是一个测试项目:我没有找到一种向测试运行者指定任何环境信息的方法

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使用多个JSON设置文件,并使用不同的部署工具来确保根据测试环境(本地与暂存)部署正确的JSON。

另一种方法是对测试设置文件进行重做,以包含多个配置和一个在运行时加载活动配置的属性。例如:

{
  "ActiveConfig": "local",
  "TestConfigs": {
    "local": {
      "ProxySettings": {
        "Kind": "Manual",
        "IsAutoDetect": false,
        "SslProxy": "_PROXY_ADDRESS_"
      }
    },
    "staging": {
    }
  }
}

顺便说一句,大多数测试运行程序都可以在命令行上指定参数。例如,对于NUnit的控制台运行程序,其名称为--testparam(尽管控制台运行程序尚不支持.NET Core测试),您可以使用它来告诉测试哪个配置处于活动状态。否则,环境变量很容易达到相同的目的。