南京网站设计公司排名,正品手表官网,网页制作素材网站,网站建设费用是多少基于JenkinsPythonUbuntuDocker的接口/UI自动化测试环境部署详细过程 1 Jenkins是什么#xff1f;2 Jenkins目标是什么#xff1f;3 什么是CI/CD?3.1 CI持续集成3.2 CD持续部署3.3 CD持续交付 4 Ubuntu环境4.1 环境需求4.2 实现思路 5 Ubuntu下安装Docker6 安装Jenkins6.1 拉… 基于JenkinsPythonUbuntuDocker的接口/UI自动化测试环境部署详细过程 1 Jenkins是什么2 Jenkins目标是什么3 什么是CI/CD?3.1 CI持续集成3.2 CD持续部署3.3 CD持续交付 4 Ubuntu环境4.1 环境需求4.2 实现思路 5 Ubuntu下安装Docker6 安装Jenkins6.1 拉取Jenkins镜像6.2 启动Jenkins6.3 修改jenkins权限 7 Jenkins初始配置7.1 查看容器日志7.2 插件选择7.3 创建管理员用户7.4 安装插件7.4.1 git插件安装7.4.2 Docker插件安装7.4.3 HTML Publisher插件安装7.4.4 Email Extension插件安装7.4.5 JDK、Maven、SSH插件可选 8 Jenkins详细配置8.1 新建任务8.2 配置任务8.2.1 配置构建记录保留规则8.2.2 Git仓库配置8.2.3 配置构建后操作 8.3 配置邮件 9 构建python镜像9.1 导出依赖包9.2 创建app目录9.3 创建Dockerfile9.4 执行镜像构建命令 10 build.sh设计11 构建任务12 解决报告样式13 查看邮件 1 Jenkins是什么
学习官网Jenkins官网Jenkins中文官网Jenkins是一款开源 CICD 软件用于自动化各种任务包括构建、测试和部署软件用Java语言编写的可在Tomcat、Docker等流行的容器中运行也可独立运行。 通俗的讲比如把编译、打包、上传、部署到Tomcat中的过程交由JenkinsJenkins通过给定的代码地址URL代码仓库地址将代码拉取到其“宿主服务器”Jenkins的安装位置进行编译、打包和发布到Tomcat容器中。 2 Jenkins目标是什么
持续、自动地构建软件项目或者自动化测试项目帮助快速定位问题提升开发效率自动化测试中可帮助提升测试效率。
3 什么是CI/CD?
3.1 CI持续集成
CI即Continuous integration持续集成强调开发人员提交了新代码之后立刻进行构建、单元测试。根据测试结果我们可以确定新代码和原有代码能否正确地集成在一起团队需要为每个新功能、代码改进、或者问题修复创建自动化测试用例需要一个持续集成服务器它可以监控代码提交情况对每个新的提交进行自动化测试尽可能快的提交代码以下图片来源于网络可帮助理解仅供参考 优势 ① 提早拿到回归测试的结果避免问题到生产环境中 ② 发布编译将会更加容易 ③ 减少工作问题切换快速获得构建失败的消息快速解决问题 ④ 测试成本大幅降低包括时间和人力成本等 ⑤ 节省QA团队时间侧重质量文化建设。 3.2 CD持续部署 CD即continuous deployment持续部署 通过自动化的构建、测试和部署循环来快速交付高质量的产品 团队应具有完善的测试理念 单元测试尤为重要 文档和部署频率需要保持一致 优势 ① 发布频率快 ② 风险降低问题可很快修复 ③ 客户可很快看到产品的交付结果。 3.3 CD持续交付
CD即Continuous Delivery持续交付可让软件产品的产出过程在一个短周期内完成以保证软件可以稳定、持续的保持在随时可以释出的状况在持续集成的基础上将集成后的代码部署到更贴近真实运行环境(类生产环境)中目标在于让软件的构建、测试与释出变得更快以及更频繁需要有强大的持续集成组件和足够多的测试项可以满足代码的需求部署需要自动化以下图片来源与网络仅供参考
4 Ubuntu环境
4.1 环境需求
我的环境是 在Windows10操作系统上安装虚拟机Hyper-V然后在虚拟机里安装Ubuntu操作系统自动化测试在Ubuntu上运行 后续根据自身的环境选择合适的安装步骤如果是以上环境可参考以下 LinuxGUI自动化测试框架搭建三-虚拟机安装Hyper-V或者VMWare
# 我们的环境是
1、Linux服务器一台(我的是Ubuntu)在虚拟机中的哈哈
2、在服务器上正确安装docker
3、拉取jenkins镜像jenkins/jenkins:lts
4、拉取python3镜像docker pull python:3.74.2 实现思路 1、在Linux服务器安装docker 2、创建jenkins容器 3、根据自动化项目依赖包构建python镜像(构建自动化python环境) 4、运行新的python容器执行jenkins从仓库中拉下来的自动化项目 5、执行完成之后删除容器。 5 Ubuntu下安装Docker
详细的安装步骤请参考Docker笔记3 | 在Ubuntu下安装Docker此处不再赘述了。
6 安装Jenkins
6.1 拉取Jenkins镜像
使用docker拉取Jenkins镜像
docker pull jenkins/jenkins:lts6.2 启动Jenkins
docker run
-dit
--namejenkins
-p 8080:8080
-uroot
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
jenkins/jenkins:lts参数说明
参数说明
-i表示运行容器
-t表示容器启动后会进入其命令行
-d守护式方式创建容器在后台运行
--name容器名称
-p 8080:8080端口映射宿主机端口:jenkins容器端口
-uroot指定容器用户为root用户
-v /var/run/docker.sock:/var/run/docker.sock将docker.sock映射到jenkins容器中
docker.sock文件是docker client与docker daemon通讯的文件
-v /usr/bin/docker:/usr/bin/docker将宿主机docker客户端映射到jenkins容器中6.3 修改jenkins权限
如果docker安装jenkins运行失败查看日志提示权限不够
docker logs jenkin则修改以上目录/var/jenkins_home 的权限
chown -R 1000 /var/jenkins_home 或者运行容器时以root权限运行加-uroot。 浏览器输入地址:8080即可
7 Jenkins初始配置
7.1 查看容器日志
docker logs jenkins以上就是我们的jenkins密码复制后解锁即可
7.2 插件选择
进入如下页面 如下会进行插件安装如果报错点重试即可
7.3 创建管理员用户
插件安装完进入如下界面 记住自己填的用户名和密码然后保存继续 继续保存进行下一步。
7.4 安装插件
7.4.1 git插件安装 我们之前插件安装的时候选的是默认插件安装那么git插件已经是安装好了的可从以下图示查看 点击【install plugins】可以查看已经安装的插件 点击【available plugins】可选择下载自己需要的插件这里我安装下gitee
7.4.2 Docker插件安装 如下搜索docker安装即可 安装完后如下所示
7.4.3 HTML Publisher插件安装
如下搜索
7.4.4 Email Extension插件安装
如下所示
7.4.5 JDK、Maven、SSH插件可选
安装JDK 输入账号和密码 安装maven 配置SSH 设置主机和端口点击【添加】 如果添加无反应点击右上角的用户名添加一个即可 可以自行尝试是否ok即可。
以上步骤完成后安装完成后重启jenkins容器
docker restart jenkins8 Jenkins详细配置
8.1 新建任务
重新登陆jenkins点New Item如图 输入项目名称构建方式根据自己项目选择即可我这里直接选第一个创建自由风格的项目
8.2 配置任务
8.2.1 配置构建记录保留规则
在General选项中设置如下
8.2.2 Git仓库配置
输入git仓库的地址、账号和密码
8.2.3 配置构建后操作 添加构建后操作模块linux下选shell: 配置运行脚本 配置jenkins中展示的测试报告路径 配置邮件触发器 与以上步骤完成后保存即可。
8.3 配置邮件
jenkins管理-系统配置-Jenkins Location。在系统管理员邮件地址输入对应的邮件地址 jenkins管理-系统配置-Extended E-mail Notification填写对应的smtp服务器相关内容点击高级输入对应的邮箱地址和smtp登录的授权码勾选ssl 配置邮件触发器jenkins管理-系统配置-Default Triggers默认是勾选失败才发可以配置总是发送或根据需求勾选那么每次运行项目时都会发送邮件。
9 构建python镜像
9.1 导出依赖包
构建有项目执行环境的python镜像在本地Python运行环境中将项目依赖包导出来到requirements.txt文件中
pip freeze requirements.txt我的如下
adbutils0.11.0
alembic1.6.5
allure-pytest2.8.12
allure-python-commons2.8.12
altgraph0.17.2
amqp5.0.6
anyjson0.3.3
apipkg1.5
apkutils21.0.0
Appium-Python-Client0.50
asgiref3.3.1
atomicwrites1.4.0
attrs20.3.0
BeautifulReport0.1.3
beautifulsoup44.9.3
billiard3.6.4.0
blinker1.4
cached-property1.5.2
celery5.0.5
certifi2020.12.5
cffi1.14.5
chardet3.0.4
cigam0.0.3
click7.1.2
click-didyoumean0.0.3
click-plugins1.1.1
click-repl0.2.0
colorama0.4.4
comtypes1.1.8
configparser5.0.2
coreapi2.3.3
coreschema0.0.4
coverage5.5
cryptography3.2.1
cycler0.10.0
DataRecorder3.2.2
ddt1.4.2
decorator5.0.9
defusedxml0.7.1
Deprecated1.2.12
deprecation2.1.0
diff-match-patch20200713
Django2.2.16
django-bootstrap0.2.4
django-bootstrap315.0.0
django-bootstrap42.3.1
django-celery3.3.1
django-celery-beat2.2.0
django-ckeditor6.1.0
django-cors-headers3.7.0
django-crispy-forms1.12.0
django-crontab0.7.1
django-filter2.4.0
django-haystack3.0
django-import-export2.5.0
django-js-asset1.2.2
django-mdeditor0.1.18
django-ranged-response0.2.0
django-redis4.12.1
django-rest-framework-mongoengine3.4.1
django-simple-captcha0.5.13
django-simpleui2021.6.2
django-timezone-field4.1.2
django-tinymce3.3.0
djangorestframework3.12.2
djangorestframework-jwt1.11.0
dnspython1.16.0
docopt0.6.2
docutils0.17.1
dogtail0.9.10
dominate2.6.0
DownloadKit0.5.0
drf-extensions0.7.0
drf-haystack1.8.10
DrissionPage3.1.1
easygui0.98.2
elasticsearch2.4.1
et-xmlfile1.0.1
eventlet0.30.2
execnet1.8.0
facebook-wda1.4.3
filelock3.0.12
Flask1.1.2
Flask-Bootstrap3.3.7.0
Flask-Excel0.0.7
Flask-Login0.5.0
Flask-Mail0.9.1
Flask-Migrate2.0.0
Flask-Moment1.0.1
Flask-Script2.0.5
Flask-SQLAlchemy2.4.4
FlowViewer0.2.2
freetype-py2.2.0
fsspec2022.8.2
future0.18.2
greenlet1.1.0
HTMLReport2.3.1
idna2.10
importlib-metadata2.1.1
iniconfig1.1.1
itsdangerous1.1.0
itypes1.2.0
jdcal1.4.1
Jinja22.11.2
jsonpath0.82
kiwisolver1.3.1
kombu5.1.0
lml0.1.0
loguru0.7.0
logzero1.7.0
lxml4.6.3
Mako1.1.4
Markdown3.3.4
MarkupPy1.14
MarkupSafe1.1.1
matplotlib3.3.3
mock3.0.5
mongoengine0.22.1
more-itertools8.7.0
mpmath1.2.1
mutagen1.44.0
mysql-connector2.2.9
mysqlclient2.0.3
numpy file:///C:/Users/Administrator/Downloads/numpy-1.21.0-cp37-cp37m-win_amd64.whl
odfpy1.4.1
opencv-python4.7.0.72
openpyxl3.0.5
packaging20.8
pandas1.1.5
ParamUnittest0.2
pefile2021.9.3
Pillow8.3.1
pipreqs0.4.11
pluggy0.13.1
progress1.6
prompt-toolkit3.0.19
psutil5.8.0
py1.10.0
pyasn10.4.8
pycparser2.20
pycryptodomex3.9.4
pyelftools0.27
pyexcel0.6.6
pyexcel-io0.6.4
pyexcel-webio0.1.4
pyexcel-xlsx0.6.0
pygame2.0.1
Pygments2.9.0
pyinstaller4.10
pyinstaller-hooks-contrib2022.2
PyJWT1.7.1
pymongo3.11.3
PyMySQL0.10.1
PyOpenGL3.1.5
pyOpenSSL19.1.0
pyparsing2.4.7
PyQt55.15.4
pyqt5-plugins5.15.4.2.2
PyQt5-Qt55.15.2
PyQt5-sip12.11.0
pyqt5-tools5.15.4.3.2
pytest6.2.4
pytest-assume2.4.3
pytest-cov2.8.1
pytest-forked1.1.3
pytest-html2.0.1
pytest-ignore-flaky2.0.0
pytest-metadata1.8.0
pytest-ordering0.6
pytest-repeat0.9.1
pytest-rerunfailures10.3
pytest-xdist1.31.0
python-alipay-sdk3.0.1
python-crontab2.5.1
python-dateutil2.8.1
python-dotenv0.21.0
python-editor1.0.4
pythonnet2.5.1
pytz2021.1
pywebview3.4
pywin32300
pywin32-ctypes0.2.0
pywinauto0.6.8
PyYAML6.0
QQLoginTool0.3.0
qt5-applications5.15.2.2.2
qt5-tools5.15.2.1.2
redis3.5.3
requests2.24.0
requests-file1.5.1
retry0.9.2
rsa4.8
ruamel.yaml0.17.21
ruamel.yaml.clib0.2.7
scipy file:///C:/Users/Administrator/Downloads/scipy-1.7.0-cp37-cp37m-win_amd64.whl
selenium3.141.0
Serializer0.2.1
simplejson3.17.2
six1.15.0
sklearn0.0.post5
soupsieve2.0.1
SQLAlchemy1.3.20
sqlparse0.4.1
sympy1.7.1
tablib3.0.0
texttable1.6.3
tldextract3.4.0
toml0.10.2
tornado6.1
turtle0.0.2
Twisted20.3.0
ua-parser0.10.0
uiautomation2.0.10
uiautomator22.16.7
uritemplate3.0.1
urllib31.25.11
user-agents2.2.0
vine5.0.0
visitor0.1.3
wcwidth0.2.5
websocket-client1.5.0
weditor0.6.4
Werkzeug1.0.1
whichcraft0.6.1
win32-setctime1.1.0
WMI1.5.1
wordninja2.0.0
wrapt1.12.1
wxgl0.7.2
wxPython4.1.1
xlrd1.2.0
xlrd21.2.6
XlsxWriter3.0.2
xlutils2.0.0
xlwings0.21.4
xlwt1.3.0
xmltodict0.12.0
yarg0.1.9
zipfile370.1.3
zipp1.2.0其实要不了这么多看你项目需要吧也可以进入项目根目录使用以下命令导出项目的依赖包
pipreqs . --encodingutf8 --force9.2 创建app目录
在宿主机(安装docker的机子)上新建一个目录(我的目录是在我的家目录下创建app)将requirements.txt文件复制进去
9.3 创建Dockerfile
在app目录下创建Dockerfile文件(文件名必须是Dockerfile没有后缀) Dockerfile内容以及解释如下
FROM python:3.7 #基于python:3.7这个基础镜像镜像构建镜像
WORKDIR /home/noamanelson/app #切换工作空间目录
ADD ./requirements.txt /home/noamanelson/app #将python项目依赖包文件添加到镜像
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装依赖包
CMD [python3, main.py] #设置容器执行后自动执行的命令这里start_all.py是我们自动化框架的执行入口文件9.4 执行镜像构建命令
在app目录下执行镜像构建命令此步骤也可以放到build.sh每次jenkins构建时重新构建镜像但是速度会慢所以如果环境稳定的话建议提前构建好
docker build -t python3.7:autopy .-t镜像名称 点(.)点表示Dockerfile文件所在的目录我现在在app目录下点表示当前目录 构建成功后会看到一个新的镜像
10 build.sh设计
build.sh内容如下注释要另起一行写
echo 运行容器python执行自动化
#输出日志
#-w$WORKSPACE指定workspace
#--volumes-fromjenkins_save01将jenkins容器中的workspace映射到python容器中此时jenkins中git拉下来的代码就会被映射进去
docker run --rm -w$WORKSPACE --volumes-fromjenkins python3.7:autopy
echo python执行自动化执行成功将build.sh复制到你的项目根目录下: 提交代码到Git仓库: git add .git commit -amupdategit push 11 构建任务
之前我们已经创建了任务 立即构建 构建历史 控制台输出 查看测试报告会没有样式因为被Jenkins禁用了CSS样式需要手动解决
12 解决报告样式 写入如下代码
System.setProperty(hudson.model.DirectoryBrowserSupport.CSP,)执行后结果为空说明是ok的重新构建可以看到有样式的测试报告 上边这个方法只是临时的jenkins重启又得设置所以安装Groovy插件可以永久解决这个问题
13 查看邮件
从图上看邮件也是ok的