Docker+Jenkins打造自动化测试以及部署升级环境

//
Transwarp - 新闻详情
http://www.transwarp.io/news/detail?id=151

在项目迭代周期有限的情况下,流程冗长条件复杂的升级测试无法再依赖人工的办法完成,必须借助自动化测试的工具和方法解决这个问题。本文将以Transwarp Data Hub(TDH)的自动化升级测试的架构为例,分析应如何选择并系统性的整合不同技术以合理实现自动化测试以及部署升级。

随着产品发行版的增多,大量存在于客户现场的老版本有待升级更新,每当一个新版本产品发布给客户前,测试人员必须保证新的发行版可以完美支持老版本的升级。每一版产品引入的新功能或组件,也需确定不会和老版本产品既有的功能产生冲突。由此体现了升级测试的极度必要性。通常在对TDH进行版本升级测试时,我们的开发人员不仅要考虑到前端界面,还要考虑到后端升级程序的执行。而且为了保证测试维度的完备性以及便于分析,升级测试框架必须保证以下几点:

  1. 自动升级测试
  2. 模拟用户的行为
  3. 稳定性保证
  4. 详细的测试报告
  5. 随时查看升级过程
    考虑到上述几项需求,我们决定采用Docker + Jenkins再结合Selenium + VNC Server + Guacamole + Python这种技术混合型组合构建自动化升级测试环境。
    首先请读者阅读下面的技术详解,简单了解这五种相关工具和技术的作用。
    技术详解
    Docker
    Docker是被广泛应用的一种开源容器引擎,它可以支持程序的快速部署和移植,并具有很好的环境隔离性。在本文的例子中,我们将TDH升级所需要的OS运行环境——Remote WebDriver 和VNC Server,做在一个Docker镜像里,作为testbench。执行TDH升级测试前, 只需将TDH的程序部署到对应的testbench容器中即可运行。其中VNC Server提供的远程桌面服务允许开发者在Docker中debug测试中发现的问题。
    以下是制作镜像的对应部分的Dockerfile文件内容:
    FROM centos7_webtest:latestMAINTAINER transwarp#install jdkRUN rpm -ivh jdk-7u71-linux-x64.rpm#change yum repoADD change_yum.sh /root/RUN sh /root/change_yum.sh && rm -f /root/change_yum.sh#add htmlADD HTMLTestRunner.py /usr/lib/python2.7/site-packages/

Jenkins
Jenkins是一种持续构建工具,为了方便开发和测试人员监控每日升级测试的状态,我们将TDH升级测试按照流程阶段和测试用例做成若干个参数化的Jenkins Jobs,通过Jenkins的计划任务,启动TDH 升级测试。

Selenium
Selenium是一套面向web应用的开源的测试轻量级框架,具有跨平台性的优点,并获得了包括Java、Python在内的多个主流编程语言的支持。Selenium是TDH前端操作的重要工具,我们通过Selenium实现启停服务,添加配置,安装LDAP、Gardian等一系列操作。
下面是Selenium登陆Transwarp-Manager对应的代码示例。
from selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdriver =webdriver.Remote(command_executor='http://remoteIP:port/wd/hub', desired_capabilities=DesiredCapabilities.CHROME)driver.set_page_load_timeout(30)driver.implicitly_wait(30)driver.maximize_window()driver.get("TRANSWARP-MANAGERT-IP:8180")driver.find_element_by_id("userid").clear().send_keys(USER)driver.find_element_by_id("passwd").clear().send_keys(PASSWORD)driver.find_element_by_id("sign-in-button").click()

VNC Server + Guacamole
VNC Server是一种为了满足分布式用户共享资源的需求,在服务器上开的一项服务。TDH选择Guacamole远程连接访问VNC Server。Guacamole是基于HTML 5和JavaScript的VNC Web查看器。通过Guacamole网页连接VNC Server就可以方便远程观察TDH升级状态。


Python
******Pycrypto/Paramiko模块******

Pycryto和Paramiko是Python中用于远程认证登录服务器的两个重要的模块:Pycrypto用于安全认证;Paramik用于登陆远程服务器执行命令。TDH版本升级过程中会利用这两个模块远程到对应的集群服务器,执行对应的升级程序。
******HTML Report******

升级完成后,需要给出详细的测试报告,比如每个阶段的执行时间、启动时间、是否成功等关键信息。由于Python自带的或者第三方开发的模块生成测试报告基本都是UT级别的,因此无法使用现成的模块,需要自己进行开发。我们参考Python中对应的模块HTMLTestRunner对生成的测试报告进行二次开发。

****技术框架****
根据工具的不同特征,TDH自动化升级框架为每个工具安排了不同的处理任务:Docker用于部署用到的程序和环境;整体的测试工作由Jenkins负责调度;Selenium负责前端界面方面测试;Guacamole作为远程桌面客户端连接VNC Server;利用Python支持Selenium和shell脚本以及实现远程服务器的加密认证连接。根据上述任务分配,我们设计了TDH自动化升级测试的流程,并为之构建了如下框架:


  1. 将TDH升级做成一个Jenkins Job,需要用户事先配置好升级对应的集群,自动升级需要的客户端代码地址、Docker Image配置等。启动该Job即可进行TDH升级任务,可以是手动启动,也可以定时触发. 而且还可以通过Jenkins界面来观察对应Job的状态。
  2. 启动Jenkins Job进行TDH升级之后,Jenkins会通过事先做好的Docker 镜像启动一个Container,该Container包含客户端运行的所有环境。
  3. Container启动之后会从Git/SVN 上checkout对应的自动化升级需要的客户端代码。
  4. 运行Container中的客户端代码,开始自动化升级,首先会发送HTTP Request去连接远端的Selenium WebDriver。然后利用SeleniumWebDriver去打开TDH需要升级的管理界面,进行前端操作。然后TDH客户端程序也会进行后端升级,远程到对应需要升级的集群上运行对应的升级脚本,监听是否升级成功信号。
  5. Selenium WebDriver对应的服务器(Docker Container)需打开VNC Server服务,客户端可以通过VNC Viewer查看前端界面升级状况。这里的VNC Viewer使用的就是Guacamole。
  6. Jenkins会获取到客户端程序运行时详细的日志以及对应的升级报告,客户端通过对应的日志和升级报告获取到每个升级步骤的详细信息。

实例详解
下面以TDH4.3.5升级到4.6 为例,具体说明开发测试人员执行TDH自动化升级测试时的操作。
第一步:创建一个Jenkins Job并配置以下参数。
manager_ip:Transwarp-Manager对应的ip
username:Transwarp-Manager对应服务器登陆账号
password:Transwarp-Manager对应服务器登陆账号对应的密码
upgrade_tar_location:升级脚本对应的位置
upgrade_latest_install_tar:需要升级到对应的TDH的对应的tar包位置
new_version:升级到的TDH 版本
upgrade_mode:选择升级安全模式
service_add:升级结束后需要添加的服务

第二步:启动Jenkins Job,准备进行TDH升级。
第三步:启动一个Container,从Git上拉取对应代码,然后开始执行升级程序。
第四步:通过Selenium模拟鼠标点击关闭所有的服务(Zookeeper除外),如下图。



第五步:远程到升级所对应的集群,配置升级脚本并执行,等待升级结果。
第六步:升级完成后,通过Selenium模拟鼠标点击输入新的License,更新集群的License。
第七步:安装并启动Guardian服务。界面上的安装过程如下图。



第八步:根据客户升级需要在如下界面上添加对应的组件。

第九步:最后获得对应的如下升级报告。

******总结******
通过产品升级测试的自动化,我们省去了大量的人工操作和重复性操作,提高了TDH升级测试可靠性,结构化的测试报告帮助测试和开发人员迅速定位到升级过程中发生的问题。自动化把之前需要2~3天才能完成的升级测试缩短到了一天以内,大大提高了测试效率,为今后多产品线并行发布打下了坚实的基础。
在整个的自动化测试框架中,使用Docker技术是极大提高我们测试效率的关键。Docker保证了开发环境到生产环境的一致性,无论对于什么产品,在该框架下,开发和测试者只要提供相应的镜像和程序就可以按照模板跑自动化任务。开发人员能够任意时间点对指定代码或功能进行测试,尽早发现错误以降低试错成本。在我们的实际开发中,任何一个代码的提交都经过整套测试流程,从而缩短产品开发周期中开发和测试之间的依赖链,有效提高产品迭代速度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容