Передача дополнительных параметров в командной строке

С помощью командной строки TestComplete можно задать множество различных параметров (показывать или нет splash screen, закрывать ли TestComplete после прогона тестов, экспорт лога и т.п.). Однако что делать, если мы хотим передать в скрипты какую-то дополнительную информацию извне?

Это можно сделать с помощью дополнительных параметров и их парсинга в скриптах.

Предположим, у нас есть несколько конфигураций Name Mapping, каждая из которых соответсвует определенному языку приложения (Russian, English, French и т.п.). Мы хотим иметь возможность в командной строке указывать, какую из конфигураций использовать при запуске тестов.

Пример командной строки для этого будет выглядеть так:

TestComplete.exe C:\MyProjectsMySuite.pjs /r /p:MyProj /NameMappingConfig:Russian

Жирным выделен параметр, который мы добавили для задания необходимой конфигурации.

Теперь напишем функцию, которая будет перебирать все параметры и искать среди них параметр NameMappingConfig:

function getNameMappingConfig()
{
  var nmConfig = 'English';
  for(var i = 0; i <= BuiltIn.ParamCount(); i++)
  {
    var param = BuiltIn.ParamStr(i);
    if(aqString.Find(param, 'NameMappingConfig') > -1)
    {
      nmConfig = param.split(':')[1];
      break;
    }
  }
  Log.Message('Using Name Mapping Configuration ' + nmConfig);
  return nmConfig;
 }

С помощью метода BuiltIn.ParamCount мы получаем количество параметров и затем в цикле берем каждый из них с помощью метода BuiltIn.ParamStr. Далее с помощью метода aqString.Find мы проверяем, есть ли в параметре слово NameMappingConfig, и если есть – вытаскиваем из него всё, что находится после двоеточия. Для этого мы с помощью метода split превращаем строку в массив (указывая двоеточие в качестве разделителя), затем берем первый элемент массива.

Теперь зададим активную конфигурацию с помощью написанной функции:

NameMapping.CurrentConfigurationName = getNameMappingConfig();

Обратите внимание на следующие нюансы:

  1. ParamCount возвращает кол-во параметров не учитывая самый первый из них: путь к самому TestComplete. В то время как ParamStr(0) возвращает именно путь к TestComplete. Поэтому в цикле мы используем <= в качестве условия выхода. Если бы мы использовали знак <, то последний параметр мы бы не получили.
  2. В самом начале функции мы задаем конфигурацию по умолчанию. Она будет использована, если другое значение не будет передано в командной строке.
  3. Перед выходом из функции мы логируем сделанный выбор. Это необходимо для того, чтобы в случае ошибки и анализа лога, мы смогли бы точно восстановить логику работы скрипта.

Методы ParamStr и ParamCount позволяют работать только с командной строкой самого TestComplete. Если же вы захотите работать таким образом с параметрами других процессов, придется написать более сложный парсер командной строки. Пример такого парсинга можно найти в главе 4 книги TestComplete Cookbook.