Nano Hash - криптовалюты, майнинг, программирование

Не удалось заставить JSover и PhantomJS запустить тест Jasmine на Cloudbees.

В настоящее время я пытаюсь запустить JCover в режиме веб-сервера, чтобы определить покрытие моих тестов Jasmine, которые выполняются в безголовом браузере PhantomJS. Я также использую grunt+nodejs для запуска тестов.

Код, который я использую в своем gruntfile для запуска сервера JOver и выполнения phantomJS:

// Start JSCover Server
var childProcess = require('child_process'),
var JSCOVER_PORT = "43287";
var JAVA_HOME = process.env.JAVA_HOME;

var jsCoverChildArgs = [
        "-jar", "src/js/test/tools/JSCover-all.jar",
        "-ws",
        "--branch",
        "--port="+JSCOVER_PORT,
        "--document-root=./",
        "--report-dir=target/",
        "--no-instrument=src/js/lib/",
        "--no-instrument=src/js/test/",
        "--no-instrument=src/js/test/lib/"
    ];

var jsCoverProc = childProcess.spawn(JAVA_HOME + "/bin/java", jsCoverChildArgs);

// Start PhantomJS
var phantomjs = require('phantomjs'),
var binPath = phantomjs.path,

var childArgs = [
        'src/js/test/lib/phantomjs_jasminexml_runner.js',
        'http://localhost:'+JSCOVER_PORT+'/src/js/test/SpecRunner.html',
        'target/surefire-reports'
    ];
runner = childProcess.execFile(binPath, childArgs);

runner.on('exit', function (code) {
    // Tests have finished, so clean up the process
    var success = (code === 0) ? true : false;
    jsCoverProc.kill(); // kill the JSCover server now that we are done with it

    done(success);
}); 

Однако, когда я запускаю веб-сервер на узле Jenkins в cloudbees, а затем запускаю для него phantomjs, я получаю одну из следующих ошибок:

  • Некоторые тесты начинают выполняться, но затем процесс завершается сбоем:

    A spec : should be able to have a mock lo-dash ... 
    Warning: Task "test" failed. Use --force to continue.
    
    Aborted due to warnings.
    Build step 'Execute shell' marked build as failure
    Recording test results
    Finished: FAILURE
    
  • PhantomJS не может получить доступ к серверу JOver:

    Running "test" task
    phantomjs> Could not load 'http://127.0.0.1:43287/src/js/test/SpecRunner.html'.
    Warning: Task "test" failed. Use --force to continue.
    

Для второй ошибки я попытался использовать разные порты и имена хостов, которые я установил (например, 127.0.0.1 или localhost для имен хостов и 4327, 43287 и т. д. для портов). Порты не устанавливаются динамически во время сборки — они жестко запрограммированы в моем скрипте grunt.

Любые мысли о том, почему могут возникать указанные выше ошибки или почему у меня возникают проблемы с запуском и доступом к серверу Jover на узле Cloudbees Jenkins (но не на моем локальном компьютере)?


  • Есть ли способ настроить процесс jscover для регистрации? Интересно, это проблема параллелизма, вызванная низкоскоростными одноядерными ведомыми устройствами сборки (по сравнению с локальным компьютером), phantomJS начинает запускать тесты, но сервер JOver еще не полностью запущен 02.04.2013

Ответы:


1

Таким образом, когда вы выполняете JCover с любым процессом, для его запуска требуется время. Если мы ожидаем, что он встанет раньше, ошибки неизбежны.

Цитата из замечательной статьи: http://blog.johnryding.com/post/46757192364/javascript-code-coverage-with-phantomjs-jasmine-and

Теперь, когда у меня был инструмент покрытия кода, отвечающий всем моим требованиям, последней частью было заставить этот код работать как часть нашей сборки Jenkins (в которой используется скрипт grunt). Это было легко запустить, но я столкнулся с двумя ошибками, которые постоянно ломали мои сборки:

  1. Иногда phantomJS не мог подключиться к серверу JOver.
  2. Иногда phantomJS подключался к серверу, но затем прекращал выполнение моих тестов в случайной точке во время выполнения.

Это были действительно странные проблемы, которые возникали только на узлах Jenkins моей команды, и их было трудно диагностировать, хотя они оказались простыми исправлениями.

Для проблемы 1 эта ошибка была результатом того, что мой скрипт ворчания не ждал запуска JOver перед запуском phantomJS.

Что касается второй проблемы, оказалось, что моя команда использовала специальный инструмент запуска тестов jasmine, чтобы помочь с созданием XML-файлов после завершения тестов. Проблема с этим файлом заключалась в том, что в нем была функция, которая ждала, пока Jasmine завершит свое выполнение, но использовала очень короткий тайм-аут, прежде чем прекратила выполнение тестов. Это было проблемой с Jenkins + JCover, потому что теперь тесты загружались и выполнялись дольше, поскольку их нужно было загружать с веб-сервера, а не прямо из файловой системы. К счастью, это исправление было таким же простым, как увеличение времени ожидания.

31.05.2013
  • РЖУ НЕ МОГУ. Итак, самое смешное, что я (ОП) являюсь автором сообщения в блоге, и вы опередили меня, чтобы ответить на мой собственный вопрос. :) Рад слышать, что вам понравилась моя статья! 26.06.2013
  • OMG..haha не может быть лучше, чем это!! отличная статья бро! 17.07.2013

  • 2

    Я бы сказал, что вам нужно подождать некоторое время после появления JSover - в прошлом я делал вещи с веб-драйвером, когда я спавнился, а затем ждал, пока он будет доступен (в идеале вы можете искать ответ и спать, повторять, пока порожденный процесс не будет готов).

    Т.е. прежде чем продолжить, найдите правильный http-ответ от 127.0.0.1:43287 (что бы ни означало "действительный", сервер работает).

    04.04.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..