Контейнеры второго этапа
Эти контейнеры запускаются динамически на основе входных данных конфигурации Build User (Job), передаваемых в CLI purpleteam, а именно количества определённых вами testSession.
Следующие конфигурации актуальны, если вы собираетесь запускать серверную часть purpleteam в среде local. В среде cloud всё делается за вас.
Клонируйте этот репозиторий.
Мы используем файл .env непосредственно в каталоге app-slave для тестирования.
ZAP_API_KEY
Убедитесь, что вы присвоили значение переменной окружения ZAP_API_KEY.
ZAP_API_KEY может быть любым, просто убедитесь, что, помимо определения его для app-slave, вы также добавили его в конфигурацию проекта app-scanner. Проекту app-scanner требуется настроенный ZAP API Key для аутентификации в Zap, работающем в контейнере второго этапа. Для проекта app-scanner это необходимо указать в следующем:
{ "slave": { "apiKey": <zap-api-key-here> } }
HOST_ZAP_LOG4J_PROPERTIES_PATH и ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET
Если вам потребуются отладочные логи Zap, вам также нужно будет добавить переменные окружения для конфигурации отладки LOG4J.
Файл .env
Если вы решите использовать файл .env, добавление всех этих переменных окружения будет выглядеть примерно так:
ZAP_API_KEY=<zap-api-key-here>
HOST_ZAP_LOG4J_PROPERTIES_PATH=<absolute-path-to/purpleteam-s2-containers/app-slave/log4j.properties>
ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET=/home/zap/.ZAP/log4j.properties
При условии, что вы задали переменные окружения, обсуждавшиеся выше:
Чтобы включить отладку логирования для контейнеров app-slave (Zap), работающих в среде local, раскомментируйте массив volumes и элемент, содержащий ключ source с переменной окружения HOST_ZAP_LOG4J_PROPERTIES_PATH.
Подробнее ниже о фактическом просмотре логов.
Вы можете взаимодействовать с Zap (запрашивать UI Zap) во время выполнения тестов. Раньше это было полезно для проверки состояния Zap при отладке app-scanner.
docker stats
docker container ls
8080 до 8091 включительно, как определено в docker-compose.yml.
zap:8080/*
http://zap:8080/zap в контейнере, указанном портом хоста в вашей конфигурации FoxyProxyЧтобы включить отладку логирования для контейнеров Selenium, работающих в среде local, раскомментируйте массив environment и элемент SE_OPTS=-debug для chrome и/или firefox.
Подробнее ниже о фактическом просмотре логов.
Ниже описано, что необходимо сделать, чтобы просмотреть браузер внутри любого из контейнеров Selenium, запущенных из этого проекта.
-debug. Образы с -debug могут быть закомментированы, поэтому достаточно закомментировать обычный образ и раскомментировать образ с добавлением -debug в конце5900. Задав диапазон в качестве внешнего порта (например: 5900-5901), вы сможете одновременно подключаться по VNC к нескольким контейнерам. В примере мы разрешили одновременное открытие двух сессий. Если вам нужно подключиться более чем к двум, просто расширьте диапазон внешних портовВам понадобится VNC-клиент для подключения к VNC-серверу внутри контейнера. У нас успешно работал Remmina Remote Desktop Client на Linux Mint. Установите Remmina-plugin-vnc через Менеджер программ
Запустите ваш Remmina Remote Desktop Client
Создайте новые записи. Если вы планируете одновременно подключаться по VNC к нескольким контейнерам Selenium, можно настроить каждую из них, как показано ниже:
| Ключ | Значение |
|---|---|
| Имя | seleniumstandalone_chrome_1 |
| Протокол | VNC - Virtual Network Computing |
| На вкладке Basic | |
| Сервер | 127.0.0.1:5900 |
| Пароль | secret |
| Глубина цвета | True color (24 bit) # Это единственное, что сработало для нас |
| Качество | Poor (fastest) |
Дополнительные сведения на GitHub SeleniumHQ
После запуска контейнеров Selenium (удобно держать docker stats запущенным в терминале для просмотра этого) вы можете подтвердить, какой контейнер Selenium использует какой внешний порт, с помощью docker container ls, так как Docker не знает, какие порты вы назначили какой записи VNC-клиента, поэтому имя данной записи VNC-клиента может не совпадать с именем контейнера Selenium. По этой причине рекомендуется проверять привязку портов с помощью docker container ls.
Чтобы сопоставить, какой контейнер Selenium используется для какого тестового сеанса, когда у вас несколько тестовых сеансов, вам может потребоваться просмотреть выполняемый лог app-scanner. Возможно, вам также потребуется убедиться, что app-scanner настроен на уровень логирования debug, чтобы увидеть некоторые или все следующие сообщения лога:
[app.parallel] cucCli process with PID "28" has been spawned for test session with Id "lowPrivUser"
[app.parallel] cucCli process with PID "34" has been spawned for test session with Id "adminUser"
[pid-28,world] seleniumContainerName is: seleniumstandalone_chrome_1
[pid-34,world] seleniumContainerName is: seleniumstandalone_chrome_2
В этом примере у нас настроено два тестовых сеанса в конфигурации Build User (Job). Один имеет id lowPrivUser, а другой — id adminUser. В этом примере тестовый сеанс lowPrivUser имеет процесс с PID 28, а тестовый сеанс adminUser — процесс с PID 34.
В следующих двух сообщениях лога после этого мы видим, сопоставляя PID, что тестовый сеанс lowPrivUser выполняется в контейнере с именем seleniumstandalone_chrome_1, а тестовый сеанс adminUser — в контейнере с именем seleniumstandalone_chrome_2.
Нет гарантий, какой тестовый сеанс будет выполняться в каком из контейнеров seleniumstandalone_chrome_[n], поэтому, если вам нужно быть уверенным, используйте эту технику сопоставления.
Чтобы подключиться по VNC к контейнерам Selenium, когда Remmina запущен, просто дважды щелкните одну или несколько созданных вами записей VNC, и вы сможете увидеть браузер, с которым происходит взаимодействие... при условии, что шаги тестов Cucumber в app-scanner фактически дошли до этого момента.
Вы, конечно, можете замедлить тесты, приостановить их, пройти по шагам с помощью отладчика. Подробности — в вики purpleteam на странице workflow
locally вы можете держать docker stats запущенным, чтобы видеть, какие контейнеры работают, когда они запускаются и останавливаются. Это также даст вам их имена для следующих команд.
Чтобы просмотреть логи контейнера второго этапа, следите за stdout (и stderr, так как Docker объединяет stdout и stderr) контейнера:
docker logs --follow [container-name]
Если вы также хотите отправить эти логи в файл:
docker logs --follow [container-name] |tee output.log$(date '+%Y-%m-%d_%T')
Если вы хотите отправить эти логи в файл без просмотра через терминал:
docker logs --follow [container-name] > output.log$(date '+%Y-%m-%d_%T')
| Ключ | Значение |
|---|
| Имя | seleniumstandalone_chrome_2 |
| Протокол | VNC - Virtual Network Computing |
| На вкладке Basic | |
| Сервер | 127.0.0.1:5901 |
| Пароль | secret |
| Глубина цвета | True color (24 bit) # Это единственное, что сработало для нас |
| Качество | Poor (fastest) |