七足机器人功能测试
项目描述
七足机器人自动化功能测试
这个源代码树既是编写涉及七足机器人的功能测试的库,也是七足机器人本身的标准功能测试集。
注意事项
- 目前将作为库的使用完全没有文档。
- pypi.org上的分发不包含七足机器人本身的功能测试。换句话说,它只包含库部分。
- 这份README主要是关于七足机器人本身的功能测试的。
警告:要测试生产实例,请仅使用专用模式。其他模式假定您在测试运行后准备 丢弃所有数据,因此仅适用于对新生产实例进行预飞全测试。
安装
客户端安装
Mercurial
测试需要一个可工作的hg
可执行文件,它可在$PATH
上找到,并具有以下扩展:
- evolve 和 topic: hg-evolve ≥ 9.3.0
- configexpress: hg-configexpress
测试工具(Selenium)
-
tox:
pip install --user tox
-
对于在运行测试的系统上直接安装
- Fedora 29到33:
dnf install chromedriver
- Debian 9到10,Ubuntu < 20.04:
apt install chromium-driver
- Ubuntu ≥ 20.04:实际的
chromium-driver
包实际上安装了一个snap,这在某些环境中可能会导致问题。请参阅我们CI管道中的docker-inside
作业。
另一个选项是使用Selenium RemoteWebDriver,它通过专用系统代理实际的网页浏览。Selenium为此目的提供了
selenium/standalone-chrome
Docker镜像。 - Fedora 29到33:
所有其他依赖项将由首次运行安装。
七足机器人服务器需求
这些测试可以针对以下提供的Heptapod服务器进行操作:
- (默认)由运行测试的系统用户管理的本地Docker容器,或者
- 从源代码安装并由与测试相同的用户运行,或者
- 完全远程,跳过一些测试,或者
- 生产环境,依赖于最多拥有专用项目组所有权的用户,并运行适合的测试子集。
除了生产服务器模式外,Gitlab根密码将由第一个运行的测试初始化。如果Gitlab根密码已设置且与预期不符,则测试将失败。
默认Docker设置
在Docker的情况下,默认的容器名称是heptapod
。
默认情况下,测试预期在Docker主机上运行,并且容器可以初始化到主机的TCP连接,该主机被识别为容器的IPv4网关。如果您有防火墙,请别忘了在防火墙中允许来自容器的传入TCP连接。您也可以通过--heptapod-reverse-call-host
显式传递可到达的地址,或者通过传递空字符串作为地址来禁用此类测试。
默认情况下,容器HTTP和SSH端口必须转发到heptapod:81
和heptapod:2022
。这通常通过将heptapod
主机名解析为回环IP地址(如127.0.0.2)并像这样转发容器端口来完成
docker run --publish 127.0.0.2:2022:22 --publish 127.0.0.2:81:22
使用专用的主机名和IP地址有助于防止用户.ssh/known_hosts
文件中的混淆。
运行测试
tox
是启动测试的可执行文件。它还负责设置测试中使用的Python库。测试本身是用pytest编写的。
必须从这个存储库的根目录运行所有的tox
命令。
可以将选项传递给底层的pytest
命令
tox -- --heptapod-url URL -k push_basic
所有Heptapod特定选项都采用--heptapod-some-option
的形式。要获取完整的列表,请
tox -- --help
常见网络选项
这些在所有情况下都是可用的
--heptapod-url
(默认http://heptapod:81
):测试的Heptapod实例的HTTP URL。它必须使用可解析的名称,而不是IP地址。它不必通过DNS解析,指向回环接口的/etc/host
条目就可以。--heptapod-ssh-port
(默认2022):测试的Heptapod实例的SSH端口。将使用与HTTP相同的同一个主机名。如果主机名解析为回环接口,建议将其绑定到专用地址,例如127.0.0.2
,以最大限度地减少与您的SSHknown_hosts
文件相关的风险。--heptapod-reverse-call-host
:Heptapod服务器可以用来到达运行这些测试的系统上的地址(对于测试出站连接,如web钩子)。--heptapod-root-password
(默认5iveL!fe
)。要使用和可能为root用户设置的密码。默认值与GitLab开发套件(GDK)相同。
并行运行测试
仅使用---tests-per-worker
选项。
请不要使用--workers
选项:它会多次设置Heptapod
会话固定装置,导致与GitLab用户令牌和其他会话局部共享数据的问题。
测试Docker容器
这是默认的,也是最简单的。如果您遵循了默认的命名规则,并且当前系统用户可以管理Docker容器,那么只需运行tox
就可以启动整个测试套件
特定选项
--heptapod-container-name
(默认heptapod
)
测试本地源代码安装。
您需要在同一用户下运行测试和Heptapod服务器,并传递一些必选选项。
最小示例
~/heptapod/heptapod-tests $ tox -- --heptapod-source-install\
--heptapod--repositories-root ~/heptapod/gdk/repositories-root
测试远程服务器
重要提醒:如果您没有准备好放弃所有数据,请勿在任何Heptapod服务器上运行这些测试。
您必须提供--heptapod-remote
选项,并且可能需要明确所有网络选项。
~/heptapod/heptapod-tests $ tox -- --heptapod-remote \
--heptapod-ssh-port 22 \
--heptapod-url https://heptapod.test \
--heptapod-root-password SECRET
列出根密码选项是因为您可能不希望互联网上有默认根密码的实例。
测试生产实例
2021-02-18新增:参见!80
要运行适合生产实例的测试,您首先需要准备
- 一个完全致力于这些功能测试的项目组
- 一个拥有该专用组(将来可能还需要更多用户)的专用用户。
通过显式的命令行选项激活生产模式。另一个选项用于传递专用用户凭据。
示例
~/heptapod/heptapod-tests $ tox -- --heptapod-prod-server \
--heptapod-prod-group-owner-credentials ID:USERNAME:EMAIL:PASSWORD \
--heptapod-url https://foss.heptapod.net \
--heptapod-ssh-port 22 \
--heptapod-ssh-user hg
其中ID是数字用户ID,USERNAME是用户登录名(例如testfonct
)。
要在与Clever Cloud SSO关联的实例上启动测试,请另外使用--heptapod-clever-cloud-sso
选项。
备注和安全
- 用户密码必须完全可用:功能测试不会处理首次登录时发生的最终化序列。
- 不要给专用用户任何专用组以外的权限。
- 建议在不使用时锁定专用用户。
- 准备好接收针对专用用户地址的合并请求电子邮件。这可以说是测试的一部分。
Docker:选择要测试的版本
您使用的Docker镜像中安装的版本由heptapod_revisions.json
文件指定。
要测试您的本地heptapod/heptapod克隆
-
在容器中挂载您的本地
heptapod
克隆(假设在容器中它被视为/home/heptapod-rails
) -
在容器中执行以下操作
cd /var/opt/gitlab/embedded/service/gitlab-rails hg pull --config phases.publish=False /home/heptapod-rails hg up -r WISHED_REVISION gitlab-ctl restart unicorn
如果您想尝试更改其他组件(例如,hg-git
),则可以进行类似操作。路径可以在Docker构建日志中看到,或者您可以在安装脚本中读取
添加新测试
分支和主题规则
惯例是默认分支中的测试应通过当前octobus/heptapod:latest
Docker镜像,因此
- 如果您想分享一个错误复现,请创建一个新的主题
- 即使heptapod中已落地错误修复,也请等待Docker推送后再发布相应的测试
- 测试可以在Heptapod新版本发布之前发布,但请先让相应的修复落地并推送到Docker Hub。
如果有活动的稳定分支(例如,heptapod-0-6-stable
或类似),则该分支的测试必须针对相应分支的最新发布版本通过。相同的结论适用。