Как создать файл xml для avito

Обновлено: 21.11.2024

Узнайте, как создать новый документ XML, открыть документ XML и сохранить документ XML с помощью Adobe FrameMaker.

Введение

С помощью Adobe FrameMaker можно создать пустой XML-документ. Вы также можете создать XML-документ на основе существующего DTD (определения типа документа) или существующего структурированного приложения. Вы также можете открывать существующие XML-документы, редактировать их и сохранять.

Создать пустой XML

Вы можете создать пустой XML-документ с нуля. Этот документ содержит только один корневой элемент ( ).

Откройте диалоговое окно "Создать XML" ( Файл > Создать > XML ).

На вкладке "Другой XML" выберите "Пустой XML" и нажмите "ОК" .

Откройте каталог элементов, чтобы просмотреть список элементов в каталоге ( Вид > Панели > Каталог элементов ).

В представлении WYSIWYG вы можете добавлять элементы или текст только к корневым элементам.

В представлении XML вы можете добавлять элементы в структуру XML. Например, вы можете добавить элемент и внутри элемента:

В представлении WYSIWYG каталог Elements теперь отображает элемент и . Теперь вы можете добавить этот элемент в документ XML. Этот документ не основан на каком-либо структурированном приложении, поэтому FrameMaker не применяет к документу никаких структурных правил. Однако FrameMaker гарантирует сохранение структуры XML.

Создать XML на основе DTD

Вы можете создать XML-документ на основе существующего DTD (определения типа документа).

Сохраните следующий фрагмент в текстовый файл.

Сохраните текстовый файл с расширением .dtd.

Откройте диалоговое окно "Создать XML" ( Файл > Создать > XML ).

На вкладке "Другой XML" выберите "XML на основе DTD" и нажмите "ОК" .

В диалоговом окне "Новый XML":

Укажите имя корневого элемента XML-документа. Это самый верхний элемент в иерархии.

Общедоступный идентификатор в XML-документе делает его переносимым на другие компьютеры.

Путь к DTD. Это может быть путь в вашей файловой системе или URL-адрес.

Примечание. Если вы просматриваете документ в формате XML, общедоступный идентификатор и системный идентификатор сохраняются в объявлении DOCTTYPE в верхней части файла.

Элементы , и , определенные в DTD, доступны в каталоге элементов.

Вставьте элемент в документ.

В диалоговом окне «Атрибуты нового элемента» вам будет предложено указать значение атрибута AUTHOR.

Создать XML на основе структурированного приложения

Структурированное приложение определяет структурные правила (с использованием EDD или DTD), форматирование содержимого (с использованием шаблонов), правила чтения/записи для документов, основанных на приложении. FrameMaker предоставляет набор готовых структурированных приложений, которые можно использовать для создания документов. Эти приложения основаны на следующих открытых стандартах:

Darwin Information Typing Architecture (DITA) предоставляет стандартное DTD и набор правил, разработанных специально для написания онлайн-документации, такой как файлы справки по программному обеспечению. Он определяет структуру элементов, подходящую для разработки, производства и доставки технической документации. Типы элементов в DITA включают, например, , , , , и .

DocBook также является открытым стандартом, предназначенным для технических статей и документации. DocBook предоставляет DTD для написания технических книг и статей со структурой, подразумеваемой такими формами. К элементам DocBook относятся , , , и .

Extensible Hypertext Markup Language (XHTML) – это расширение HTML, основанное на XML и предназначенное для работы с приложениями на основе XML. Его можно просматривать, редактировать и проверять с помощью стандартных инструментов XML.

Из соображений производительности FrameMaker не запускает связанные сценарии S1000D при запуске. Перед созданием документа на основе приложений S1000D необходимо:

S1000dUtilities и S1000Dmenu

Нажмите "ОК" и перезапустите FrameMaker.

Быстрый доступ к ресурсам S1000D/ATA был предоставлен в меню Справка > Функциональность S1000D.

  • Часто задаваемые вопросы. Найдите ответы на некоторые часто задаваемые вопросы о S1000D в разделе «Функциональность S1000D» в статье часто задаваемых вопросов о FrameMaker.
  • Руководство по пакету приложений: вы получаете быстрый доступ к руководству пользователя пакета приложений для S1000D.
  • Расширенное стороннее расширение для S1000D/ATA от Mekon: вы можете найти информацию о Mekon, партнере Adobe Techcomm, который предлагает экспертные консультации по стандартам S1000D/ATA.

Чтобы узнать больше, выберите «Справка» > «Функциональность S1000D».

Кроме того, вы можете создать собственное структурированное приложение. Затем вы можете создавать документы на основе этого приложения.

Выберите Структурированное приложение на вкладке Структурированные приложения или выберите Структурированное приложение DITA на вкладке DITA.

Элементы в каталоге элементов и атрибуты, определенные для каждого элемента, основаны на структурированном приложении, на котором основан документ.

Поскольку в структурированных документах применяются структурные правила, элементы в каталоге Elements основаны на текущем контексте.

Сохранение XML-документа

При сохранении XML-документа в следующем диалоговом окне необходимо выбрать связанное структурированное приложение.

Если вы выберете несовместимое структурированное приложение, ошибки записываются в консоль сообщений.

Когда вы открываете структурированный документ, консоль ошибок FrameMaker отображает структурные и другие проблемы в документе, если таковые имеются. Эта консоль также предоставляет следующую информацию о проблемах с документами:

Точное расположение ошибок в документе

Имя недопустимых элементов, если они есть

Открыть XML-документ

При открытии XML-документа в следующем диалоговом окне необходимо выбрать связанное структурированное приложение.

Если вы выберете несовместимое структурированное приложение, ошибки записываются в консоль ошибок. Кроме того, если иерархия документа XML не соответствует структурным правилам, определенным в приложении, документ отображается с ошибками в представлении структуры.

Файл тестового аргумента — это файл JSON, описывающий план тестирования или задание. Вы передаете его через аргумент --test-arg-file. Требуется:

  • выполнить тестовое обнаружение
  • запланировать тесты в общей очереди

Вы можете создать образец тестового файла arg и изменить его в соответствии с вашими потребностями:

Схема JSON определяется файлом TestArgFile.swift.

  • jobId: String — уникальный идентификатор задания. Вы можете безопасно использовать некоторый UUID для этого поля. Повторное использование одного и того же идентификатора задания приведет к накоплению результатов проверки всех вызовов с одним и тем же идентификатором задания.
  • jobPriority: Int - приоритет задания, целое число в диапазоне от 0 до 999 . Задания (тесты) с более высоким приоритетом выполняются раньше заданий с более низким приоритетом. Это поле является необязательным.
  • jobGroupId: String — уникальный идентификатор группы заданий. Это поле является необязательным. Вы можете логически сгруппировать набор jobId -s, назначив им один и тот же jobGroupId. Группировка заданий позволяет лучше контролировать приоритет процесса выполнения заданий.
  • jobGroupPriority: Int — приоритет для этой группы заданий. Тесты, которые являются частью группы заданий с более высоким приоритетом группы заданий, будут выполняться перед тестами, которые являются частью группы заданий с более низким приоритетом группы заданий. jobPriority управляет порядком выполнения тестов в группе заданий, а jobGroupPriority управляет порядком выполнения тестов во всей очереди.
  • testDestinationConfigurations: Массив — это массив объектов, описывающих выходные данные для каждого места назначения теста. Подробности ниже.
  • analyticsConfiguration: Object — определяет конфигурацию аналитики для этого задания. Подробнее о настройке читайте здесь.
  • entries: Массив — список записей, каждая запись описывает набор тестов, которые необходимо выполнить. Обычно у вас будет 1 или 2 записи: например. один для тестов пользовательского интерфейса, а другой для модульных тестов.

записи

Каждая запись описывает набор тестов и тесты, которые вы хотите выполнить. Поля описаны ниже.

Артефакты сборки

Это объект, описывающий артефакты сборки. Его содержание зависит от типа тестов, которые вы хотите выполнить, вы можете прочитать больше здесь.

appBundle : расположение ZIP-файла с пакетом приложений ( .app ). Это необязательный поле, оно вам не нужно, если вы хотите выполнить логические тесты

runner : расположение ZIP-файла с приложением XCTRunner (например, TargetName-Runner.app ). Это необязательный поле, оно требуется только в том случае, если вы хотите запустить тесты пользовательского интерфейса.

xcTestBundle : пакет тестов и режим обнаружения тестов для него. Это обязательное поле для всех типов тестов. Этот объект описывается XcTestBundle:

  • additionalApplicationBundles : это массив всех возможных приложений, которые могут использоваться в ваших тестах, например. они могут запускать эти приложения. Это обязательное поле для всех типов тестов, и если ваши тесты не связаны с другими приложениями, просто передайте сюда пустой массив ( [] ).В противном случае, если в вашем проекте Xcode есть несколько сборных приложений, и если ваши тесты требуют их запуска во время выполнения теста, вы должны передать здесь местоположения в ZIP-архив для каждого требуемого приложения. Это поле похоже на appBundle , оно как бы расширяет его для поддержки запуска нескольких приложений во время тестового запуска.

Ниже приведен полный JSON для артефактов сборки, которые можно использовать для запуска тестов пользовательского интерфейса:

окружающая среда

Определяет переменные тестовой среды. Emcee не читает настройки проекта или схемы Xcode, поэтому вам придется заполнить это поле по мере необходимости.

Это сопоставление строковых ключей со строковыми значениями.

количество попыток

Сколько неудачных тестов следует повторить. Позволяет бороться с шелушениями. Если вы укажете здесь 0 (ноль), Emcee запустит тест только один раз, то есть выполнит одну попытку запустить тест.

Стратегия расписания

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

Настройки симулятора

Объект описывает, какие настройки следует применять к симуляторам при выполнении на них тестов. Подробнее об этой функции читайте здесь.

Пункт назначения

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

testTimeoutConfiguration

singleTestMaximumDuration — максимальная продолжительность теста в секундах. Это обязательное поле.

testRunnerMaximumSilenceDuration — максимальная продолжительность молчания процесса запуска ( xcodebuild ) в секундах. Для более коротких тестов (например, 5 минут) вы можете установить его равным singleTestMaximumDuration , но если у вас есть длительные тесты, вы можете установить более короткое значение. Таким образом, если процесс запуска ничего не выводит на стандартный вывод/stderr, Emcee не пройдет тесты из-за остановки запуска.

тип теста

  • logicTest — эти тесты выполняются в среде процесса xctest, они не требуют запуска приложения
  • appTest — эти тесты выполняются в среде вашего приложения, то есть само приложение становится приложением для размещения тестов. Это подходит для тестов серого/белого ящика.
  • uiTests — эти тесты выполняются в рамках процесса XCTRunner.app и используют IPC для связи с основным приложением. Это подходит для тестов пользовательского интерфейса XC. Тестирование черного ящика.

тесты для запуска

Этот массив определяет список предикатов, которые будут определять список тестов для запуска. Вы можете передавать следующие значения:

— это запустит все тесты в комплекте xctest. Обычно вы захотите использовать этот тип предиката. Вы просто передаете массив с этим единственным объектом в нем.

— будет запущен один тест TestClassName/testMethod. Вы можете передать несколько объектов такого типа и сообщить ведущему конкретный список тестов для выполнения.

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

Инструмент управления симулятором

Примечание: fbsimctl больше не поддерживается.

Ведущий поддерживает следующие настройки местоположения симулятора:

: указывает Emcee создавать симуляторы в расположении по умолчанию ( ~/Library/Developer/CoreSimulator/Devices). Это предпочтительное место.

: указывает Emcee создавать симуляторы в своей временной папке (этот режим несовместим с инструментом запуска тестов xcodebuild)

тестраннертул

Описывает инструмент, который позволяет Emcee запускать тесты на загруженном симуляторе. Примеры значений:

Примечание: fbxctest больше не поддерживается.

Время ожидания операции симулятора

Указывает тайм-ауты работы симулятора и управляет функцией автоматического отключения симулятора. Пример значения:

Эти тайм-ауты будут применяться к соответствующим вызовам xcrun simctl .

Каталог разработчика

Определяет, какую среду Xcode следует использовать при выполнении тестов. Определение правильной среды Xcode важно для стабилизации тестов. Ведущий будет использовать этот параметр для поиска Xcode. Затем он добавит среду DEVELOPER_DIR ко всем вызовам xcrun , xcodebuild и т. д.

: это значение заставляет Emcee использовать текущую версию Xcode, определенную xcode-select -p . Это нормально, если на ваших рабочих процессах установлен только один Xcode, но всегда предпочтительнее явно указывать версию Xcode.

: это значение заставляет Emcee искать Xcode 11.5 (в /Applications ) и не запускать тест, если такой Xcode не существует.

Конфигурации testDestination

Этот параметр определяет определенные выходные данные для каждого тестового назначения.

Вы можете указать testDestinationConfigurations: [], если вы не хотите, чтобы генерировались определенные выходные данные. В противном случае укажите пару целевых объектов теста и выходных объектов отчета. Ведущий перебирает результаты теста и создает отдельный Junit для каждого места назначения теста.

Пример ниже говорит Emcee создать 2 отдельных отчета Junit: один для тестов, выполненных на симуляторе iPhone [email protected], и другой для тестов, выполненных на iPhone [email protected]:

расположение плагинов

Это массив URL-адресов ZIP-архивов с пакетами .emceeplugin. Ведущий запустит плагины для этого набора тестов. Плагины будут работать на рабочих. Вы можете узнать больше о плагинах.

Если у вас нет подключаемых модулей, просто передайте пустой массив ( [] ).

Добро пожаловать в проект Emcee, идеальное решение для параллельного запуска тестов iOS локально и на многих компьютерах Mac.

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

Расширенные планы тестирования с использованием простого формата файлов JSON

Автоматическое управление жизненным циклом симулятора

Время ожидания для каждого теста, настройки симулятора, переменные среды

Одна тестовая очередь для запуска тестов из нескольких параллельных запросов на вытягивание

Приоритетные задания и группы заданий для разных типов тестов

Балансировка нагрузки рабочих машин для достижения оптимальной производительности параллелизма

Техническое обслуживание рабочих на ходу

Интеграция в существующие системы управления тестированием с помощью плагинов

Простой в использовании интерфейс командной строки

Расширенный механизм обнаружения тестов

Пакет Swift для использования и расширения возможностей Emcee

В этом руководстве показано, как использовать Emcee. Мы будем использовать две машины MacOS для запуска модульных тестов и тестов пользовательского интерфейса из примера проекта. Вы также можете использовать одну машину, чтобы попробовать Emcee, чтобы увидеть, работает ли он для вашего проекта. В этом случае одна машина будет выступать в роли очереди и исполнителя одновременно. Кроме того, вы можете масштабировать это руководство на любое количество имеющихся у вас компьютеров.

Оглавление

Настройка компьютеров

Вам потребуется предоставить SSH-доступ к вашим компьютерам.

Разверните, чтобы узнать, как настроить компьютеры.

Мы будем использовать две машины: ios-build-machine77 и ios-build-machine78.

  • ios-build-machine77 будет исполнителем и очередью — он предоставит исполнителям тесты для выполнения и выполнения некоторых из этих тестов.
  • ios-build-machine78 будет рабочей машиной — она будет выполнять только тесты.

На обеих машинах установлен стандартный пользователь emcee без прав администратора и пароль qwerty.

Установите Xcode и sudo xcode-select --switch /Applications/Xcode.app на всех своих компьютерах.

Мы будем использовать Xcode 13.0 (13A233) и среду выполнения симулятора iOS 15.0, связанную с этим Xcode. Если вы хотите использовать определенную версию среды выполнения симулятора, перейдите в Xcode -> Preferences. -> Компоненты -> Симуляторы и установите среду выполнения на все рабочие машины, где вы хотите, чтобы тесты выполнялись с определенной версией среды выполнения.

Emcee использует ssh для развертывания на машинах, указанных как queue и worker . Включите SSH в Системных настройках -> Общий доступ -> Удаленный вход. Чтобы открыть эту панель, выполните:

Теперь убедитесь, что машины доступны по ssh. Например:

Если ваши машины недоступны по DNS, используйте вместо этого их IP-адреса. Вы можете проверить IP-адрес в Системных настройках -> Общий доступ. Обратите внимание, что IP-адреса могут меняться со временем. Чтобы открыть эту панель, выполните:

Создание примера проекта

На этом этапе мы создадим пример проекта с различными типами тестов. Xcode и xcodebuild будут создавать артефакты сборки в производных данных.

Разверните, чтобы узнать, как создать пример проекта для целей тестирования.

Вы можете выполнить этот шаг на любой машине. Клонируйте образец проекта:

Чтобы построить проект, создайте симулятор:

Теперь запустите xcodebuild:

Xcodebuild поместит продукты сборки в:

Выполнение тестов с помощью Emcee

Теперь, когда машины готовы и проект построен, загрузите Emcee на ту же машину, на которой вы построили проект, выполнив:

Если вы загружаете Emcee с помощью браузера, вам потребуется очистить атрибуты и установить исполняемый бит:

Установив Emcee, пришло время запустить тесты. Пример проекта включает 3 типа тестов:

  • Тесты, не требующие хост-приложения
  • Тесты, для которых требуется хост-приложение
  • Тесты XCUI

Тесты без хост-приложения

Давайте сначала запустим тесты, не требующие хост-приложения. Мы будем использовать команду runTests:

Вот что означают эти параметры:

  • --queue — URL-адрес машины, которая будет обслуживать воркеров с тестами.
  • --worker – это URL-адрес машины, которая будет выполнять тесты, которые она запрашивает из очереди.
  • --device и --runtime — параметры, указывающие, какие симуляторы будут запускать тесты.
  • --test-bundle — путь к пакету xctest
  • --junit — путь к XML-файлу JUnit, который будет содержать результат выполнения теста.

Подробнее обо всех параметрах, принимаемых runTests, и о том, как их указать, можно узнать с помощью Emcee runTests -h .

После завершения теста ведущий создаст файл test_without_host_junit.xml. Отчет JUnit содержит четыре записи теста, соответствующие четырем методам тестирования из тестового пакета EmceeSampleTestsWithoutHost.xctest.

Чтобы узнать о более сложном механизме отчетов о тестировании, таком как Allure, ознакомьтесь с документацией по подключаемым модулям.

Тесты с хост-приложением

Теперь попробуем запустить тесты, для которых требуется хост-приложение. Путь хост-приложения указывается с помощью параметра --app. Например:

Чтобы получить визуальное подтверждение того, что Emcee запускает тесты, вы можете открыть приложение Simulator на рабочих машинах:

Тесты XCUI

Наконец, мы запустим тесты XCUI, добавив параметр --runner и изменив параметр --test-bundle на пакет тестов XCUI:

Вот как будет выглядеть тестовый запуск:

Расширенная конфигурация ведущего

Полная документация доступна на нашей Wiki.

Команда runTests позволяет быстро запустить Emcee; однако он не допускает большой конфигурации. С другой стороны, команда runTestsOnRemoteQueue позволяет детально контролировать выполнение ваших тестов. Чтобы начать работу с runTestsOnRemoteQueue, посетите вики-страницы Queue Server Configuration и Test Arg File.

Ведущий использует диспетчер пакетов Swift для создания, тестирования и предоставления пакетов Swift.

Чтобы начать изучение кода, откройте Package.swift в Xcode 13 или выполните команду make open, чтобы сгенерировать и открыть проект Xcode.

Мы рады принять ваши запросы на вытягивание. Если что-то не работает для вас, сообщите нам об этом, отправив сообщение. Читайте документы и также предлагайте улучшения!

Общие команды, которые помогут вам в рабочем процессе разработки:

  • Чтобы открыть пакет в Xcode: сделайте open
  • Чтобы сгенерировать Package.swift: создайте пакет
  • Чтобы встроить двоичный файл в .build/debug/Emcee: make build
  • Для запуска модульных тестов: make test

Файл Package.swift создается автоматически. Вы должны обновить его перед отправкой запроса на извлечение (запустите make package). Если вы забудете это сделать, проверки CI не пройдут.

libssh2

варить установить libssh2

GitHub

Что-то сломалось? Кричи на меня @ptrpavlik. Похвалы и отзывы (и деньги) также приветствуются.

Зависимости

Примечания к выпуску

Мы провели ряд интервью с командами, использующими Emcee. Мы получили хорошие отзывы, которые мы использовали для улучшения нашего продукта. В этом выпуске мы уделяем особое внимание простоте использования и удобству с первого раза.

Он доступен прямо в README.

Мы представляем новую команду — runTests. Очень похож на известный runTestsOnRemoteQueue, но он посвящен открытию мира простоты и ясности настройки для большинства пользователей Emcee. Он имеет следующий синтаксис и параметры:

$ Emcee runTests -h

  • --queue : описывает, где должна быть запущена очередь. Этот аргумент может повторяться несколько раз, и в этом случае ведущий будет использовать хосты один за другим, пока ему не удастся запустить очередь. Здесь необходимо указать хотя бы одно значение.
  • --worker : описывает, где должен быть запущен рабочий. Этот аргумент может повторяться несколько раз. Необходимо указать хотя бы одно значение.
  • --device : Устройство для запуска теста, например. Айфон Х. Необходимый. Примечание. Некоторые поколения iPhone SE могут быть сложны в использовании!
  • --runtime : время выполнения для запуска теста, например. 15.0 . Обязательно.
  • --test-bundle : расположение пакета .xctest, в котором будут выполняться тесты. Обязательно.
  • --app : расположение пакета .app. Необязательный. Пожалуйста, обратитесь к нашему руководству, чтобы узнать больше о тестах с хост-приложением.
  • --runner : расположение XX-Runner.app . Необязательно.
  • --test : Тест для выполнения, например. ИмяКласса/Методтеста. Необязательный. Если не указано, ведущий будет запускать все тесты. Вы можете указать несколько тестов для выполнения, например. --test Класс/тест1 --test Класс/тест2
  • --retries : количество попыток успешного выполнения каждого теста. Необязательный. По умолчанию он будет повторять тесты один раз, если произойдет сбой.
  • --test-timeout : максимальная продолжительность выполнения теста. Необязательный. Ограничение продолжительности теста по умолчанию — 180 секунд.
  • --junit : Путь, по которому должен быть создан файл отчета Junit. Необязательно.
  • --trace : путь, по которому должен быть создан файл трассировки Chrome. Необязательно.

Давайте объясним аргументы --queue и --worker. Это URL-адреса, которые описывают, как подключиться к машине. В настоящее время поддерживается только SSH. Некоторые примеры:

Вы также можете указать локальные пути в файле тестового аргумента, который вы передаете в runTestsOnRemoteQueue , они также будут размещены на встроенном сервере. Удобно!

Помогите мне, доктор -h 🍡

Теперь вы можете получить справку по любой команде, набрав -h рядом с ней, например Ведущий -h или Ведущий runTests -h . Похоже, ведущий готов к такому хай-теку.

Лучшие ошибки 💢

Если вы предоставите неправильный файл тестового аргумента или JSON-файл конфигурации очереди, Emcee теперь будет печатать удобочитаемые ошибки. Вы будете поражены. Вот одна ошибка на ваше рассмотрение:

Это кристально ясное объяснение того, что пошло не так, не так ли?

Необязательный идентификатор задания ☃️

Некоторым нашим пользователям было непонятно, что поле jobId в тестовом файле arg должно быть уникальным. Теперь вы можете его не указывать, ведущий сгенерирует для вас случайный идентификатор задания.

Режим повторной проверки 👯‍♀️

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

retryThroughQueue — если тест не пройден на рабочем потоке, он будет возвращен обратно в очередь. Затем очередь повторит этот тест на других рабочих процессах до указанного количества попыток. Это поведение по умолчанию. Это позволяет выполнять тест на разных хостах, потенциально устраняя проблему неработающей среды (поскольку каждая установка macOS в Universe уникальна).

retryOnWorker — если тест не пройден, тот же рабочий процесс выполнит повторную попытку.

Исправление симулятора лучше 📲

Была ошибка (Боже мой), которая привела к избыточному исправлению симулятора (читай: применить настройки симулятора). Теперь Emcee не будет исправлять симуляторы, если все исправлено.

Теперь возможны рабочие процессы без кэширования 💳

Есть способ отключить рабочий кеш. В конфигурации сервера очередей, в настройках воркера, рядом с полем numberOfSimulators есть еще два поля:

  • maximumCacheSize — максимальный размер кэша в байтах.
  • maximumCacheTTL – максимальный срок жизни любого кэшированного элемента в секундах.

Вы можете установить 0 для этих полей, и кэш будет полностью отключен. Это удобно, если вы хотите что-то отладить.

Запретить ведущему очищать вывод Runner 🏃

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

  • clean — значение по умолчанию, означает, что все будет удалено
  • сохранить — все созданные файлы будут сохранены.

Режим записи журнала 📝

Теперь вы можете контролировать, какие журналы должны сохраняться во время тестового запуска. Эти журналы получаются из пакетов xcresult после завершения тестов. В записях тестового файла arg появилось новое поле logCapturingMode. Возможные значения:

  • allLogs — будут записаны все сообщения журнала.
  • onlyCrashLogs — будут записываться только те журналы, которые выглядят как журналы сбоев.
  • noLogs — никакие журналы не будут записываться

Куда же без dyld

Теперь в тест можно вставлять динамические библиотеки. В записях тестового файла arg есть новое поле userInsertedLibraries . Это массив путей. Эти пути будут переданы в тест как окружение DYLD_INSERT_LIBRARIES. Объедините это с современными функциями визуализации macOS, с тем фактом, что тесты выполняются через xcodebuild (чтобы он мог расширять __TESTBUNDLE__ и другие строки — посмотрите man xcodebuild.xctestrun ), и это обеспечит вам дополнительную гибкость для вашего теста. процесс выполнения.

Я из Luxoft.
В этой статье речь пойдет о проекте nginx-log-collector, который будет читать логи nginx и отправлять их в кластер Clickhouse. Обычно для логов используют ElasticSearch. Clickhouse требует меньше ресурсов (дисковое пространство, оперативная память, процессор). Clickhouse записывает данные быстрее. Clickhouse сжимает данные, делая данные на диске еще более компактными. Преимущества Clickhouse видны на 2 слайдах из отчета. Как ВК вставляет данные в десятки тысяч серверов в ClickHouse.

Чтобы просматривать аналитику по журналам, создайте панель инструментов для Grafana.

Кому интересно, добро пожаловать под кат.

Установите nginx, grafana стандартным способом.

Установите кластер clickhouse с помощью ansible-playbook от Дениса Проскурина.

Создание баз данных и таблиц в Clickhouse

В этом файле описываются SQL-запросы для создания баз данных и таблиц для nginx-log-collector в Clickhouse.

Каждый запрос выполняется по очереди на каждом сервере кластера Clickhouse.

Важное замечание.В этой строке logs_cluster следует заменить на имя вашего кластера из файла clickhouse_remote_servers.xml между «remote_servers» и «shard».

Скачайте table_schema.sql, убедитесь, что в конце каждого запроса стоит точка с запятой (;)
Выполнить.

Установка и настройка nginx-log-collector-rpm

Установите пакет rpm nginx-log-collector-rpm

Редактировать конфиг /etc/nginx-log-collector/config.yaml:

Настройка Rsyslog

rsyslog из CentOS 6 не работал. Поэтому вам нужна CentOS 7 или другая современная ОС.
Обычно rsyslog уже установлен.
Необходимо добавить файл 01-nginx-tcp.conf
и исправить

на ваш сервер с помощью nginx-log-collector
После этого вам нужно перезапустить rsyslog

Настройка Nginx

но при использовании nginx версии 1.12.0-1.el6.ngx выдается ошибка:

Общая конфигурация nginx:

Виртуальный хост один:

Добавить виртуальные хосты в файл /etc/hosts:

Установите пакет nodejs-stub-server на вышестоящий nginx rpm

Стресс-тестирование

Тестирование выполнено с использованием эталонного теста Apache.

Мы начинаем тестирование с использованием эталонного теста Apache с 5 разных серверов:

Настройка Grafana

Установите vertamedia-clickhouse-datasource в Grafana

При создании источника данных для clickhouse назовите источник данных: "clickhouse-nginx-log-collector"

На официальном сайте Grafana вы не найдете панель инструментов.

Поэтому мы сдадим его.

Вы можете найти мою сохраненную панель инструментов здесь.

Также необходимо создать табличную переменную с содержимым nginx.access_log .

Всего запросов Singlestat:

Ошибочные запросы Singlestat:

Процент неверных результатов одиночной статистики:

Среднее время ответа Singlestat:

Максимальное время ответа Singlestat:

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

Статус круга ТОП 5:

Далее буду давать запросы без скриншотов:

Время отклика восходящего потока (время отклика 1-го восходящего потока):

Статус подсчета таблиц для всех виртуальных хостов:

Общий вид панели управления

Сравнение среднего () и квантиля ()

среднее ()
квантиль ()

Вывод:

Мы надеемся, что сообщество примет участие в разработке/тестировании и использовании nginx-log-collector.
А кто-то, когда внедрит nginx-log-collector, расскажет, сколько он сэкономил на диске, оперативке, процессоре.

Миллисекунды:

Кому важны миллисекунды, напишите или проголосуйте, пожалуйста, в этом выпуске.

Добро пожаловать в проект Emcee, идеальное решение для параллельного запуска тестов iOS локально и на многих компьютерах Mac.

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

Расширенные планы тестирования с использованием простого формата файлов JSON

Автоматическое управление жизненным циклом симулятора

Время ожидания для каждого теста, настройки симулятора, переменные среды

Одна тестовая очередь для запуска тестов из нескольких параллельных запросов на вытягивание

Приоритетные задания и группы заданий для разных типов тестов

Балансировка нагрузки рабочих машин для достижения оптимальной производительности параллелизма

Техническое обслуживание рабочих на ходу

Интеграция в существующие системы управления тестированием с помощью плагинов

Простой в использовании интерфейс командной строки

Расширенный механизм обнаружения тестов

Пакет Swift для использования и расширения возможностей Emcee

В этом руководстве показано, как использовать Emcee. Мы будем использовать две машины MacOS для запуска модульных тестов и тестов пользовательского интерфейса из примера проекта. Вы также можете использовать одну машину, чтобы попробовать Emcee, чтобы увидеть, работает ли он для вашего проекта. В этом случае одна машина будет выступать в роли очереди и исполнителя одновременно. Кроме того, вы можете масштабировать это руководство на любое количество имеющихся у вас компьютеров.

Оглавление

Настройка машин

Вам потребуется предоставить SSH-доступ к вашим компьютерам.

Разверните, чтобы узнать, как настроить компьютеры.

Мы будем использовать две машины: ios-build-machine77 и ios-build-machine78.

  • ios-build-machine77 будет исполнителем и очередью — он предоставит исполнителям тесты для выполнения и выполнения некоторых из этих тестов.
  • ios-build-machine78 будет рабочей машиной — она будет выполнять только тесты.

На обеих машинах установлен стандартный пользователь emcee без прав администратора и пароль qwerty.

Установите Xcode и sudo xcode-select --switch /Applications/Xcode.app на всех своих компьютерах.

Мы будем использовать Xcode 13.0 (13A233) и среду выполнения симулятора iOS 15.0, связанную с этим Xcode. Если вы хотите использовать определенную версию среды выполнения симулятора, перейдите в Xcode -> Preferences. -> Компоненты -> Симуляторы и установите среду выполнения на все рабочие машины, где вы хотите, чтобы тесты выполнялись с определенной версией среды выполнения.

Emcee использует ssh для развертывания на машинах, указанных как queue и worker . Включите SSH в Системных настройках -> Общий доступ -> Удаленный вход. Чтобы открыть эту панель, выполните:

Теперь убедитесь, что машины доступны по ssh. Например:

Если ваши машины недоступны по DNS, используйте вместо этого их IP-адреса. Вы можете проверить IP-адрес в Системных настройках -> Общий доступ. Обратите внимание, что IP-адреса могут меняться со временем. Чтобы открыть эту панель, выполните:

Создание примера проекта

На этом этапе мы создадим пример проекта с различными типами тестов. Xcode и xcodebuild будут создавать артефакты сборки в производных данных.

Разверните, чтобы узнать, как создать пример проекта для целей тестирования.

Вы можете выполнить этот шаг на любой машине. Клонируйте образец проекта:

Чтобы построить проект, создайте симулятор:

Теперь запустите xcodebuild:

Xcodebuild поместит продукты сборки в:

Выполнение тестов с помощью Emcee

Теперь, когда машины готовы и проект построен, загрузите Emcee на ту же машину, на которой вы построили проект, выполнив:

Если вы загружаете Emcee с помощью браузера, вам потребуется очистить атрибуты и установить исполняемый бит:

Установив Emcee, пришло время запустить тесты. Пример проекта включает 3 типа тестов:

  • Тесты, не требующие хост-приложения
  • Тесты, для которых требуется хост-приложение
  • Тесты XCUI

Тесты без хост-приложения

Давайте сначала запустим тесты, не требующие хост-приложения. Мы будем использовать команду runTests:

Вот что означают эти параметры:

  • --queue — URL-адрес машины, которая будет обслуживать воркеров с тестами.
  • --worker – это URL-адрес машины, которая будет выполнять тесты, которые она запрашивает из очереди.
  • --device и --runtime — параметры, указывающие, какие симуляторы будут запускать тесты.
  • --test-bundle — путь к пакету xctest
  • --junit — путь к XML-файлу JUnit, который будет содержать результат выполнения теста.

Подробнее обо всех параметрах, принимаемых runTests, и о том, как их указать, можно узнать с помощью Emcee runTests -h .

После завершения теста ведущий создаст файл test_without_host_junit.xml. Отчет JUnit содержит четыре записи теста, соответствующие четырем методам тестирования из тестового пакета EmceeSampleTestsWithoutHost.xctest.

Чтобы узнать о более сложном механизме отчетов о тестировании, таком как Allure, ознакомьтесь с документацией по подключаемым модулям.

Тесты с хост-приложением

Теперь попробуем запустить тесты, для которых требуется хост-приложение. Путь хост-приложения указывается с помощью параметра --app. Например:

Чтобы получить визуальное подтверждение того, что Emcee запускает тесты, вы можете открыть приложение Simulator на рабочих машинах:

Наконец, мы запустим тесты XCUI, добавив параметр --runner и изменив параметр --test-bundle на пакет тестов XCUI:

Вот как будет выглядеть тестовый запуск:

Расширенная конфигурация ведущего

Полная документация доступна на нашей Wiki.

Команда runTests позволяет быстро запустить Emcee; однако он не допускает большой конфигурации. С другой стороны, команда runTestsOnRemoteQueue позволяет детально контролировать выполнение ваших тестов. Чтобы начать работу с runTestsOnRemoteQueue, посетите вики-страницы Queue Server Configuration и Test Arg File.

Обход кода

Ведущий использует диспетчер пакетов Swift для создания, тестирования и предоставления пакетов Swift.

Чтобы начать изучение кода, откройте Package.swift в Xcode 13 или выполните команду make open, чтобы сгенерировать и открыть проект Xcode.

Мы рады принять ваши запросы на вытягивание. Если что-то не работает для вас, сообщите нам об этом, отправив сообщение. Читайте документы и также предлагайте улучшения!

Общие команды, которые помогут вам в рабочем процессе разработки:

  • Чтобы открыть пакет в Xcode: сделайте open
  • Чтобы сгенерировать Package.swift: создайте пакет
  • Чтобы встроить двоичный файл в .build/debug/Emcee: make build
  • Для запуска модульных тестов: make test

Файл Package.swift создается автоматически. Вы должны обновить его перед отправкой запроса на извлечение (запустите make package). Если вы забудете это сделать, проверки CI не пройдут.

Читайте также: