最近几年越来越多的公司都开始进行自动化测试的设计和布局了,自动化,顾名思义就是把以人为驱动的测试行为转化为机器执行的一种过程,并经常用于回归测试中,市面上也存在很多开源的自动化测试的工具和理论知识,今天我要说的是 RobotFramework 这个工具;
我也是在偶然的机会中接触到了 RobotFramework 这个工具,并且觉得形式很新颖,一下就被吸引了,RobotFramework 是一款 python 编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行,下面我们就进入正题吧!
1.当我们把工具安装完成后,会在我们的桌面看到一个小图标,我们以后编写用例,就依赖他了(有感兴趣的小伙伴可以私聊我要安装过程,在此就不赘述了):
2.当我们双击这个图标后,会进入一个 “赏心悦目” 的编辑界面;
3.工具适用场景
个人认为比较适合接口自动化测试场景;
4.工具支持 jenkins 平台整合
jenkins 是一个功能非常强大的持续集成和持续交付的开源项目,几乎可以处理任何类型的自动构建或者持续集成,所以它必然是可以结合 RF 进行自动化测试的部署和调度,具体实现步骤大体如下:
注: 具体实践本次分享暂不展开;
优劣势分析
优势:
劣势:
1.在编写 case 过程中,进行了一些关键字的梳理,关于变量,详情如下:
2.excellibrary 方法总结:
3.Run Keyword If
4.Strip String 去掉前后空白字符
5.Remove String 删除指定字符串
6.关于时间
${time} get current date # 获取当前时间
${time_stamp} convert date ${time} epoch # 转化为原始时间戳
${time_stamp2} evaluate int(round(${time_stamp}*1000)) # 转化为毫秒级时间戳
根据我们以往的经验,简单来说我们写用例大概分为几个步骤:
好!那么我们根据上边的思路来试着编写一条用例吧!在这里呢我就以我们常用的比较简单的国际供应链履约调度系统的入库单接口为例:
1)首先我们来创建一个项目:在 File—>New Project,会出现一个弹窗我们按照自己的喜好来起就可以,这里我们创建的是入库单我们暂时叫它 “testIn” 吧,别忘记最重要的,类型我们需要选择 Directory;
这样我们的项目就创建完成了;
2)创建 case:
在 Robot 中我们首先需要创建一个 testSuite,因为在 Robot 中 case 都是挂在 Suite 下的,在项目上右击—>New Suite,这里需要输入一个 Suite 的 name,这里我们叫它 “test_Instock” 吧;
Suite 创建好后我们可以在 Suite 下创建 case 了,在 test_Instock—>New Test Case,case 名称我们可以叫做 “入库单下发成功”
3.截至目前,我们前期的创建工作就结束了,我们需要开始写 case 的灵魂了,在这里我们可以直接在表格中编辑;编写的过程中跟我们在 python 编写用例的过程是一样的,需要接口的信息,入参,及回参的校验;
因我们有很多其他类似接口,这里我们可以把发送 post 请求部分和校验返回参数部分单独以关键字的方式实现:test Instock—>New User Keyword,创建关键字,名称我们叫它 “发送 post 请求” 和 “校验返回参数” 吧!
这样我们可以再看下,抽离了关键字的用例,从一个大文件变成了三个小文件,更方便我们查看用例流程:
关键字抽离的 case:
“发送 post 请求” 关键字部分
校验返回参数” 关键字部分
当我们 case 的灵魂完整实现后,我们可以来执行一下看看拉,哇哦!执行报错了
在这里我们可以看到明显的报错,就不需要去 Report 里查看了,如果当我们的报错不能明显看到时,我们需要去 Report 里查看具体的报错信息,Report 会标记报错在哪一行,这样方便定位问题,言归正传,我们看到这个报错时没有发现 get current date 的主键,好我们去引入下这个库(具体引入库的讲解上边已经说过了哈)
5.引入完成后,我们再执行一遍,就这样我们的 case 顺利通过了
6.以下为脚本编辑器显示的上述用例内容:
在我们编写 case 的过程中,我们会遇到很多这样或那样的问题,我也总结了一些,大家可以做为参考:
1) 发送 post 请求,报错类型转换错误:
请求一共四个参数死活报错。。。
解决方案:
首先第一种尝试,将所有参数放在一个字典里,No!:
第二种尝试,将参数拿出来单独赋值,发现不行!!:
第三种尝试,将值写成字符串格式给 ${data},然后再将 ${data}赋值给 post 请求的 data,不行!!:
第四种尝试直接将字符串赋值给 post 请求的 data,艾玛,过了:
2.cmd 输入 pip list 报错:
解决方案:一般 9.0.X 版本会出现如上提示,需要定义输出格式;
pip list —format=legacy 错误木有了
作者:京东物流 亢永超
来源:京东云开发者社区 自猿其说 Tech 转载请注明来源