В составе AutoIt есть отличные возможности для считывания конфигурации системы и передачи ее автотесту.
Рассмотрим небольшой пример. Есть две группы параметров, которые определяют настройки SQL-сервера и клиентского приложения. Определим значения этих параметров в текстовом конфигурационном файле (conf.ini):
[SQLSettings]
SQLConnString=rh75;User ID=dev;Password=435H2hfs;Initial Catalog=’SecIssues’
NumberOfConnections=5
PossibleTimeOut=30
[ClientSettings]
UserName=Operator
UserAgent=Chrome
Вот один из вариантов считывания конфигурации:
Func getConfiguration ($configuration_file, $section) $var = IniReadSection($configuration_file, $section) If @error Then MsgBox(4096, "", "Error occurred while reading a configuration file: " & $configuration_file) Else For $i = 1 To $var[0][0] Assign ($var[$i][0], $var[$i][1],2) Next EndIf EndFunc getConfiguration ("conf.ini", "SQLSettings")
IniReadSection считывает секцию параметров конфигурационного файла и заполняет массив. Далее проходим по нему в цикле и с помощью Assign создаем глобальные переменные, имена которых совпадают с названиями параметров. В нашем случае, если в конфигурационном файле была строка NumberOfConnections=5, то после выполнения вышеприведенного кода переменная $NumberOfConnections будет равна 5.
Неважно, сколько параметров будет добавлено в conf.ini - код не изменится.
Стоит отметить, что динамическое определение переменных справедливо считается опасным в классических языках программирования. В частности, в Perl при наличии use strict мы получим ошибку:
Can’t use string (”NumberOfConnections”) as a SCALAR ref while “strict refs” in use at getConfiguration.pl line 7.
И в нашем AutoIt-примере переменная NumberOfConnections будет иметь неопределенное значение, если строки NumberOfConnections=5 не будет в конфигурационном файле. Поэтому, даже в случае AutoIt и простого тестового окружения необходимо быть начеку и вводить дополнительные проверки на критических участках кода.
Вернемся к нашему примеру. Бывают ситуации, когда необходимо “на лету” переопределить значение того или иного параметра, не изменяя конфигурационный файл. Вот как это можно сделать:
1. укажем значения интересующих нас параметров в командной строке при запуске автотеста:
autoit3 main.au3 NumberOfConnections=10 PossibleTimeOut=120
2. в автотесте вызовем функцию getCommandLineParameters ()
Func getCommandLineParameters () For $i = 1 To $CmdLine[0] $array=StringRegExp ($CmdLine[$i],"([[:alnum:]]+)=(.+)$",1) Assign ($array[0], $array[1]) Next EndFunc
Если после выполнения getConfiguration (”conf.ini”, “SQLSettings”) значение параметра (и переменной) NumberOfConnections было равно 5, то при выполнении getCommandLineParameters () оно станет равно 10.
Таким образом, мы можем хранить лишь одну версию конфигурационного файла, а отдельно взятые параметры произвольно изменять в том или ином запуске автотеста.
Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.