转自:http://blog.****.net/tulituqi/article/details/17846463
为什么我们要引入RF?其实最初我们引入RF是为了能够快速的开展自动化验收测试,为敏捷保驾护航。这其中有个重要的工具Jenkins,同时也是应群里朋友们的要求,这次就来介绍一下RF如何快速便捷的结合Jenkins这一利器在windows上进行自动化测试(linux我没机器,大体步骤差不多,度娘应该有)。
其实个人觉得RF和Jenkins的结合很简单,概括一下就这几点:
1、下载Jenkins
2、添加节点
3、安装robotframework插件
4、配置job运行测试
如果你已经在使用Jenkins了,那么1、2点应该可以跳过了。因为贫道比较懒,所以推荐的也是懒人大法,OK,让我们开始吧。
一、下载Jenkins
下载地址:http://mirrors.jenkins-ci.org/
贫道比较推荐下载war包的,进入上面的地址,页面里有war的链接,各种类型各种版本的release,大家根据自己需要来下载吧,具体英文含义请问度娘。
如果对Jenkins版本没特别的要求,就进war的第一行release里面找最新版本用吧。
为啥war包最简单呢?如果你有tomcat,那么把war包放到他的webapps目录里就可以了,直接启动你的tomcat即可。
通常访问路径是http://localhost:8080/jenkins
如果你没有tomcat,那就更简单了,我不会教你怎么去安装tomcat,jenkins的war包里内置了jetty,我们直接用命令行java -jar jenkins.war就可以启动了。如下图:
当然我更推荐这样的方式,因为jetty的方式直接就可以让其他人访问了,可以看到上图倒数第5行的地址 0.0.0.0:8080,直接就把本机变成服务器了。
而在tomcat里还要修改配置ip为0.0.0.0才行。所以,对和我一样的懒人来说,这样方便了很多。
当你看到一行信息:Jenkins is fully up and running,就代表Jenkins的服务已经启动了。
推荐大家在chrome里访问,速度会快些,打开我们的jenkins地址:http://192.168.1.6:8080(IP以你本机IP为准,也可用localhost,比起tomcat来说,url还不用写jenkins),会看到如下图的页面:
这样一个基本的Jenkins就完成搭建了,很简单吧,一个命令行搞定。
当然,有很多的插件会使我们更方便使用Jenkins,但是这个不是我这篇文章要讲的内容,有需要可以自行度娘,刚才下载war的页面有个plugin的链接就是插件的下载地址。
我简单推荐几个常用的插件:
ant、dashboard-view、disk-usage、subversion等等,现在的Jenkins比较成熟了,插件也是有多种多样,找适合自己使用的插件安装吧。
二、添加节点
我们启动Jenkins服务的这台机器在Jenkins里叫做master,而其他的连到master上的机器(物理机、虚拟机都可以)都是slave,也叫节点。
1、点击系统管理,然后点击管理节点,就看到如下界面:
2、点击新建节点
(这是静态连接的方式,就是我先设置好节点,由slave自己去连master作为这个节点。另外也有一种动态连接的方式,不用先设置好节点,直接用slave.jar连过来,这里就不详细介绍了)
3、输入slave的名字,点确定
上图有几个需要注意的地方我标注了一下:
a、executors:表示在slave上可以并行执行几个线程,也可以点后面的问号看说明。对于RF来说,建议设置为1。
b、远程工作目录:在slave上创建jenkins工作目录的路径,我一般设置为D:\JK
c、标签:可以给slave加上一个或多个标签,通过标签选择slave
d、启动方法:启动slave的方法,推荐选第二个Launch slave agents via Java Web Start
注意:如果是用来执行RF自动化测试案例的slave,严禁选择windows service的方式,否则后果自负。
我们给这个slave加上2个标签slaveA和slaveall(节点的名字slave1也可以算做标签),设置好之后点保存。如图:
图中可以看到有多种方式来启动slave,选一种来启动吧,推荐2。然后我们再加个slave2,标签就用slaveB和slaveall,有机器的可以自己找两台来连一下,没有的话就自己本机也可以当slave连上来,这样自己的机器又当master又当slave,练习一下无所谓了。
我就是这样搞的,如图:
三、安装robotframework插件
接下来我们要安装插件了,大部分的插件安装方式都类似,主要介绍其中一种。
1、回到Jenkins首页,进入系统管理,点击管理插件
这里有可更新、可选插件、已安装和高级几个页面。
可更新和已安装没啥说的,可选插件里面列了所有的插件和简单介绍,点击他的连接可以进到插件的主页,里面有详细的介绍。
2、我们主要用的还是高级这个页面里的上传插件这个部分:
这里我们需要上传插件的hpi文件,等他提示安装完成,然后重启Jenkins就可以完成安装了。
到最开始我给的地址页面可以找到插件的下载地址,这里直接提供RF的插件下载路径http://mirrors.jenkins-ci.org/plugins/robot/
RF的插件版本建议选1.3.2,如果遇到解析xml报错的问题,可以加入qq群,那里有个修复的版本。
四、配置Job运行测试
接下来就是配置Job了。
1、在首页有提示我们新建任务的,或者点左边的新建链接也可以进入到新建任务的页面。
对于RF的Job来说,*风格就可以了。多配置也可以,只不过多配置的略有不方便,看各自需要吧,比如你要把一套案例在多个不同配置的slave上执行,就可以用多配置的Job。
2、先来介绍*风格的,点击OK后,就进入到Job的配置页面了。
可配置的地方很多,为了我们快点能先执行案例先介绍必须设置的几个地方。
a、Restrict where this project can be run: 前面的标签就在这里用上了。用来指定这个Job在哪个标签的slave上执行。多配置项目的指定slave标签不是在这里,下一篇会讲。
b、源码管理:RF的案例推荐使用SVN,本次演示不做处理了,下一篇会简单说说。
c、构建:我们要增加构建步骤-Execute Windows batch command,我先写个简单的命令,完整命令行参数大家自己在命令行输入pybot.bat --help来看
d、构建后操作:我们要增加构建后步骤-Publishes Robot Framework test results,第一个output默认可以为空,如果前面的pybot.bat指定了输出目录,那么这里也要对应进行设置,否则他找不到output.xml就没法解析结果了。
3、接着点击立即构建来运行Job。
可以点构建的进度条直接看到控制台输出,或者在点构建的名字在菜单里找控制台输出看结果。
4、RF插件的作用
RF插件主要用了解析RF运行后的output.xml文件,将解析的结果展示出来。
a、在Jenkins的首页显示Job最新的构建结果,见最后那列Robot Results
b、在Job的首页会显示运行结果的趋势图
构建的含义:感觉不需要我解释太多吧,就当作是运行了一次Job就行了,对于开发Job的构建一般是进行了一次代码的打包、编译、部署,对于RF的Job的构建,就是运行了一次RF自动化测试案例。
原本打算弄个master+slave的图,后来实在懒得画了,就是一个master为中心,很多slave连上来,大家自行脑补一下吧
一、slave机器的配置
你可以用物理机或者虚拟机来布置你的slave执行机,用来执行RF自动化案例的机器需要安装或配置以下内容:
1、Java环境,用来启动slave连接Jenkins
2、RF环境,和博客置顶里的一样,也就是和你本机执行的环境一样即可。如果本地安装了什么测试库,要在slave上安装相同的测试库,因为实际执行就是在slave上调用pybot.bat来执行的,所以如果漏了安装某个测试库,可能会导致案例执行失败。
3、修改RF的编码,还记得我以前提过的修改编码将cp437改成cp936么?如果不修改的话,有可能会出现控制台输出的页面看不到中文,可能是一堆????
二、多配置项目
前面介绍的Job是*风格的项目,那么有些情况下可能也需要多配置项目,那么我介绍一下他和*风格有什么不同。
1、配置不同
首先是指定标签的Restrict where this project can be run没有了,取而代之的是Configuration Matrix
点击Add axis有几个选项,通常前2个就够用了,第3个我也没用过。
第一个Label expression是输入Label的表达式,和*风格的Restrict类似。
第二个Slaves比较省事:
这里面有Labels和nodes两种选择。
Labels就是我们之前建立节点时添加的标签,如果多个slave都有同样的Label,那么他们就是一个group了。
这种比较适合有多个Job在多台slave上执行的情况,因为如果指定具体的一个slave会出现抢占资源的情况,而指定一个group的话,那么资源会按空闲进行合理分配。
例如:我在管理部门内的十几台机器就是这样来分配的,每个测试组的机器都有单独的标签,整体上所有的机器也有统一的标签,这样在后续调用的时候可以根据情况合理分配。
Individual nodes其实就是节点管理里的那些节点,大家可以自己点进去看。
2、显示执行结果不同
选多配置项目和*风格的差别除了在配置选slave标签的差别,另外就是显示执行结果上的差别了。
我先选1个标签slaveA来执行一下。
a、在Jenkins首页可以看到,多配置项目的Robot Results是空的
b、在Job的首页也没有RF的结果
因为我只配置了一个标签,所以只显示了default,点击default就能看到默认配置的运行结果。
如果设置了多个标签,那么在首页就能看到每个配置的链接。(我后加了个master,但是没运行案例,所以是灰色)
点击slaveA进去看看,这样才是*风格那种Job首页的显示:
以上就是多配置和*风格的差异,大家自己选择。
三、其他有用的Job配置
1、丢弃旧的构建
勾选丢弃旧的构建,有几个选项选择,如图:
保持构建的天数:每个构建能保留多少天
保持构建的最大个数:最多保留多少个构建
这样可以降低一些master的存储和Job的构建历史记录,根据自己需要进行设定吧。
2、源码管理
有很多种源码管理工具可以选择,如果没有的话可以下载相应的插件。下面是默认已有的几种
比较合适的做法是将你的RF案例用svn管理,本地提交更新,然后每次Job运行时从svn下载最新的代码来运行。
RepositoryURL就是你的svn路径,Local module directory就是下载后的本地路径,默认是当前工作目录,也可以自己定义个目录。例如下图:
我的执行命令当然也是用相对路径来写案例:
pybot.bat --test * -v url:http://url -i REGTEST -d .\Result test\testsuite.txt
运行后再看下工作区,会整齐一些。
3、构建触发器
这里也是比较有用的,有几种触发方式:
a、在其他项目构建完成后才执行:这种就是持续集成时比较适合的,前一个Job负责编译部署系统,或者是执行自动化单元测试,然后来驱动当前的RF的Job执行自动化验收测试。
b、给定一个时间表达式,指定什么时间运行。具体可以参考帮助或者百度。
MINUTE HOUR DOM MONTH DOW
MINUTE | Minutes within the hour (0–59) |
HOUR | The hour of the day (0–23) |
DOM | The day of the month (1–31) |
MONTH | The month (1–12) |
DOW | The day of the week (0–7) where 0 and 7 are Sunday. |
c、和前一个类似,差别我记得是当你有代码变更才会触发,通常是给开发的Job用的。
对于测试来说,基本上前面2个够用了。
4、工作空间workspace
在Job页面的左侧有个链接,工作空间
每次运行的输出结果都会在这里,如果指定了output目录那就可能不在这里了。
RF的插件还有一个作用就是把每次的output文件从slave拷贝到master上,如果以后你的master上空间不够了就要考虑一下是不是每次拷贝过去的文件太多太大了,也可以用丢弃旧的构建清理一下。
清理工作空间也是不错的选择,他主要是清理Slave上的这个Job的workspace。
5、权限管理
我目前做的演示都没有涉及到权限管理,这个具体要看你想做什么样的权限控制,如果公司里用windows的域来管理的,那么可以用Active Directory的进行配置(貌似默认有,如果没有就去下载插件安装)。
在系统管理的系统设置页面,有一个启用安全的选项(第一次设置请在系统管理页面点安全设置)
然后选择AD,配置上你们自己的域控制器的地址就可以了。
你也可以用Jenkins自己的用户数据库,允许用户注册,然后再授权。
但是我其实最想说的是大家要注意下面的授权策略:
这个授权策略如果你想只允许管理员来设置的话,就要启用安全矩阵或项目矩阵授权策略。
切记:保存之前千万不要忘记把自己的用户加入到矩阵里,否则没人能进系统管理了。
这事儿我干过,后来我只能清空Jenkins的所有目录,然后重新搞。
下图的添加用户/组就是给你增加用户权限的,然后记得在矩阵里把该勾选的权限都勾选上。
小提示:这里的用户权限包括项目的用户权限都是大小写敏感的,虽然大小写的用户名都可以登录,但是如果矩阵授权的是小写,那么大写用户登录进来实际上是没有权限的。如果遇到授权用户登录后没有权限操作,极其有可能是这种情况。
实际上Jenkins不仅是持续集成可以用,实际上我们目前在自动化回归测试上也在使用,因为现在公司很关注每日构建(每天跑自动化测试案例)的结果以及回归日的自动化测试结果。而且因为Jenkins平台的开放性,我们并不仅仅是RF的整合,使用其他测试工具也是可以整合进来的,甚至被大家慢慢抛弃的QTP也有Jenkins的插件(我试着用了用,还不错)。
关于RF和Jenkins的融合我就介绍这么多了,基本没有怎么介绍开发的部分,这个不是我的重点了,相信网上也有很多例子,需要了解的朋友可以自己去搜索一下。
希望这部分内容能帮助到大家快速搭建自己的Jenkins服务器,让你的RF自动化测试自己跑起来。也希望在Jenkins上测试人员和开发人员融合的更好~
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***