www.avast.comwww.avast.com
Использование Open Source
инструментов для
автоматизации тестирования
Сергей Никонюк
3 февраля 2013 г.
Содержание доклада
1. Постановка задачи
2. Jenkins - сервер автоматизации процесса тестирования
3. Sikuli – автоматизация с помощью изображений
4. Robot Framework – инструмент для автоматизации
тестирования ПО
5. Staf – мультиплатформенное решения для соединения
с удаленными машинами
6. Демонстрaция примера
7. Вопросы
3
Постановка задачи
AVAST антивирус
Сборка инсталлятора
(setup.exe)
Сценарии тестов
и вспомогательные файлы
Результаты
Автоматизация• передача файлов
• выполнения тестов
• оценка результатов
4
РАЗРАБОТЧИКИТЕСТИРОВЩИКИ
build (setup.exe)
сборка
файлы
сценарии тестов
былд
отчет
5
• трансфер файлов
• выполнение тестов
• оценка результатов
Приемочное тестирование
Составляющие фреймворка
Jenkins – сервер автоматизации
Особенности• open source
• простая инсталляция и конфигурация
• мультиплатформенность (Java)
• планирование периодичности выполнения задач
используя механизм подобный cron
• поддерживает работу с системами контроля версий
(CVS, Subversion, Mercurial, Git, Clearcase)
• визуализация результатов теста
• исполняет shell-скрипты и команды Windows
6
7
Jenkins – результаты теста
Особенности
• open source
• мультиплатформенность (Windows, Mac OS X
и Linux)
• собственная IDE
• написание скриптов в Jython (Python)
• широкие возможности API (запуск аппликаций
и контроль над ними, действия
мыши, клавиш, исключения)
• окружение – Java 6 + Jython 2.5
8
SIKULI (www.sikuli.org)
SIKULI
• + Независимость на платформе (Java)
• + Независимость от тестируемой технологии
• + Высокая надежность
• + Простота создания сценариев
• – Зависимость от разрешения экрана
• – Высокая чувствительность к измненениям GUI
• – Низкая способность распознавания текста
9
Robot Framework
(code.google.com/p/robotframework/)
Особенности
Поддерживаемые библиотеки• внутренняя (OperatingSystem, Screenshot, Telnet,
Collections, String, Dialogs, Remote, XML)
• вннешние (SeleniumLibrary, watir-robot, Watir,
WatinLibrary, SwingLibrary, EclipseLibrary, AutoItLibrary,
DatabaseLibrary, SSHLibrary, HTTP test library)
• open source
• мультиплатформенность
• поддержка библиотек в Python (Jython,
IronPython) и Java
• standalone JAR дистрибуция с Jython
• поддержка языка C (Python C API)
10
STAF (staf.sourceforge.net)Особенности• open source
• мультиплатформенность
• peer-to-peer среда
• поддержка политики безопасности
• внутренне сервисы-команды
(пересылка файлов, управлние
процессами ...)
• поддержка внешних сервисов (Java
jar, C ++ dll)
• возможность управления как
локальной машиной так и удаленной
• конфигурационный файл STAF.cfg
11
STAF клиент STAF клиент
peer-to-peer
STAF – сервисы
12
• Внутренние сервисы
Вызываемые из процесса STAFProc
• Внешние сервисы
Подлючаемые из Java jar или C++ dll файлов
• Пользовательские сервисы
STAF – внутренние сервисы
13
• DIAG Provides diagnostics services Internal ("DIAG")
• DELAY Provides a means to sleep a specified amount of time Internal ("DELAY")
• ECHO Echos back a supplied message Internal ("ECHO")
• FILE SYSTEM Allows you to get and copy files across the network Internal ("FS")
• HANDLE Provides information about existing STAF handles Internal ("HANDLE")
• HELP Provides Help on STAF error codes Internal ("HELP")
• MISC Handles miscellaneous commands such as displaying the version of STAF
• that is currently running Internal ("MISC")
• PING Provides a simple is-alive message Internal ("PING")
• PROCESS Allows you to start, stop, and query processes Internal ("PROCESS")
• QUEUE Provides a network-enabled IPC mechanism for STAF Programs Internal ("QUEUE")
• SEMAPHORE Provides network-enabled named event and mutex semaphores Internal ("SEM")
• SERVICE Allows you to list services available on a machine and to examine the
• Requests that have been submitted on a machineInternal ("SERVICE")
• SHUTDOWN Provides a means to shutdown STAF and register for shutdown
• Notifications Internal ("SHUTDOWN")
• TRACE Provides tracing information for STAF services Internal ("TRACE")
• TRUST Interfaces with STAF's security Internal ("TRUST")
• VARIABLE Provides a method for maintaining configuration and runtime data
• (variables) Internal ("VAR")
STAF – внешние сервисы
14
• CRON Calls into STAF services at a specified time interval External (Java)
• EMAIL Allows you to send email messages External (Java)
• EVENT Provides a publish/subscribe notification system External (Java)
• EVENTMANAGER Allows you to call STAF services when a specified Event occurs External (Java)
• HTTP Allows you to make HTTP requests which can be grouped together in a session External (Java)
• LOG Provides a full-featured logging facility External (C++)
• MONITOR Allows a testcase to publish its current running execution status for others to read External (C++)
• RESOURCE POOL Allows you to manage exclusive access to pools of elements, e.g. VM UserIDs or Software Licenses External (C++)
• STAX Provides an XML-based execution engine External (Java)
• ZIP Provides a means to zip/unzip/list/delete PKZip/WinZip compatible archives External (C++)
STAF – политика безопасности
15
• Политика безопасности в STAF определена уровнем
доверия машин machine level и/или пользователей
user level
• Уровень trust level равный 0 – нет доступа
• Уровень trust level равный 1 – только PING и HELP
• Уровень trust level равный 2 – только query/view
• Уровень trust level равный 3 – доступ к протоколам ...
• Уровень trust level равный 4 – копирование файлов ... удаление логов
• Уровень trust level равный 5 – доступ без ограничений
• По умолчанию машинам присваивается default trust
level
• Каждый STAF сервис определен минимальным
необходимым уровнем доверия
STAF – STAF.cfg
16
# Turn on tracing of internal errors and deprecated options
trace enable tracepoints "error deprecated"
# Enable TCP/IP connections
interface ssl library STAFTCP option Secure=Yes option Port=6550
interface tcp library STAFTCP option Secure=No option Port=6500
# Set default local trust
trust machine local://local level 5
trust machine tcp://10.0.2.2 level 5
trust default level 1
# Add default service loader
serviceloader library STAFDSLS
robotframework-2.7.jarsikuli-script.jar
run_free_instup_win_xp.bat
@echo off
set sikuli_jar=C:\Program Files\Sikuli X\sikuli-script.jar
java -cp "robotframework-2.7.jar;%sikuli_jar%" ^
-Dpython.path="%sikuli_jar%/Lib" ^
org.robotframework.RobotFramework ^
--pythonpath=SetupLib ^
--outputdir=results ^
--xunitfile=unit_out.xml ^
--loglevel=TRACE ^
robot_suite\free_instup_win_xp.txt
%*
17
Пример 1
18
Пример 2 TEST CASE
*** Settings ***
Library av7set.Av7setup
*** Variables ***
${SETUP_FREE_PATH} C:\\tmp\\avast_setup\\
${SETUP_FREE_EXE} avast_free_antivirus_setup.exe
*** Test Cases ***
Free Express Install Windows XP
Minimize All Win
Run App ${SETUP_FREE_PATH}${SETUP_FREE_EXE}
Wait Image screen set_1 0 0 60
Action Object Click screen ins_button 0 0
Action Object Click screen cross 0 0
Action Object Click screen yes_button 0 0
Action Object Click screen finish_button 0 0
free_instup_win_xp.txt19
Пример 3
from sikuli.Sikuli import *
import platform
import datetime
import subprocess
import time
import shutil
#add custom image library
addImagePath("images")
…
av7set.py
20
Пример 4
…
class Av7setup(object):
def runApp(self, appExe):
apprun = str(appExe)
responseCode = subprocess.Popen(apprun)
return responseCode
def minimizeAllWin(self):
type("d", KeyModifier.WIN)
def waitImage(self, reg, imgName, off_x, off_y, tm):
sim = 0.95
patt = Pattern(imgName + ".png").similar(sim).targetOffset(int(off_x),int(off_y))
t = int(tm)
while t > 0:
mm = exists(patt)
if mm != None:
return mm
else:
sleep(5)
t = t – 5
return Pattern(None)
def actionObjectClick(self, reg, objName, off_x, off_y):
m = self.waitImage(reg, objName, off_x, off_y, 20)
click(m)
av7set.py
21
Пример 5
22
Пример 6
«Local»
IP: 127.0.0.1
PORT: 14816
IP: 127.0.0.1
PORT: 6500C:\test
23
DEV_NIK_WIN_XP
staf 127.0.0.1@6500 PROCESS start command "VBoxManage startvm
DEV_NIK_WIN_XP“
staf 127.0.0.1@14816 PING ping
staf local FS copy directory \test todirectory \tmp tomachine 127.0.0.1@14816
staf 127.0.0.1@14816 PROCESS start command \tmp\run_free_instup_win_xp.bat
RETURNSTDOUT STDERRTOSTDOUT WAIT
staf 127.0.0.1@14816 FS copy directory \tmp\results todirectory \test
staf 127.0.0.1@6500 PROCESS start command "VBoxManage controlvm
DEV_NIK_WIN_XP acpipowerbutton”
ping ping
pong
«Virtual»Пример 7
C:\tmp
24
Демонстрация
Основные тезисы доклада
1. Постановка задачи
2. Jenkins – взгляд тестировщика
3. Sikuli – автоматизация с помощью изображений
4. Robot Framework – инструмент для автоматизации
тестирования ПО
5. Staf – мультиплатформенное решения для соединения
с удаленными машинами
6. Демонстрация примера
25
Top Related