2014-01-31 5 views
0

Я создаю мобильное приложение с Flex 4.11.0 и AIR 4.0. Моя IDE - Flash Builder 4.7. Я написал много модульных тестов, некоторые из которых используют функции AIR, такие как доступ к файловой системе.ANT-Task для FlexUnit для проекта AIR Mobile в Jenkins

Я пытаюсь интегрировать проект в работу CI на jenkins. У меня есть ANT скрипт делает следующее:

  • Компиляции
  • Упаковки для Android
  • Упаковки для прошивки
  • Создания ASDoc

То, что я хочу сейчас, чтобы написать ANT- Задача для запуска моих модульных тестов и создания отчета в формате XML или HTML, который впоследствии может быть проанализирован Дженкинсом.

Я пробовал следующее: - Последовал учебник по http://tutorials.digitalprimates.net/flexunit/Unit-16.html и получил пример для работы. Однако это Flash-проект, а не AIR-Project! - Прочитайте документацию по адресу https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Ant+Task, загрузите и построите код FlexUnit от [email protected]: flexunit/flexunit.git, чтобы получить FlexUnit4AIRCIListener.swc - Прочтите много информации в Интернете со всего места, не найдя ответ (я нашел некоторые намеки, но много информации являются устаревшими или ссылками мертвых ссылок)

то, что я до сих пор является следующим:

<taskdef resource="flexUnitTasks.tasks" classpath="${basedir}\libs\flexUnitTasks-4.1.0.jar" /> 

<target name="test" > 
    <echo>Testing...</echo> 
    <echo>==========</echo> 

    <!-- 1. Compile FlexUnit-Application --> 
    <mxmlc file="${PROJECT.src}\FlexUnit.mxml" output="FlexUnit.swf" > 
     <load-config filename="D:\tools\sdk\flex\4.11.0_AIR4.0\frameworks\air-config.xml" append="true" /> 

     <source-path path-element="${PROJECT.src}" /> 
     <source-path path-element="${basedir}\test" /> 
     <library-path dir="${PROJECT.libs}" append="true"> 
      <include name="**/*.swc" /> 
      <include name="**/*.ane" /> 
     </library-path> 
     <library-path dir="D:\tools\sdk\flex\4.11.0_AIR4.0\frameworks\libs\air" append="true"> 
      <include name="airglobal.swc" /> 
     </library-path> 
     <compiler.verbose-stacktraces>true</compiler.verbose-stacktraces> 
     <compiler.headless-server>true</compiler.headless-server> 
    </mxmlc> 

    <!-- 2. Run the compiled SWF --> 
    <flexunit swf="FlexUnit.swf" 
        player="air" 
     timeout="180000" 
     toDir="${OUTPUT.root}\flexUnit" 
     haltonfailure="false" 
     verbose="true" 
     localTrusted="true" 
    /> 

    <!-- 3. Generate readable JUnit-style reports --> 
    <junitreport todir="${OUTPUT.root}\flexUnit"> 
     <fileset dir="${OUTPUT.root}\flexUnit"> 
      <include name="TEST-*.xml" /> 
     </fileset> 
     <report format="frames" todir="${OUTPUT.root}\flexUnit\html" /> 
    </junitreport> 
</target> 

Вот соответствующие части моего FlexUnit .mxml-Применение:

 protected function onCreationComplete(event:FlexEvent):void 
     { 
      core = new FlexUnitCore(); 
      core.addListener(new AirCIListener()); 
      core.run(currentRunTestSuite()); 
     } 
     public function currentRunTestSuite():Array 
     { 
      var testsToRun:Array = new Array(); 
      testsToRun.push(test.suites.CLXSatelliteTestSuite); 
      return testsToRun; 
        } 

Шаг 1. из работы ANT-Task (по крайней мере, я получаю FlexUnit.swf). Однако, Запуск SWF в <flexunit> -Task не удается:

VerifyError: Error #1014: Class flash.filesystem::File could not be found. 

Консольный вывод: [FlexUnit] Генерация значений по умолчанию ... [FlexUnit] Использование по умолчанию рабочий реж [D: \ Рабочие области \ сгибать \ Projects \ clx-satellite] [flexunit] Использование следующих параметров для тестового прогона: [flexunit] FLEX_HOME: [D: \ tools \ sdk \ flex \ 4.11.0_AIR4.0] [flexunit] haltonfailure: [false] [ flexunit] headless: [false] [flexunit] дисплей: [99] [flexunit] localTrusted: [true] [flexunit] плеер: [flash] [flexunit] port: [1024] [flexunit] swf: [D: \ workspaces \ flex \ projects \ clx-satellite \ FlexUnit.swf] [flexunit] timeout: [180000ms] [flexunit] toDir: [D : \ workspaces \ flex \ projects \ clx-satellite \ deploy \ flexUnit] [flexunit] Настройка процесса сервера ... [flexunit] Начальный сервер ... [flexunit] Открытие гнезда сервера на порту [1024]. [FlexUnit] Ожидание подключения клиента ... [FlexUnit] OS: [Windows] [FlexUnit] Запуск игрок: [FlexUnit] Выполнение 'rundll32' с аргументами: [FlexUnit] Url.dll, FileProtocolHandler ' [flexunit] 'D: \ workspaces \ flex \ projects \ clx-satellite \ FlexUnit.swf ' [flexunit] Символы вокруг исполняемого файла и аргументы: [flexunit] не является частью команды. [flexunit] Клиент подключен. [flexunit] Установка размера входящего буфера на [262144] байта. [flexunit] Получение данных ... [flexunit] Отправка подтверждения игроку для начала отправки тестовых данных ... [flexunit] [flexunit] Остановка сервера ... [flexunit] Окончание данных теста достигнуто, отправка подтверждения игрок ...

BUILD FAILED 
D:\workspaces\flex\projects\clx-satellite\build.xml:148: 
java.util.concurrent.ExecutionException: could not close client/server socket 

Когда я включаю один тест, который не использует File -класса, тесты работают, и я получаю подобную ошибку (ReferenceError: Error #1065: Variable flash.desktop::NativeApplication is not defined.), но по крайней мере тесты пробегают, и я получаю XML -вывод. Мне кажется, что FlexUnit на самом деле не совместим с AIR, хотя я использую player=air в задаче.

У кого-нибудь из вас есть рабочий пример запуска модульных тестов с помощью FlexUnit для приложения AIR (возможно, мобильного приложения) через ANT?

ответ

0

Никогда не ум, я понял это сам и писал о нем в своем блоге: http://www.tiefenauer.info/ci-for-flex-mobile-applications-part-3-performing-unit-tests/

я описал весь процесс CI там, только в случае, если кто-то имеет такую ​​же проблему.

+1

Этот ответ может быть полезен другим пользователям, но ссылка сейчас не работает. Хотелось бы, чтобы вы объяснили здесь ответ на SO – duggulous

0

Существует запрос функции Apache FlexUnit для этого здесь: Apache FlexUnit: FLEX-35090

Или вы можете использовать эту функцию компиляции собственной задачи FlexUnit, используя эту вилку FlexUnit 4.1: additionalCompilerOptions branch

форматирования поддерживается с обычаем FlexUnit Ant Task выглядит следующим образом:

<flexunit 
    workingDir="${bin.loc}" 
    toDir="${report.loc}" 
    haltonfailure="false" 
    verbose="true" 
    localTrusted="true" > 

    <!-- only supported with custom FlexUnit Ant tasks --> 
    <additionalCompilerOption option="-define+=MY_CONST::foo,'BAR'" /> 

</flexunit>