*Текстът е предоставен от DataArt
Автор: Марина Куленкова
Марина Куленкова, QA Automation експерт и Team Lead в глобалната софтуерна компания DataArt, споделя повече за това как можем да използваме скриптовете на Unix Shell, особено с Bash, при автоматизираното тестване. Вижте нейните разяснения и практически примери относно това как да стартирате Shell скрипт и кои са основните Unix Shell команди за Test Automation:
Shell скриптовете са незаменим инструмент за осигуряване на последователност и производителност при автоматизираните тестове.
Unix Shell автоматизират задачи като анализ на регистрационни файлове, операции с бази данни, настройка на тестови данни и т.н., рационализирайки работните процеси и повишавайки ефективността в средата за тестване.
Какво точно е Shell Script?
Най-общо казано, Shell скриптът е набор от инструкции, подадени към системата. В основата си това е файл, съдържащ списък от команди, подобен на всяка компютърна програма.
Има две command-line shells: Bash (Bourne Again Shell) и Zsh (Z Shell). Bash е стандартен и широко използван команден ред в Unix операционни системи; Zsh е друг вид Shell, който се основава на Bash и добавя допълнителни функции, опции за персонализиране и по-интерактивно потребителско изживяване.
В тази статия ще разгледаме Bash shell скриптовете като класически (или както някой може да каже – „старомоден“) подход.
Например:
Когато стартирате този скрипт, той ще изпълни следните команди:
● Създаване на нова папка
● Интегриране в нея
● Създаване на файл
● Принтиране на съобщение
Това помага за автоматизиране на повтарящи се действия, което доста улеснява QA инженерите.
Може също да изглежда като обикновен текстов файл с последователност от команди, които трябва да бъдат изпълнени в определен ред. След като серия от команди в Shell е разработена и тествана, можете да ги запишете във файл. След това този файл става вашият скрипт, което ви позволява да автоматизирате целия процес, когато е необходимо.
Първоначалният ред (‘#!/bin/bash’) има специално значение и е известен като линията shebang. Той служи като уникална форма на коментар, информираща Shell за програмата, която ще се използва като интерпретатор за изпълнение на скрипта. В този контекст интерпретаторът е Bash и представлява средата на Shell, в която работим. Този подход се прилага и за други скриптови езици като Perl и Python.
Практическо използване на Bash скриптове за автоматизация на тестове
Нека разгледаме как точно скриптовете на Shell могат да бъдат полезни в ежедневната, рутинна работа на QA Automation специалистите:
Задача | Пример за скрипт на Shell | Обяснение |
Анализ на регистрационен файл, търсене на някакъв модел | #!/bin/bash # Log Analysis using grep echo „Analyzing logs for errors…“ grep „ERROR“ application.log | awk ‘{print $3, $4}’ #same using awk awk ‘ERROR/ {print $3, $4}’ application.log # Search lines with one or multiple patterns grep –E “pattern1|pattern2” filename | Позволява да се анализират регистрационни файлове от файла за грешки или специфични модели |
Архивиране и възстановяване на база данни | #!/bin/bash # Backup and Restore echo „Creating backup of database…“ mysqldump -u username -ppassword testdb > backup.sql echo „Restoring database…“ mysql -u username -ppassword testdb < backup.sql | Прави автоматизирани процедури за архивиране и възстановяване, като гарантира целостта на данните по време на тестване |
Настройка и почистване на тестови данни | #!/bin/bash # Test Data Setup echo „Creating test data…“ mysql -u username -ppassword -e „CREATE DATABASE testdb;“ mysql -u username -ppassword testdb < initial_data.sql # Test Data Cleanup echo „Cleaning up test data…“ mysql -u username -ppassword -e „DROP DATABASE testdb;“ # Database Setup Script for Java Tests echo „Setting up database for integration tests…“ docker run -d –name=testdb -p 5432:5432 -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword postgres:latest | Позволява настройка на някои данни в базата данни и почистване на тестовите данни |
Конфигурация на средата | #!/bin/bash # Environment Configuration echo „Configuring test environment…“ export TEST_ENV=“development“ export API_URL=“http://localhost:8080″ | Помага за конфигуриране на променливите на средата |
Стартиране на изпълними файлове с параметри | #!/bin/sh # Run Executable Files for (i=0; i < n; i++) do java -jar MyExeFile.jar config.properties NUMBER_OF_THREADS:10 TOTAL_RUNNING_TIME:30 > result_1.$i.txt done | Извършва изпълнение на до n на брой файла, като указва количеството на нишките, времето за изпълнение и т.н. |
Автоматизирано внедряване с помощта на Docker контейнер | #!/bin/bash # Automated Deployment echo „Deploying application…“ git pull origin master docker-compose up -d –build | Позволява стартиране на контейнера; изображението трябва да бъде възстановено преди това. |
Параметризиране и конфигуриране | #!/bin/bash # Parameterization and Configuration for Java echo „Configuring test parameters…“ sed -i ‘s/DEBUG=true/DEBUG=false/’ config.properties | Може да се справи с параметризирането и конфигурацията, което позволява лесни настройки и последователност |
Паралелно изпълнение на тестове (Java + Maven) | #!/bin/bash # Parallel Test Execution with Java, JUnit, and Maven echo „Running tests in parallel…“ mvn clean test -Dtest=TestClass -DthreadCount=3 | Използва Maven за изпълнение на тестове с определен брой нишки |
Внедряване за Dockerized Java приложение | #!/bin/bash # Deployment Script for Dockerized Java Application echo „Deploying Dockerized Java application…“ docker build -t my-java-app . docker run -p 8080:8080 my-java-app | Този скрипт предполага Dockerized Java приложение. Той изгражда Docker image и стартира контейнер, който пуска приложението на порт 8080 |
Имайте предвид, че тези примери понякога имат няколко команди и те работят една по една. Нека разгледаме друг пример за последователност от команди на shell:
#!/bin/bash
sudo service mysql stop
cp /path/to/database/data/file.txt /path/to/destination/
sudo service mysql start
Този скрипт предполага MySQL сървър на база данни и използва sudo service mysql stop и sudo service mysql start съответно за спиране и стартиране на сървъра. Когато дадена команда е с префикс sudo (sudo означава „superuser do“), тя се изпълнява с повишени привилегии, което позволява на потребителя да извършва действия, за които обикновените потребители може да нямат разрешение.
Други полезни команди за автоматизация на тестове
Следните команди могат да бъдат полезни за инженерите по автоматизация на тестовете.
Команда | Използване | Пример |
pwd | Отпечатва текущия път на работната директория, което помага да се гарантира, че сте на правилното място по време на автоматизацията. | pwd //home/user/projects |
ls | Списък със съдържание на директория се използва за изброяване на файловете и директориите в конкретна директория. Помага ви да проверите наличието на файлове и директории. | ls –l |
cat | Свързване и показване на файлове: Командата ‘cat’ се използва за показване на съдържанието на файлове, което я прави полезна за проверка на регистрационни файлове, конфигурационни файлове и др. | cat log.txt |
tail | Показване на края на файл: ‘tail’ показва последните няколко реда от файл, което може да бъде от решаващо значение за наблюдение на лог файлове в реално време. | tail -f log.txt |
less | Преглед на съдържанието на текстовия файл: ‘less’ ви позволява да преглеждате съдържанието на текстовия файл, екран по екран. Можете да превъртите съдържанието му и да излезете, когато сте готови. | less filename.txt |
cd | Промяна на директорията: ‘cd’ ви позволява да навигирате в структурата на директорията. Това е от съществено значение за придвижване между папки във вашия проект за автоматизация на тестове. | cd /path/to/test/suite |
touch | Създаване на празни файлове: ‘touch’ е удобен за създаване на файлове с контейнери или актуализиране на timestamps на файлове, което може да бъде полезно при определени сценарии за тестване. | touch myfile.txt |
echo | Печат на текст към терминала: ‘echo’ отпечатва съобщения или променливи към терминала. Помага за отстраняване на грешки и генериране на динамично съдържание. | echo „Smoke run is in progress“ |
export <VARIABLE> | Задаване или експортиране на променливи на средата: ‘export’ променливата позволява да зададете някаква стойност на вашата променлива, която по-късно може да бъде достъпна от други програми или скриптове в рамките на същата сесия. | export MY_VARIABLE = „my_variable_value“ за да проверите дали променливата е зададена: echo $MY_VARIABLE |
ps | Информация за изпълняваните в момента процеси: ‘ps’ ви позволява да видите списък с процеси, изпълнявани във вашата система. За да видите подробен списък на всички процеси, включително тези на други потребители, можете да използвате опцията -e. | ps -e И за да изброите процеси, свързани с потребителя „john“, можете да използвате: ps –u john |
| | Функцията за канал, филтриране и обработка на данни: каналът или „|“ ви позволява да вземете изхода на една команда и да го използвате като вход за друга команда. Тази команда първо ще изброи всички работещи процеси (ps -ef) и след това ще предаде изхода на grep, който ще търси редове, съдържащи „myprocess“ в списъка с процеси. Резултатът ще бъде списък с процеси с „myprocess“ в техните имена. Ще видите изхода, показващ подробностите за процесите, съответстващи на „myprocess“. | ps –ef | grep myprocess |
>, >> | Оператори за пренасочване на изхода на команда: ‘>’ (единичен знак по-голямо) пренасочва стандартния изход на команда към файл. Ако файлът вече съществува, той ще бъде презаписан. Ако не съществува, ще бъде създаден нов файл. ‘>>’ (двоен знак за по-голямо) се използва за добавяне на стандартния изход на команда към файл. Ако файлът вече съществува, изходът ще бъде добавен в края на файла. Ако файлът не съществува, ще бъде създаден нов файл. | И за да изброите процеси, свързани с потребителя „john“, можете да използвате: ps –ef > process_list.txt за да добавите резултата от командата ps към съществуващ файл с име newProcess_list.txt, ще използвате: ps –ef >> newProcess_list.txt |
kill | Прекратяване на процеса: ‘kill’ се използва за прекратяване на процесите. Можете да посочите типа сигнал за вашия процес: ’15’ за плавно прекратяване на процеса ‘9’ за принудително прекратяване ‘1’ за прекъсване на процеса. | Нека си представим, че имаме процес с PID 12345. Пример за принудително прекратяване: kill -9 12345 Пример за прекратяване чрез пренасочване на изхода към файл с помощта на ‘>’: kill -15 12345 > kill_output.txt Пример за добавяне на output към съществуващ файл: kill -15 12345 >> kill_output.txt |
ЗАБЕЛЕЖКА: Можете да използвате няколко команди едновременно, за да спестите време. Например тази команда ще открие и прекрати процеса:
Ps –ef | grep -i <APP_NAME> |awk ‘{print $2}’ | xargs kill –9
Нека разгледаме още някои полезни неща:
curl | Прехвърляне на данни с URL адреси: ‘curl’ ви позволява да правите HTTP заявки. | Пример с извличане на уеб страница: curl https://www.example.com |
vim | Текстов редактор: ‘vim’ помага за редактиране на файлове и е много персонализиран. | Пример с отваряне на файл: vim filename.txt |
grep | Търсене на модели във файлове: ‘grep’ ви позволява да търсите конкретни модели или текст във файлове, което е ценно за анализ на регистрационни файлове и валидиране на данни. | Пример: grep „error“ log.tx |
Други полезни команди:
rm | Премахване на файлове и директории: Полезно е за почистване на временни файлове. | rm file.txt изтрива файла с име „file.txt.“ |
top | Показва информация в реално време за използването на системните ресурси. Помага за идентифициране на процеси с интензивно използване на ресурси по време на тестове за автоматизация. | top |
chmod | Промяна на разрешенията за файлове: Важно за конфигуриране на права за достъп. | chmod +x script.sh прави файла script.sh изпълним |
find | Търсене на файлове и директории: Чудесно за намиране на конкретни файлове в директория. | find /path/to/search -name „*.txt“ изброява всички .txt файлове в указаната директория |
wget | Non-interactive команда за изтегляне на файлове. | wget https://example.com/file.zip изтегля файл с име „file.zip“ от дадения URL адрес |
head | Показва първите 10 реда от всеки указан файл. | head -n 10 file.txt показва първите 10 реда на „file.txt.“ |
nano | Осигурява прост интерфейс за редактиране на текстови файлове. | nano file.txt отваря „file.txt“ за редактиране в нано редактора |
Можете да намерите пълния списък с команди ТУК.
Ето няколко неща, които биха подпомогнали уменията ви да използвате пълния потенциал на тези команди на Unix Shell:
● Практикувайте редовно
● Разберете при какви случаи се прилагат съответните команди
● Разгледайте разширените опции
● Комбинирайте команди с помощта на канали и пренасочвания
● Използвайте онлайн ресурси за обучение
● Помислете за контрол на версиите за манипулиране на файлове в проекти за автоматизация
Финални мисли
Прилагайки техниките, посочени в статията, QA Automation специалистите определено могат да опростят ежедневието си и да спестят време, използвайки скриптове на Shell. Овладяването на тези команди е от ключово значение при задачи като анализ на регистрационни файлове, скриптове за отстраняване на грешки и управление на тестови данни в практиките за непрекъсната интеграция.