Перейти к содержимому

Фотография

Интеграция TestComplete с TeamCity


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 16

#1 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 03 августа 2011 - 14:46

Всем привет!
Хочу узнать сталкивался ли кто-то с такой интеграцией, возможно есть опыт?
Поставлена задача: запуск тестов GUI на TestComplete после деплоймента, как это организовать?

Хочу повториться со вторым вопросом: Реально заставить TC выполнять тесты в фоновом режиме?

Заранее спасибо
  • 0

#2 anagramma

anagramma

    Активный участник

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 04 августа 2011 - 10:16

Ну а почему нет?
У нас именно так и работает. После билда или по нажатию Run... запускаются тесты на тестовом сервере. На серваке стоит агент TeamCity, а TestComplete запускается командной строкой.
Единственное, что - нет возможности выводить текущие результаты в TeamCity (или я не нашел как) приходится в процессе тестов создавать свой лог, а в конце подсовывать его агенту. Все работает на ура.
  • 0

#3 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 04 августа 2011 - 10:21

Ну а почему нет?
У нас именно так и работает. После билда или по нажатию Run... запускаются тесты на тестовом сервере. На серваке стоит агент TeamCity, а TestComplete запускается командной строкой.
Единственное, что - нет возможности выводить текущие результаты в TeamCity (или я не нашел как) приходится в процессе тестов создавать свой лог, а в конце подсовывать его агенту. Все работает на ура.


а можешь описать как вы интегрировали? какой командой запускаешь скрипты?
  • 0

#4 anagramma

anagramma

    Активный участник

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 04 августа 2011 - 12:18

как настраивать агент я не особо знаю, но то что знаю напишу...

В проекте ТимСити в секции
Build Steps
стоит:
Command Line - Command: cmd.exe /v:on /e:on /a /c c:\runtests.cmd

примерный батник по которому работает агент - проверка разворачиваемости пакетов(runtests.cmd) просто в нем методами ТестКомплита вводится пользователь для дальнейших тестов:

rem ------------------------------------------------
rem
rem запускать с опциями командной строки /v:ON /e:ON
rem
rem ------------------------------------------------

chcp 1251>nul
set /a zero=0
set root=c:\test
set RarDir=C:\Program Files\WinRAR

rem Removing database
@echo ##teamcity[progressMessage 'Removing database']
REM (SQL 2005)
"c:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "if DB_ID('test') IS NOT NULL DROP DATABASE test"
REM (SQL 2008)
REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "if DB_ID('test') IS NOT NULL DROP DATABASE test"
if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%

@echo ##teamcity[progressMessage 'Clearing directory']
for /d %%d in (%root%\*.*) do call :clear_dir %%d
for %%f in (%root%\*.*) do del /q %%f

@echo ##teamcity[progressMessage 'Exporting source code']
rem ----

rem создание базы данных
@echo ##teamcity[progressMessage 'Creating database']
REM (SQL 2005)
"c:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "CREATE DATABASE test ON ( NAME = Test_dat, FILENAME = '%root%\test.mdf', SIZE = 10) LOG ON ( NAME = Test_log, FILENAME = '%root%\test.ldf', SIZE = 5MB)"
REM (SQL 2008)
REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "CREATE DATABASE test ON ( NAME = Test_dat, FILENAME = '%root%\test.mdf', SIZE = 10) LOG ON ( NAME = Test_log, FILENAME = '%root%\test.ldf', SIZE = 5MB)"
if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%

rem deployment
set DEPLOY_STEP=0
@echo ##teamcity[testSuiteStarted name='Развертывание пакетов ']
@echo ##teamcity[testStarted name='Развертывание пакетов ']
:deployment
set /a before=0
for %%p in (%root%\packs\*.pkg) do @set /a before=!before! + 1
set /a DEPLOY_STEP=!DEPLOY_STEP! + 1
@echo ##teamcity[progressMessage 'Deployment step !DEPLOY_STEP!']

REM тут строка с командой разворачивания пакетов

set after=0
for %%p in (%root%\packs\*.pkg) do @set /a after=!after! + 1
if %after%==%zero% goto :initdata
if %before% GTR %after% (
@echo ##teamcity[testStdOut name='Развертывание пакетов' out='Ошибка при развертывании']
goto  :deployment
)
if %after% GTR %zero% goto :deploy_error


:initdata
@echo ##teamcity[testFinished name='Развертывание пакетов']
@echo ##teamcity[testSuiteFinished name='Развертывание пакетов']



rem Enter System Settings with testcomplete
@echo ##teamcity[testSuiteStarted name='Ввод пользователя БД средствами TestComplete']
@echo ##teamcity[testStarted name='Ввод пользователя БД средствами TestComplete']
@echo ##teamcity[progressMessage 'Enter System Settings']
"C:\Program Files\Automated QA\TestComplete 7\Bin\TestComplete.exe" "%root%\test.pjs" /r /p:_InitTests /e /SilentMode /ns
@echo ##teamcity[testFinished name='Ввод пользователя БД средствами TestComplete']
@echo ##teamcity[testSuiteFinished name='Ввод пользователя БД средствами TestComplete']

rem saving DB
:saving_Db
@echo ##teamcity[progressMessage 'Saving database']
REM (SQL 2005)
"c:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "ALTER DATABASE [test] SET SINGLE_USER;  exec sp_detach_db @dbname=N'test', @skipchecks='true';"
REM (SQL 2008)
REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "ALTER DATABASE [test] SET SINGLE_USER;  exec sp_detach_db @dbname=N'test', @skipchecks='true';"
if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%

copy %root%\test.mdf %root%\test.bak
if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%

REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "CREATE DATABASE [test] ON (FILENAME = N'%root%\test.mdf') FOR ATTACH_REBUILD_LOG;"
REM if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%



:ExportData

@echo ##teamcity[testSuiteStarted name='Архивация артифактов']
@echo ##teamcity[testStarted name='Архивация артифактов']
@echo ##teamcity[progressMessage 'Packing deploy results...']
REM xcopy %root%\business\RunTests.cmd %root%\*.* /y
"%RarDir%\winrar.exe" a -afzip -ep1 -r -s -k -rr3p -m5 -dh "%root%\Deploy" "%root%\Client" "%root%\InitData" "%root%\Server" "%root%\test.bak"
@echo ##teamcity[testFinished name='Архивация артифактов']
@echo ##teamcity[testSuiteFinished name='Архивация артифактов']
@echo ##teamcity[progressMessage 'Publishing Artifacts...']
@echo ##teamcity[publishArtifacts '%root%\Deploy.zip']

goto :EOF

exit 1

:deploy_error
@echo deployment error after %DEPLOY_STEP% steps
exit 1

:clear_dir
if /i %1==%root%\initdata exit /b
rd /q /s %1
exit /b




Другой батник уже для тестов например такой:

rem ------------------------------------------------
rem
rem запускать с опциями командной строки /v:ON /e:ON
rem
rem ------------------------------------------------

chcp 1251>nul
set /a zero=0
set root=c:\test

@echo ##teamcity[progressMessage 'Exporting source code']
rem ---

@echo ##teamcity[progressStart 'Restore DATABASE']
REM (SQL 2008)
"c:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "ALTER DATABASE [test] SET SINGLE_USER;  exec sp_detach_db @dbname=N'test', @skipchecks='true';"
REM (SQL 2008)
REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "ALTER DATABASE [test] SET SINGLE_USER;  exec sp_detach_db @dbname=N'test', @skipchecks='true';"
if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%

copy %root%\test.bak %root%\test.mdf
if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%
REM (SQL 2005)
"c:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "CREATE DATABASE [test] ON (FILENAME = N'%root%\test.mdf') FOR ATTACH_REBUILD_LOG;"
REM (SQL 2008)
REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "CREATE DATABASE [test] ON (FILENAME = N'%root%\test.mdf') FOR ATTACH_REBUILD_LOG;"
if NOT ERRORLEVEL 0 EXIT %ERRORLEVEL%
@echo ##teamcity[progressFinish 'Restore DATABASE']

:tests
rem testcomplete run
@echo ##teamcity[progressStart 'Execution TestComplete - Business tests]
rem call %root%\business\RunTests.cmd
for %%t in (TestMenu TESTS) do (
@echo ##teamcity[testSuiteStarted name='Тестирование документа %%t']
"C:\Program Files\Automated QA\TestComplete 7\Bin\TestComplete.exe" "%root%\business\test.pjs" /r /p:%%t /e /SilentMode /ns
type %root%\business\Log_autotest\Log.txt
@echo ##teamcity[testSuiteFinished name='Тестирование документа %%t']
)
@echo ##teamcity[progressFinish 'Execution TestComplete - Business tests']

REM (SQL 2005)
"c:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "ALTER DATABASE [test] SET SINGLE_USER;  exec sp_detach_db @dbname=N'test', @skipchecks='true';"
REM (SQL 2008)
REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"  -b -S (local)\SQLEXPRESS -E -Q "ALTER DATABASE [test] SET SINGLE_USER;  exec sp_detach_db @dbname=N'test', @skipchecks='true';"

:ExportData

@echo ##teamcity[testSuiteStarted name='Архивация лога']
@echo ##teamcity[testStarted name='Архивация лога']
@echo ##teamcity[progressMessage 'Packing tests results...']
REM xcopy %root%\business\RunTests.cmd %root%\*.* /y
del /s /q %root%\server\Output\*.* >nul
"%RarDir%\winrar.exe" a -afzip -ep1 -r -s -k -rr3p -m5 -dh "%root%\Results" "%root%\business\Log_autotest\Results.mht"
@echo ##teamcity[testFinished name='Архивация лога']
@echo ##teamcity[testSuiteFinished name='Архивация лога']
@echo ##teamcity[progressMessage 'Publishing Artifacts...']
@echo ##teamcity[publishArtifacts '%root%\business\Log_autotest\Results.zip']

goto :EOF

:usage
exit 1

:clear_dir
rd /q /s %1
exit /b


думаю это более чем понятно... до много доходили сами, так что не пинайте сильно если что))
  • 1

#5 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 04 августа 2011 - 13:04

Мда... надо будет понять... А тестировать GUI реально на удаленной машине не заходя на нее или это не возможно?
  • 0

#6 anagramma

anagramma

    Активный участник

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 04 августа 2011 - 13:17

Мда... надо будет понять... А тестировать GUI реально на удаленной машине не заходя на нее или это не возможно?


Ну стоит себе просто машина на которой крутятся тесты и все. главное мышку с клавой отовсех спятать подальше.
  • 0

#7 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 04 августа 2011 - 13:24


Мда... надо будет понять... А тестировать GUI реально на удаленной машине не заходя на нее или это не возможно?


Ну стоит себе просто машина на которой крутятся тесты и все. главное мышку с клавой отовсех спятать подальше.


я так понял что окно на машину эту (удаленную) должно быть открыто?
  • 0

#8 anagramma

anagramma

    Активный участник

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 04 августа 2011 - 14:20



Мда... надо будет понять... А тестировать GUI реально на удаленной машине не заходя на нее или это не возможно?


Ну стоит себе просто машина на которой крутятся тесты и все. главное мышку с клавой отовсех спятать подальше.


я так понял что окно на машину эту (удаленную) должно быть открыто?


Кхем! Не окно, а локальная консоль, да должна быть всегда открыта. Ну или если только это не виртуальная машина, тогда у вас будет окно, которое все равно должно быть открыто. TestComplete же эмулирует действия пользователя т.е. как-будто кто-то работает за машиной.
  • 0

#9 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 11 августа 2011 - 09:26

А вы не пробовали подставлять xml логи TC в TeamCity?

Второй вопрос, я прочитал что можно добавить кастомную вкладку в TeamCity, где будут отображаться логи ТС. Как это можно реализовать?
  • 0

#10 anagramma

anagramma

    Активный участник

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 12 августа 2011 - 13:25

А вы не пробовали подставлять xml логи TC в TeamCity?

Второй вопрос, я прочитал что можно добавить кастомную вкладку в TeamCity, где будут отображаться логи ТС. Как это можно реализовать?


1. Нет не пробовал, но если кто пробовал, было бы интересно послушать советы.
2. Не слышал про это. Буду благодарен за ссылки для изучения сабжа.
  • 0

#11 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 12 августа 2011 - 14:07

вот на сайте нашел как это делать http://confluence.je...e Build Results
  • 1

#12 Deimos

Deimos

    Новый участник

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Михаил Власов

Отправлено 15 октября 2013 - 04:34

Вот есть информация: tctutorial
  • 2

#13 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 16 октября 2013 - 10:50

Вот есть информация: tctutorial

Может кому пригодится.

Я интегрировал результаты выполнения тестов в тимсити, т.е. можно использовать стандартные тулы для статистики и быстро смотреть результаты в таком вот виде:
Прикрепленный файл  1.png   77,5К   21 Количество загрузок:
Для этого я, чтобы не городить лес с параллельным логированием, распарсиваю лог тесткомлита. Для этого я сначала сохраняю лог
Log.SaveResultsAs(Project.ConfigPath+"TeamCityLog//",lsHTML);
в конце каждого теста (вешаю на OnStopTest).

А потом натравливаю на него xslt.
В тимсите я использую msbuild вместо CommandLine, для него это выглядит так:
	<Target Name="RunTest" DependsOnTargets="Deploy">
		<!--
		Здесь все что связано с запуском и выполнением тестов
		А когда уже все выплнилось
		-->

		<XslTransformation 
			OutputPaths="$(YOUR_PATH)\TeamCityLog\compiled_log.xml"
			XmlInputPaths="$(YOUR_PATH)\TeamCityLog\root.xml"
			XslInputPath="$(YOUR_PATH)\TeamCityLog\LogParser.xsl"/>
		<XslTransformation 
			OutputPaths="$(YOUR_PATH)\TeamCityLog\teamcityresult.txt"
			XmlInputPaths="$(YOUR_PATH)\TeamCityLog\compiled_log.xml"
			XslInputPath="$(YOUR_PATH)\TeamCityLog\GetTeamCityLog.xsl"/>
		<Exec ContinueOnError="false" Command="type  $(YOUR_PATH)\TeamCityLog\teamcityresult.txt)"/>
	</Target>

LogParser.xsl (и вспомогательный TestParser.xsl) собирает информацию в один xml, а GetTeamCityLog.xsl превращает его в текстовый файл с записями в формате тимсити. Потом просто выводим этот файл.

Из коммандной строки можно использовать msxsl.exe.

Работает для 9 тесткомплита, как будет с более ранними версиями не знаю.

Если будут вопросы - спрашивайте :)

Прикрепленные файлы


  • 1

#14 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 16 октября 2013 - 11:37


Вот есть информация: tctutorial

Может кому пригодится.

Я интегрировал результаты выполнения тестов в тимсити, т.е. можно использовать стандартные тулы для статистики и быстро смотреть результаты в таком вот виде:
Прикрепленный файл  1.png   77,5К   21 Количество загрузок:
Для этого я, чтобы не городить лес с параллельным логированием, распарсиваю лог тесткомлита. Для этого я сначала сохраняю лог
Log.SaveResultsAs(Project.ConfigPath+"TeamCityLog//",lsHTML);
в конце каждого теста (вешаю на OnStopTest).

А потом натравливаю на него xslt.
В тимсите я использую msbuild вместо CommandLine, для него это выглядит так:
	<Target Name="RunTest" DependsOnTargets="Deploy">
		<!--
		Здесь все что связано с запуском и выполнением тестов
		А когда уже все выплнилось
		-->

		<XslTransformation 
			OutputPaths="$(YOUR_PATH)\TeamCityLog\compiled_log.xml"
			XmlInputPaths="$(YOUR_PATH)\TeamCityLog\root.xml"
			XslInputPath="$(YOUR_PATH)\TeamCityLog\LogParser.xsl"/>
		<XslTransformation 
			OutputPaths="$(YOUR_PATH)\TeamCityLog\teamcityresult.txt"
			XmlInputPaths="$(YOUR_PATH)\TeamCityLog\compiled_log.xml"
			XslInputPath="$(YOUR_PATH)\TeamCityLog\GetTeamCityLog.xsl"/>
		<Exec ContinueOnError="false" Command="type  $(YOUR_PATH)\TeamCityLog\teamcityresult.txt)"/>
	</Target>

LogParser.xsl (и вспомогательный TestParser.xsl) собирает информацию в один xml, а GetTeamCityLog.xsl превращает его в текстовый файл с записями в формате тимсити. Потом просто выводим этот файл.

Из коммандной строки можно использовать msxsl.exe.

Работает для 9 тесткомплита, как будет с более ранними версиями не знаю.

Если будут вопросы - спрашивайте :)


Я решил по другому как делать.
Помимо интеграции логов, я еще генерю батник из самого Тест Комплита который потом открывается Тим Сити, и вуаля.
  • 0

#15 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 16 октября 2013 - 15:07

Я решил по другому как делать.
Помимо интеграции логов, я еще генерю батник из самого Тест Комплита который потом открывается Тим Сити, и вуаля.

а можно подробностей? Что за батник, как генеришь, что он в тесткомплите делает?
  • 0

#16 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 18 октября 2013 - 12:23


Я решил по другому как делать.
Помимо интеграции логов, я еще генерю батник из самого Тест Комплита который потом открывается Тим Сити, и вуаля.

а можно подробностей? Что за батник, как генеришь, что он в тесткомплите делает?


Батник нужен что-бы отображать количество пройденных и провалиных тестов сразу на главной странице Тим Сити, в строке с билдом.

сначала написал функцию:

function runTestCasesWithTeamCityReport(testName, testFunction)
{
    logFile.WriteLine("echo ##teamcity[testStarted name='" + testName + "']");
    testFunction(); 
    logFile.WriteLine("echo ##teamcity[testFinished name='" + testName + "']");
}


где соответственно:

var logFile = FSO.CreateTextFile("C:\\logfile.bat", true);

Например есть Тест который логинится куда то:

runTestCasesWithTeamCityReport("Login using FB account", function() {_Login_via_Facebook_Test_acc(); });

После прохождения всех тестов, сгенерированый батник запускается тим сити (один из шагов билд степа)

в результате все тесты будут показаты в строке билда, таким вот образом
Прикрепленный файл  2013-10-18_1521.png   5,37К   14 Количество загрузок:
  • 1

#17 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 20 октября 2013 - 08:14

Батник нужен что-бы отображать количество пройденных и провалиных тестов сразу на главной странице Тим Сити, в строке с билдом.

Ага, мои трансформации делают тоже самое. :) В тимсити для каждого теста посылается типа такого
##teamcity[testStarted name='Normal_Search.Search(UsersTests_SearchUserTest)']
##teamcity[testFinished name='Normal_Search.Search(UsersTests_SearchUserTest)' duration='288000']
И формируется вот такая строка для всего запуска.
##teamcity[buildStatus status='SUCCESS' text='{build.status.text} (Warnings: 0; Errors: 0)']
Я только решил не заморачиваться с кастомным логированием, имхо так проще :)
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных