自学内容网 自学内容网

基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程

1 Jenkins是什么?
  • 学习官网:Jenkins官网,Jenkins中文官网;

  • Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件;

  • Java语言编写的,可在TomcatDocker等流行的容器中运行,也可独立运行。

通俗的讲,比如把编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址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. # 我们的环境是:

  2. 1、Linux服务器一台(我的是Ubuntu),在虚拟机中的,哈哈

  3. 2、在服务器上正确安装docker

  4. 3、拉取jenkins镜像:jenkins/jenkins:lts

  5. 4、拉取python3镜像:docker pull python:3.7

4.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:lts

6.2 启动Jenkins
 
  1. docker run

  2. -dit

  3. --name=jenkins

  4. -p 8080:8080

  5. -u=root

  6. -v /var/run/docker.sock:/var/run/docker.sock

  7. -v /usr/bin/docker:/usr/bin/docker

  8. jenkins/jenkins:lts

  • 参数说明:

 
  1. 参数说明

  2. -i:表示运行容器

  3. -t:表示容器启动后会进入其命令行

  4. -d:守护式方式创建容器在后台运行

  5. --name:容器名称

  6. -p 8080:8080:端口映射,宿主机端口:jenkins容器端口

  7. -u=root:指定容器用户为root用户

  8. -v /var/run/docker.sock:/var/run/docker.sock:将docker.sock映射到jenkins容器中

  9. docker.sock文件是docker client与docker daemon通讯的文件

  10. -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权限运行,加-u=root

  • 浏览器输入地址: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 jenkins

图片

在这里插入图片描述

8 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
  • 我的如下:

 
 
  1. adbutils==0.11.0

  2. alembic==1.6.5

  3. allure-pytest==2.8.12

  4. allure-python-commons==2.8.12

  5. altgraph==0.17.2

  6. amqp==5.0.6

  7. anyjson==0.3.3

  8. apipkg==1.5

  9. apkutils2==1.0.0

  10. Appium-Python-Client==0.50

  11. asgiref==3.3.1

  12. atomicwrites==1.4.0

  13. attrs==20.3.0

  14. BeautifulReport==0.1.3

  15. beautifulsoup4==4.9.3

  16. billiard==3.6.4.0

  17. blinker==1.4

  18. cached-property==1.5.2

  19. celery==5.0.5

  20. certifi==2020.12.5

  21. cffi==1.14.5

  22. chardet==3.0.4

  23. cigam==0.0.3

  24. click==7.1.2

  25. click-didyoumean==0.0.3

  26. click-plugins==1.1.1

  27. click-repl==0.2.0

  28. colorama==0.4.4

  29. comtypes==1.1.8

  30. configparser==5.0.2

  31. coreapi==2.3.3

  32. coreschema==0.0.4

  33. coverage==5.5

  34. cryptography==3.2.1

  35. cycler==0.10.0

  36. DataRecorder==3.2.2

  37. ddt==1.4.2

  38. decorator==5.0.9

  39. defusedxml==0.7.1

  40. Deprecated==1.2.12

  41. deprecation==2.1.0

  42. diff-match-patch==20200713

  43. Django==2.2.16

  44. django-bootstrap==0.2.4

  45. django-bootstrap3==15.0.0

  46. django-bootstrap4==2.3.1

  47. django-celery==3.3.1

  48. django-celery-beat==2.2.0

  49. django-ckeditor==6.1.0

  50. django-cors-headers==3.7.0

  51. django-crispy-forms==1.12.0

  52. django-crontab==0.7.1

  53. django-filter==2.4.0

  54. django-haystack==3.0

  55. django-import-export==2.5.0

  56. django-js-asset==1.2.2

  57. django-mdeditor==0.1.18

  58. django-ranged-response==0.2.0

  59. django-redis==4.12.1

  60. django-rest-framework-mongoengine==3.4.1

  61. django-simple-captcha==0.5.13

  62. django-simpleui==2021.6.2

  63. django-timezone-field==4.1.2

  64. django-tinymce==3.3.0

  65. djangorestframework==3.12.2

  66. djangorestframework-jwt==1.11.0

  67. dnspython==1.16.0

  68. docopt==0.6.2

  69. docutils==0.17.1

  70. dogtail==0.9.10

  71. dominate==2.6.0

  72. DownloadKit==0.5.0

  73. drf-extensions==0.7.0

  74. drf-haystack==1.8.10

  75. DrissionPage==3.1.1

  76. easygui==0.98.2

  77. elasticsearch==2.4.1

  78. et-xmlfile==1.0.1

  79. eventlet==0.30.2

  80. execnet==1.8.0

  81. facebook-wda==1.4.3

  82. filelock==3.0.12

  83. Flask==1.1.2

  84. Flask-Bootstrap==3.3.7.0

  85. Flask-Excel==0.0.7

  86. Flask-Login==0.5.0

  87. Flask-Mail==0.9.1

  88. Flask-Migrate==2.0.0

  89. Flask-Moment==1.0.1

  90. Flask-Script==2.0.5

  91. Flask-SQLAlchemy==2.4.4

  92. FlowViewer==0.2.2

  93. freetype-py==2.2.0

  94. fsspec==2022.8.2

  95. future==0.18.2

  96. greenlet==1.1.0

  97. HTMLReport==2.3.1

  98. idna==2.10

  99. importlib-metadata==2.1.1

  100. iniconfig==1.1.1

  101. itsdangerous==1.1.0

  102. itypes==1.2.0

  103. jdcal==1.4.1

  104. Jinja2==2.11.2

  105. jsonpath==0.82

  106. kiwisolver==1.3.1

  107. kombu==5.1.0

  108. lml==0.1.0

  109. loguru==0.7.0

  110. logzero==1.7.0

  111. lxml==4.6.3

  112. Mako==1.1.4

  113. Markdown==3.3.4

  114. MarkupPy==1.14

  115. MarkupSafe==1.1.1

  116. matplotlib==3.3.3

  117. mock==3.0.5

  118. mongoengine==0.22.1

  119. more-itertools==8.7.0

  120. mpmath==1.2.1

  121. mutagen==1.44.0

  122. mysql-connector==2.2.9

  123. mysqlclient==2.0.3

  124. numpy @ file:///C:/Users/Administrator/Downloads/numpy-1.21.0-cp37-cp37m-win_amd64.whl

  125. odfpy==1.4.1

  126. opencv-python==4.7.0.72

  127. openpyxl==3.0.5

  128. packaging==20.8

  129. pandas==1.1.5

  130. ParamUnittest==0.2

  131. pefile==2021.9.3

  132. Pillow==8.3.1

  133. pipreqs==0.4.11

  134. pluggy==0.13.1

  135. progress==1.6

  136. prompt-toolkit==3.0.19

  137. psutil==5.8.0

  138. py==1.10.0

  139. pyasn1==0.4.8

  140. pycparser==2.20

  141. pycryptodomex==3.9.4

  142. pyelftools==0.27

  143. pyexcel==0.6.6

  144. pyexcel-io==0.6.4

  145. pyexcel-webio==0.1.4

  146. pyexcel-xlsx==0.6.0

  147. pygame==2.0.1

  148. Pygments==2.9.0

  149. pyinstaller==4.10

  150. pyinstaller-hooks-contrib==2022.2

  151. PyJWT==1.7.1

  152. pymongo==3.11.3

  153. PyMySQL==0.10.1

  154. PyOpenGL==3.1.5

  155. pyOpenSSL==19.1.0

  156. pyparsing==2.4.7

  157. PyQt5==5.15.4

  158. pyqt5-plugins==5.15.4.2.2

  159. PyQt5-Qt5==5.15.2

  160. PyQt5-sip==12.11.0

  161. pyqt5-tools==5.15.4.3.2

  162. pytest==6.2.4

  163. pytest-assume==2.4.3

  164. pytest-cov==2.8.1

  165. pytest-forked==1.1.3

  166. pytest-html==2.0.1

  167. pytest-ignore-flaky==2.0.0

  168. pytest-metadata==1.8.0

  169. pytest-ordering==0.6

  170. pytest-repeat==0.9.1

  171. pytest-rerunfailures==10.3

  172. pytest-xdist==1.31.0

  173. python-alipay-sdk==3.0.1

  174. python-crontab==2.5.1

  175. python-dateutil==2.8.1

  176. python-dotenv==0.21.0

  177. python-editor==1.0.4

  178. pythonnet==2.5.1

  179. pytz==2021.1

  180. pywebview==3.4

  181. pywin32==300

  182. pywin32-ctypes==0.2.0

  183. pywinauto==0.6.8

  184. PyYAML==6.0

  185. QQLoginTool==0.3.0

  186. qt5-applications==5.15.2.2.2

  187. qt5-tools==5.15.2.1.2

  188. redis==3.5.3

  189. requests==2.24.0

  190. requests-file==1.5.1

  191. retry==0.9.2

  192. rsa==4.8

  193. ruamel.yaml==0.17.21

  194. ruamel.yaml.clib==0.2.7

  195. scipy @ file:///C:/Users/Administrator/Downloads/scipy-1.7.0-cp37-cp37m-win_amd64.whl

  196. selenium==3.141.0

  197. Serializer==0.2.1

  198. simplejson==3.17.2

  199. six==1.15.0

  200. sklearn==0.0.post5

  201. soupsieve==2.0.1

  202. SQLAlchemy==1.3.20

  203. sqlparse==0.4.1

  204. sympy==1.7.1

  205. tablib==3.0.0

  206. texttable==1.6.3

  207. tldextract==3.4.0

  208. toml==0.10.2

  209. tornado==6.1

  210. turtle==0.0.2

  211. Twisted==20.3.0

  212. ua-parser==0.10.0

  213. uiautomation==2.0.10

  214. uiautomator2==2.16.7

  215. uritemplate==3.0.1

  216. urllib3==1.25.11

  217. user-agents==2.2.0

  218. vine==5.0.0

  219. visitor==0.1.3

  220. wcwidth==0.2.5

  221. websocket-client==1.5.0

  222. weditor==0.6.4

  223. Werkzeug==1.0.1

  224. whichcraft==0.6.1

  225. win32-setctime==1.1.0

  226. WMI==1.5.1

  227. wordninja==2.0.0

  228. wrapt==1.12.1

  229. wxgl==0.7.2

  230. wxPython==4.1.1

  231. xlrd==1.2.0

  232. xlrd2==1.2.6

  233. XlsxWriter==3.0.2

  234. xlutils==2.0.0

  235. xlwings==0.21.4

  236. xlwt==1.3.0

  237. xmltodict==0.12.0

  238. yarg==0.1.9

  239. zipfile37==0.1.3

  240. zipp==1.2.0

  • 其实要不了这么多,看你项目需要吧,也可以进入项目根目录,使用以下命令导出项目的依赖包:

pipreqs . --encoding=utf8 --force
9.2 创建app目录
  • 在宿主机(安装docker的机子)上新建一个目录(我的目录是在我的家目录下创建app),将requirements.txt文件复制进去:

    图片

    图片

9.3 创建Dockerfile
  • app目录下创建Dockerfile文件(文件名必须是Dockerfile,没有后缀)Dockerfile内容以及解释如下:

 
  1. FROM python:3.7#基于python:3.7这个基础镜像镜像构建镜像

  2. WORKDIR /home/noamanelson/app #切换工作空间目录

  3. ADD ./requirements.txt /home/noamanelson/app #将python项目依赖包文件添加到镜像

  4. RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装依赖包

  5. 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内容如下,注释要另起一行写:

 
  1. echo "运行容器python执行自动化"

  2. #输出日志

  3. #-w=$WORKSPACE:指定workspace

  4. #--volumes-from=jenkins_save01:将jenkins容器中的workspace映射到python容器中,此时jenkins中git拉下来的代码就会被映射进去

  5. docker run --rm -w=$WORKSPACE --volumes-from=jenkins python3.7:autopy

  6. echo "python执行自动化执行成功"

  • build.sh复制到你的项目根目录下:

    图片

  • 提交代码到Git仓库:

 
  1. git add .

  2. git commit -am'update'

  3. git push

11 构建任务
  • 之前我们已经创建了任务:

    图片

  • 立即构建:

    图片

  • 构建历史:

    图片

  • 控制台输出:

    图片

  • 查看测试报告会没有样式,因为被Jenkins禁用了CSS样式,需要手动解决:

    图片

12 解决报告样式

图片

在这里插入图片描述

  • 写入如下代码:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

图片

在这里插入图片描述

  • 执行后结果为空说明是ok的;

  • 重新构建可以看到有样式的测试报告:

    图片

  • 上边这个方法只是临时的,jenkins重启又得设置,所以安装Groovy插件可以永久解决这个问题:

    图片

    图片

13 查看邮件
  • 从图上看邮件也是ok的;

图片


原文地址:https://blog.csdn.net/2401_89368762/article/details/144793864

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!