浅析RobotFramework工具的使用 | 京东物流技术团队

发布时间 2023-12-29 10:09:35作者: 京东云开发者

1 简介

最近几年越来越多的公司都开始进行自动化测试的设计和布局了,自动化,顾名思义就是把以人为驱动的测试行为转化为机器执行的一种过程,并经常用于回归测试中,市面上也存在很多开源的自动化测试的工具和理论知识,今天我要说的是RobotFramework这个工具;

我也是在偶然的机会中接触到了RobotFramework这个工具,并且觉得形式很新颖,一下就被吸引了,RobotFramework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行,下面我们就进入正题吧!

2 工具分析

1.当我们把工具安装完成后,会在我们的桌面看到一个小图标,我们以后编写用例,就依赖他了(有感兴趣的小伙伴可以私聊我要安装过程,在此就不赘述了):

2.当我们双击这个图标后,会进入一个“赏心悦目”的编辑界面;

  • 项目编辑区会展示我们已经创建的项目、用例和已经创建的关键字资源;这里的关键字可以为我们以后的用例带来很多方便,适用于写通用的逻辑,方便我们在用例编写时遇到相同的逻辑去调用;
  • 编写用例可以通过脚本编辑区与表格编辑区;
    • 当鼠标定位到某条case时,会展示表格编辑区:和脚本编辑区一样只是一种是通过编写脚本的方式实现,一种是通过excel表格的方式来实现用例的编写;-

    • 脚本编辑区:不论通过表格编辑还是通过脚本编辑最后都会在脚本编辑区生成对应脚本

  • 当鼠标定位到项目上时,在右侧部分会展示我们编写用例所使用到的case和Resource文件;
  • 用例执行区,展示在右侧Run的部分,通过这个部分我们可以执行我们的用例,也可以查看生成的报告、log等内容;

3.工具适用场景
个人认为比较适合接口自动化测试场景;

4.工具支持jenkins平台整合
jenkins是一个功能非常强大的持续集成和持续交付的开源项目,几乎可以处理任何类型的自动构建或者持续集成,所以它必然是可以结合RF进行自动化测试的部署和调度,具体实现步骤大体如下:

  • 下载jenkins
  • 添加节点
  • 安装RF插件
  • 配置job运行测试

注: 具体实践本次分享暂不展开;

优劣势分析

优势:

  • 通过使用关键字驱动测试(KDT)方法简化了自动化测试过程,方便测试人员创建易读的测试。
  • 测试数据语法简单易用。
  • 生态系统丰富。由各种通用测试库和工具组成,这些工具都是作为独立项目开发的。
  • 具有高度可扩展性。

劣势:

  • 仅支持python2.的版本;
  • 界面反应速度慢,经常卡死;
  • 导入测试库有时会异常;

3 关键字介绍

1.在编写case过程中,进行了一些关键字的梳理,关于变量,详情如下:

  • Set Suite Variable 使用此关键字设置的变量在当前执行的测试套件的范围内随处可用
  • Set Global Variable 使用范围:在所有测试套件中都可以使用该关键字定义的变量。
  • Set Test Variable 使用范围:使用此关键字设置的变量在当前执行的测试用例的范围内随处可用
  • Set Variable 使用范围:该关键字主要用于设置标量变量。此外,它可用于将包含列表的标量变量转换为列表变量或多个标量变量。建议在创建新列表时使用创建列表。使用此关键字创建的变量仅在创建它们的范围内可用

2.excellibrary方法总结:

  • Open Excel 打开Excel文件
  • Get Row Count 获取行数
  • Get Column Count 获取列数
  • Get Row Values 获取某一行的值
  • Get Column Values 获取某一列的值
  • Read Cell Data By Coordinates 通过列行编号获取值
  • Read Cell Data By Name 按名称读取单元格数据

3.Run Keyword If

  • 函数释义:如果给出的判断条件满足,就执行给出的关键字。
  • 函数结构范例:
    • Run Keyword If 判断条件 其他关键字
    • … ELSE IF 判断条件 其他关键字
    • … ELSE 判断条件 其他关键字

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)) #转化为毫秒级时间戳

4 案例分享

根据我们以往的经验,简单来说我们写用例大概分为几个步骤:

  • 创建一个项目;
  • 在这个项目下加入我们要实现的case;
  • 实现这个case,加入case的灵魂;
  • 执行这个case;
  • 查看case结果;

好!那么我们根据上边的思路来试着编写一条用例吧!在这里呢我就以我们常用的比较简单的国际供应链履约调度系统的入库单接口为例:

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.以下为脚本编辑器显示的上述用例内容:

5 问题总结

在我们编写case的过程中,我们会遇到很多这样或那样的问题,我也总结了一些,大家可以做为参考:

1)发送post请求,报错类型转换错误:

请求一共四个参数死活报错。。。

解决方案:
首先第一种尝试,将所有参数放在一个字典里,No!:

第二种尝试,将参数拿出来单独赋值,发现不行!!:

第三种尝试,将值写成字符串格式给${data},然后再将${data}赋值给post请求的data,不行!!:

第四种尝试直接将字符串赋值给post请求的data,艾玛,过了:

2.cmd输入 pip list 报错:

解决方案:一般 9.0.X 版本会出现如上提示,需要定义输出格式;

pip list —format=legacy 错误木有了

作者:京东物流 亢永超

来源:京东云开发者社区 自猿其说 Tech 转载请注明来源