selenium+allure+gitlab+cicd 整合
本文目标是搭建一个gitlab代码仓库,同时创建GitlabRunner来运行提交的selenium自动化代码。并且使用nginx监听allure生成报告
gitlab
部署Gitlab
- 对于如何搭建Gitlab可以查看Gitlab的官方文档
或者直接使用下面的docker-compose文件来搭建gitlab仓库
version: '3.6'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: unless-stopped
hostname: '<内网或者公网中的域名或者ip>'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://<域名或者ip>'
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
# - '443:443'
- '22:22'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
shm_size: '256m'
对于上面的docker-compose脚本。需要写入docker-compose.yaml文件中并且在文件夹下执行
mkdir /opt/gitlab-ce && cd /opt/gitlab-ce
# 将上面的docker-compose脚本写在下面的docker-compose.yaml文件中
touch docker-compose.yaml
# 运行docker
docker-compose up -d
等待若干时间之后,输入上面的external_url地址就可以访问到gitlab
如果等待时间过长,可以使用
docker-compose logs -f来查看日志,看容器是否重启,或者其他异常情况
当出现下面的界面的话就表示gitlab部署成功
在部署之后可以在config/initial_root_password拿到root的初始密码。

对应的映射地址是gitlab容器中的/etc/gitlab/initial_root_password
输入对应账号名和上面的密码进行登陆

即部署成功。
gitlab_runner
runner 的作用类似jenkins本体,每一个runner可以作为独立的运行环境,用来提供持续集成的功能。每个仓库可以有若干个Runner。 官方文档
gitlab Runner的安装
于当前系统可以执行下面命令创建一个用于部署Runner的容器
docker run -p 1086:80 --name alpine_selenium_test_runner -itd alpine:latest
# 进入Runner容器中
docker exec -it alpine_selenium_test_runner-1 sh
# 参考下面安装Runner的命令
上面使用了
-p 1086:80命令表示将容器内容的80端口映射到主机上的1086端口。在后面会讲到使用nginx来实时更新allure输出的报告。
部署完容器之后进入查看下面安装Runner的方法,并且安装Runner
# 下载安装最近的amd64架构的Runner
wget https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# 设置权限然后注册 在运行register命令的时候可以参考下面的Token获取的方法
chmod +x gitlab-runner-linux-amd64 && gitlab-runner-linux-amd64 register
# 注册完毕之后运行runner
nohup gitlab-runner-linux-amd64 run &
在运行register命令的时候会需要到对应的gitlab的服务器和token
token的获取方式如下图(每个代码仓库都有对应的token,每一个runner都只能运行在对应的仓库中。获取方法,查看下面的)
Gitlab+CICD+python+selenium+pytest+allure
前置条件准备
- 安装docker环境
- 创建部署容器Gitlab
- 创建容器,部署Runner
- 在Runner中安装Selenium+python+pytest+allure环境
搭建成功gitlab之后创建好对应的账户,和配置好对应的账户
下面使用到的代码仓库
git clone https://gitee.com/Index72/selenium_test.git
cd selenium_test
# 将下面的ip地址换成搭建好的gitlab服务器地址
git push --set-upstream http://<配置好的域名或者ip>/<账户>/selenium_test.git master
在main_test.py文件中修改下面的代码来取消无头模式

对于上面的仓库部署成功之后,有头模式运行如下(在网络不稳定的环境中,容易出现超时问题,可以适当的在源代码中将超时时间延长,或者增加刷新机制),在Runner环境中基本上处于无头模式

部署对应的Runner
下面贴出可能需要用到的工具和网址
WebDriver
chromeWebdriver:https://chromedriver.chromium.org/
geckodriver:https://github.com/mozilla/geckodriver
浏览器
firefox:https://www.mozilla.org/firefox/
chrome:https://www.google.com/chrome
报告生成工具
allure:https://github.com/allure-framework/allure2
Runner中Selenium环境的搭建
由于环境在能运行之后就不会随便更改,所以可以将自动化脚本的仓库clone到runner容器当中进行部署,并且确保正常运行之后再进行后续环节
# 设置alpine的apk包管理器为国内源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
apk add firefox python3 py3-pip git nginx wget tar bash openjdk8 unzip
# pip 设置为国内源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
git clone https://gitee.com/Index72/selenium_test.git
cd selenium_test
pip install -r requirements.txt
# 安装火狐浏览器的webdriver 如果没有挂代理可能速度比较慢
wget "https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz"
tar -xvzf geckodriver-v0.33.0-linux64.tar.gz
mv geckodriver /usr/local/bin
# 安装allure报告生成工具
wget "https://github.com/allure-framework/allure2/releases/download/2.25.0/allure-2.25.0.zip"
unzip allure-2.25.0.zip && mv allure-2.25.0 /usr/local/ && echo 'export PATH=$PATH:/usr/local/allure-2.25.0/bin' >>~/.bashrc && source ~/.bashrc
在上面的准备操作和运行环境处理完成之后可以尝试运行
# selenium_test 目录下
./run_test.sh
没有出错的话应该会看到如下输出
即运行环境安装完成
- 编写.gitlab-ci.yml和shell脚本对报告进行生成
stages:
- run_selenium_test
selenium_test-job
stage: run_selenium_test
environment: test
# 将报告作为产物,产物会随着作业被长期保留
artifacts:
name: "allure_report"
paths:
- "./allure_report"
tags:
- selenium
script:
- echo "执行测试 ..."
- bash run_test.sh
上面的需要到的 run_test.sh脚本参考
#!/bin/bash
source ~/.bashrc
pytest main_test.py --alluredir="./allure_report"
allure generate ./allure_report
# 生成 allure-report
# 如果报告已经存在,则移除老旧的报告
if [ -d /opt/allure-report ];
then
rm -rf /opt/allure-report
fi
# 将测试报告,发送到/opt文件夹下
mv allure-report /opt/
if [ $? ];
then
echo "部署完成"
else
echo "部署失败"
fi
killall /usr/lib/firefox/firefox
之后在每一次提交代码之后就会触发流水线作业,作业的规则写在.gitlab-ci.yml中,并且按照上面的规则执行对应的run_test.sh脚本。


实时更新测试报告
对于上面已经实现了selenium的基础代码CI集成测试流水线。但是可以通过扩展当前的Runner或者增加一个nginx服务器来实时的查看pytest-allure生成的测试报告。
例如在上面的run_test.sh脚本中在生成了测试报告之后会将测试报告移动到/opt/allure-report目录下,我们可以通过部署一个nginx服务器来监听文件夹的报告生成,于上面的alpine的Runner容器,然后针对nginx进行下面的方式进行配置,配置指定的location路由为指定的/opt/allure-report文件夹,这样当报告被修改的时候即可实时显示新的报告。

由于 先前部署Runner的时候使用了
-p 1086:80的命令,所以直接访问到主机的1086端口就会映射到容器的80端口中。如下图





浙公网安备 33010602011771号