selenium+allure+gitlab+cicd 整合

本文目标是搭建一个gitlab代码仓库,同时创建GitlabRunner来运行提交的selenium自动化代码。并且使用nginx监听allure生成报告

gitlab

部署Gitlab

  1. 对于如何搭建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

没有出错的话应该会看到如下输出

即运行环境安装完成

  1. 编写.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端口中。如下图

测试报告的结果

posted @ 2023-12-16 10:17  index72  阅读(405)  评论(0)    收藏  举报