Как настроить переменную URL для использования в NUnit / SpecFlow framework

#c# #nunit #automated-tests #specflow

#c# #nunit #автоматизированные тесты #specflow

Вопрос:

Я хотел бы расширить тестовый набор, который я написал в SpecFlow, чтобы он был немного более расширяемым, поэтому я хотел бы сделать в настройках создание базовой переменной URL, которую я могу установить в зависимости от флага, который я использую в Nunit runner. Итак, если я отправляю тест в виде тега, я хочу, чтобы для некоторого значения URL было установлено значение «http://test /»или для разработки установить URL в «http://dev /». Я знаю, что глобальные переменные бесполезны в NUnit, большая часть моих предыдущих сценариев была написана на Perl, где даже тогда я использовал его в редких случаях. Я не уверен, что делаю это правильно, хотя я получаю код для компиляции без ошибок, URL никогда не устанавливается. Что я делаю, так это проверку при запуске NUnit runner:

 private static testInfoConfiguration myUrl;
public static string baseUrl = string.Empty;
[BeforeFeature("Test")]
public static void BeforeFeature_Test()
{

    myUrl = new testInfoConfiguration();
    baseUrl = myUrl.setBaseUrl("Test");
}
  

Который вызывает это:

 public class testInfoConfiguration
{
public string setBaseUrl(string envType)
    {
        string envUrl;
        if (envType == "Test")
        {
            envUrl = "http://testweb/";
            return envUrl;
        }
        if (envType == "Prod")
        {
            envUrl = "http://www/";
            return envUrl;
        }
        envUrl = "http://devweb/";
        return envUrl;
    }
  

Затем я хочу позже вызвать переменную URL:

 [When(@"I access the Web Site")]
public void WhenIAccessTheWebSite()
{
    string kcUrl = baseUrl   "/knowledge/Pages/default.aspx";
    driver.Navigate().GoToUrl(kcUrl);
  

Когда я вызываю переменную URL, она по-прежнему пуста. Есть ли способ сделать это? Я все еще изучаю C #, NUnit и SpecFlow, поэтому, вероятно, я просто не смотрю на правильный аспект этого, где я ошибаюсь. Или просто действительно не понимаю, как установить переменную таким образом.

Редактировать: Корректировка существующего кода

Ответ №1:

В этом блоке кода:

 private static testInfoConfiguration myUrl; 
public string baseUrl = "";     
[BeforeFeature("Test")] 
public static string BeforeFeature_Test() 
{ 

    myUrl = new testInfoConfiguration(); 
    string baseUrl = myUrl.setBaseUrl("Test"); 
    return baseUrl; 
} 
  

Вы определяете baseUrl дважды: один раз в области метода и один раз в области класса.

Когда вы находитесь в этом блоке кода:

 string kcUrl = baseUrl   "/knowledge/Pages/default.aspx";      
driver.Navigate().GoToUrl(kcUrl);   
  

Вы имеете в виду (я полагаю) поле экземпляра baseUrl , которое вы никогда не устанавливали.

Попробуйте следующее:

 private static testInfoConfiguration myUrl; 
public static string baseUrl = string.Empty;     
[BeforeFeature("Test")] 
public static void BeforeFeature_Test() 
{ 
    myUrl = new testInfoConfiguration(); 
    baseUrl = myUrl.setBaseUrl("Test");       
} 
  

Комментарии:

1. Это определенно приблизило меня, и спасибо за урок по области видимости, я все еще разбираюсь в этом. Хотя я нахожу, что строка kcUrl = baseUrl заканчивается пустым baseUrl. Это мой возврат в функции setBaseUrl?

2. Не видя всего задействованного кода, я действительно не могу сказать. Дополните свой вопрос дополнительной частью вашего кода, и я посмотрю, что я могу сделать.

3. Хорошо, обновлено, хотя я не знаю, что еще необходимо. Насколько я могу судить, на данный момент не должно вызываться никакого другого кода, поскольку я просто сразу устанавливаю переменную url. При запуске теста URL-адрес браузера отображается как: http:///knowledge/Pages/default.aspx таким образом, он получает последнюю часть конкатенации строк. Спасибо за помощь!

4. Вы уверены, что они оба являются частью одной и той же функции? Я понимаю [BeforeFeature("Test")] . Если ваш метод WhenIAccessTheWebSite() не является частью той же функции, вероятно, он не выполняет метод setup. Установите точку останова и проверьте, BeforeFeature_Test() выполняется ли.

5. Теперь у меня возникла проблема, я забыл сбросить тег. Теперь работает идеально … большое вам спасибо!