+
Вход

Въведи своя e-mail и парола за вход, ако вече имаш създаден профил в DEV.BG/Jobs

Забравена парола?
+
Създай своя профил в DEV.BG/Jobs

За да потвърдите, че не сте робот, моля отговорете на въпроса, като попълните празното поле:

115+50 =
+
Забравена парола

Въведи своя e-mail и ще ти изпратим твоята парола

Как да използваме ефективно Unix Shell за автоматизирано тестване

*Текстът е предоставен от 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“), тя се изпълнява с повишени привилегии, което позволява на потребителя да извършва действия, за които обикновените потребители може да нямат разрешение.

Други полезни команди за автоматизация на тестове

Следните команди могат да бъдат полезни за инженерите по автоматизация на тестовете.

Днес те питаме…

Как предпочиташ да комуникираш с колегите си на работа?
Loading ... Loading …
КомандаИзползванеПример
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 файлове в указаната директория
wgetNon-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. Овладяването на тези команди е от ключово значение при задачи като анализ на регистрационни файлове, скриптове за отстраняване на грешки и управление на тестови данни в практиките за непрекъсната интеграция.