
Stage two containers
这些容器是根据构建用户配置(任务)输入(即您定义的 testSession 数量)动态启动的。
如果您打算在 local 环境中运行 purpleteam 后端,以下配置是相关的。在 cloud 环境中,这些操作会自动完成。
克隆此仓库。
我们在 app-slave 目录中直接使用 .env 文件进行测试。
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) 容器的调试日志,请取消注释 volumes 数组和包含 source 键(值为环境变量 HOST_ZAP_LOG4J_PROPERTIES_PATH)的元素。
有关实际查看日志的详细信息,请参见下文。
您可以在测试运行时与 Zap 交互(查询 Zap UI)。我们过去发现这对于在调试 app-scanner 时检查 Zap 状态很有用。
docker stats
docker container ls
8080-8091(包含两端),如 docker-compose.yml 中所定义。
zap:8080/*
http://zap:8080/zap 进程响应。为了启用本地环境中运行的 Selenium 容器的调试日志,请取消注释 environment 数组以及 chrome 和/或 firefox 的 SE_OPTS=-debug 元素。
有关实际查看日志的详细信息,请参见下文。
以下内容概述了如何查看此项目中运行的任意 Selenium 容器内的浏览器。
-debug 镜像。-debug 镜像可能已被注释,因此只需注释掉常规镜像,取消注释末尾附加了 -debug 的镜像即可5900 端口范围,确保您可以访问容器内的 VNC 服务器。将外部端口指定为范围(例如:5900-5901),您可以同时 VNC 到多个容器。在示例中,我们允许同时打开两个会话。如果需要 VNC 到两个以上的容器,只需扩大外部端口范围您需要一个 VNC 客户端来打开与容器内 VNC 服务器的连接。我们在 Linux Mint 上使用 Remmina 远程桌面客户端取得了成功。通过软件管理器安装 Remmina-plugin-vnc
运行您的 Remmina 远程桌面客户端
创建新条目。如果您打算同时 VNC 到多个 Selenium 容器,可以像下面这样设置每个条目:
更多详细信息请参见 SeleniumHQ github
一旦 Selenium 容器启动(在终端中保持 docker stats 运行可以方便地查看此信息),您可以使用 docker container ls 确认哪个 Selenium 容器正在使用哪个外部端口,因为 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
在此示例中,我们在构建用户配置(任务)中配置了两个测试会话。一个具有 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 条目,您应该能够看到正在被操作的浏览器……前提是 app-scanner 中的 Cucumber 测试步骤确实执行到了该点。
您当然可以减慢测试速度、暂停测试、使用调试器逐步执行。这些详细信息在 purpleteam 维基的工作流页面中。
在本地环境中,如果您愿意,可以保持 docker stats 运行,以便查看哪些容器正在运行、何时启动和停止。这也会为您提供以下命令所需的容器名称。
为了查看第二阶段容器的日志,可以使用以下命令跟踪容器的 stdout(以及 stderr,因为 Docker 合并了 stdout 和 stderr):
docker logs --follow [容器名称]
如果您希望同时将日志保存到文件:
docker logs --follow [容器名称] |tee output.log$(date '+%Y-%m-%d_%T')
如果您希望将日志保存到文件而不在终端中查看:
docker logs --follow [容器名称] > output.log$(date '+%Y-%m-%d_%T')
| 键 | 值 |
|---|
| 名称 | seleniumstandalone_chrome_1 |
| 协议 | VNC - 虚拟网络计算 |
| 基本选项卡中 | |
| 服务器 | 127.0.0.1:5900 |
| 密码 | secret |
| 颜色深度 | 真彩色(24位)# 这是我们唯一能用的选项 |
| 质量 | 差(最快) |
| 键 | 值 |
|---|---|
| 名称 | seleniumstandalone_chrome_2 |
| 协议 | VNC - 虚拟网络计算 |
| 基本选项卡中 | |
| 服务器 | 127.0.0.1:5901 |
| 密码 | secret |
| 颜色深度 | 真彩色(24位)# 这是我们唯一能用的选项 |
| 质量 | 差(最快) |