1、422022 年 12 月 第 6 期 通信管理与技术Technical&Operation Exchanges 技术业务交流1RobotFrameWork 简介Robot Framework(下文简称 RF)是一种基于Python 的可扩展关键字驱动的自动化测试框架,通常用于接口自动化测试、Web 应用自动化测试以及软件版本发布时的端对端验收测试1。作为一种技术与应用相对独立的框架,RF 具有完善的模块化结构,主要包括:测试驱动模块、测试用例文件解析模块、测试调度模块,组件加载模块、测试报告生成模块,其模块化结构如图 1 所示2。图 1RobotFrameWork 测试框架结构与其它自动化测
2、试工具相比,RF 的优点主要体现在以下几个方面:语法结构简单,通过图形化编译工具 RIDE 统一了测试脚本格式,利用更直观的表格式语法,使得测试脚本的编写和管理更加简单易懂,实现了不用写代码也能完成自动化测试;关键字驱动,RF 框架自带的内置类库 BuiltIn 提供了类型转换、变量设置、条件判断等关键字 3,同时支持添加多种外部类库资源,被应用较多的类库主要包括 Selenium2Library、RequestsLibrary、DatabaseLibray、requestsLibrary、Collections、AutoItLibrary、OperatingSystem;数据驱动,通过外部数
3、据集合(例如:.xls/.csv/table)来驱动测试用例的执行,通过参数的设定与传值可以减少测试用例中的代码冗余,同时可以保证测试用例的高效执行;行为驱动,根据测试用例的设计要求可以利用现有关键字及多种关键字组合成新的关键字来满足测试用例执行需求;测试结果多种样式展示,测试结果可以通过“Report”和“Log”两种样式进行展示,包括整个测试套件和单个用例的测试结果都采用 HTML 的格式展示,便于测试人员分析测试结果;持续集成,基于 RF的自动化测试过程可以通过 Git、Jenkins 等工具实现自动化测试的持续集成化,设置定时触发、指定测试结果输出路径等一系列动作实现自动化测试的闭环管
4、理。2接口自动化测试接口是指系统各模块之间,或者系统与系统之间进行交互的途径,常见的接口协议有 HTTP 协议、WebService 协议或者 Tuxedo 协议。接口测试属基于 RobotFrameWork 接口自动化测试方法研究 中国联合网络通信有限公司哈尔滨软件研究院 史冰全/文摘要:随着互联网技术的高速发展,计算机软件的变化呈现出规范化、规模化、快速迭代的新趋势,如何保证软件质量、提高软件测试效率成为业界关注的问题。在过去的软件测试过程中,通常需要测试人员手动完成一些重复性的测试任务,在降低了工作效率的同时也增加了出现错误的风险。近年来自动化测试技术被人们所了解、熟知和应用,改变了人们
5、对传统测试流程的看法。本文讨论了基于 RobotFramework 测试框架的接口自动化测试方法,列举了在使用 RobotFramework 框架过程中的数据分离、资源分层等实用性技巧,以及自动化测试脚本的持续集成方法,为快速掌握 RobotFramework 接口自动化测试提供了参考。关键字:接口自动化测试;RobotFramework;关键字驱动中图分类号:TP29文献标识码:B文章编号:1672-6200(2022)06-0042-05通信管理与技术 2022 年 12 月 第 6 期 43技术业务交流 Technical&Operation Exchanges于灰盒测试范畴,其本质是通
6、过模拟发送一个请求(Request)报文到服务端,服务端对请求报文进行判读并返回一个响应(Response)信息,通过对响应(Response)信息的解析,进一步判断是否与发给服务端的 Request 对应的返回信息相同,从而验证业务逻辑是否正确实现。由于接口测试与前端 UI 属于松耦合(或无耦合),因此通过采取自动化方法测试接口,将提高接口的测试效率和回归测试的复用率,减少人工测试的任务量。自动化测试是指通过执行某种程序设计语言编制的测试程序,控制被测软件的执行过程,模拟手动测试的步骤,完成半自动或者全自动测试 4。正如软件生命周期一样,自动化测试同样具有生命周期,其主要包含六个部分,如图
7、2 所示 5。3基于 RF 的接口自动化测试3.1 接口自动化测试设计RF 接 口 自 动 化 测 试 主 要 应 用 到 Requests、RequestsLibrary、Builtln、DatabaseLibrary 类库,通过测试数据与测试脚本的分离,实现测试脚本参数化,提高了测试脚本的利用效率。3.2 测试数据的分层管理3.2.1 测试数据种类在接口测试过程中大体上分为两种形式的测试数据:测试引用数据(Test reference data):是指一些公共性的数据,如报文头中的 APP_ID、TIMESTAMP、TRANS_ID、TOKEN 等等;测试专有数据(Test specifi
8、c data):是指对测试行为、结果产生直接影响的特征数据,如入参中的业务数据等等6。RF 中的测试数据分层存储不仅可以方便测试数据的管理,同时也减少了测试过程中出现数据的冗余。3.2.2“.py”文件分层引用在利用 RF 进行接口自动化测试过程中,可以采用创建“.py”文件的形式来分层管理测试数据,例如将多个接口创建在一个工程中,那么“引用数据.py”一般置于整个工程的内部,供其内部的所有接口所使用,其中包含接口地址信息、报文头参数信息以及响应报文中预期结果信息等;“专有数据.py”一般置于每个子接口工程的内部,其中包含了该接口不同场景下的特征数据等。在 RIDE 中可通过“Variable
9、s”功能分别添图 2 自动化测试生命周期图 3 RF 接口自动化测试设计图442022 年 12 月 第 6 期 通信管理与技术Technical&Operation Exchanges 技术业务交流加已创建好的.py 文件,其中 External.py 作为引用数据添加在 Training 目录下,A_Internal.py 为接口 A的专有数据添加在 A 目录下。通过以上操作,仅仅是将已创建好的分层.py 文件引入到了测试工程中,当在测试用例执行过程中需要应用.py 文件中的具体参数值时,还需要在测试用例中利用 BuiltIn 类库下的关键字import variables和evaluat
10、e来执行导入这两个.py 文件,下面的脚本格式可以实现导入.py 文件的过程。$variable evaluate os.path.abspath(“External.py”)os import variables$variable import variables$CURDIR/A_Internal.py3.2.3 参数值的传递与应用基于 RF 的接口自动化测试过程,使用$变量名 类型的参数进行传值不仅可以高效地管理和维护测试数据,同时也保证了测试资源的高效复用。RF 框架下的测试资源均可以设置可变参数来存储数据值,例如上文中提到的Prepare1、query1、message1,其中包括入
11、参参数以及返回值参数,这样就使得整个测试资源丰富且灵活。在执行测试用例过程中,调用这些测试资源时就需要按照资源中参数已有的顺序依次传值,在保证一一对应的前提下注意参数的名称无重复。如图 3-2 中Prepare1设置了 5 个参数,其顺序分别为$num_sql、$POOL_ID、$NUM_H3、$AREA_CODE,以及一个返回参数$SERIALl_NUMBER,当在测试用例中调用Prepare1时,需要按照顺序依次给予传值,如图 4 所示。图 4 参数顺序3.3 测试脚本管理3.3.1 测试脚本创建在接口自动化测试过程中,可以建立独立的套件(Suite)层、资源(Resource)层,这样不
12、仅保证了每一部分的独立性,同时也满足了各个层内部的扩展性及复用性。例如:在资源(Resource)层可以自定义多样式的测试关键字,在套件(Suite)层创建多个测试案例(case),通过调用资源(Resource)层已封装好的关键字,这样不仅提高了测试精准度,而且还实现了测试资源的高度复用。如图 5 所示,工程Training 下包含了 A 和 B 两个接口子工程,A 子工程通过功能键“New Suite”创建两个测试套件:正常场景、异常场景,通过功能键“New Resource”创建三个测试资源:预置条件.txt、消息报文.txt、数据检查.txt。图 5 资源分层3.3.2 自定义关键字在
13、 测 试 资 源 中 可 通 过 功 能 键“New User KeyWord”用已有的关键字重新自定义关键字,例如本例中的测试资源层“预置条件.txt”,利用“Connect To Database Using Custom Params”“query”“set variable”“Disconnect From Database”等关键字组合成新的关键字“Prepare1”,通过“Prepare1”实现与数据库交互查询并返回满足测试需要的测试 数 据,如 图 6 所 示。同 理,测 试 资 源 层“数 据检查.txt”,利用“Connect To Database Using Custom
14、 Params”“query”“should be equal as numbers”“Disconnect From Database”等关键字组合新的关键字“query1”,利用关键字“query1”可以对比检查接口调用成功后业务数据的状态更新情况,如图 7 所示。图 6 关键字 Prepare1通信管理与技术 2022 年 12 月 第 6 期 45技术业务交流 Technical&Operation Exchanges图 7 关键字 query13.3.3 组织请求信息接口测试需要明确接口的相关信息,例如接口调用地址url、请求发送方式(POST/GET)、入参报文头、报文体等,通过模
15、拟发起接口请求调用,根据返回结果的响应报文来判读接口的准确性,主要检查项涉及到响应报文中的字段内容、字段值、数据流转状态等。基于 RF 的接口测试过程中请求报文的拼写需要注意以下几方面:首先,接口规范是准则,经评审修正后的接口规范作为理解业务需求的指导性文件,是测试人员在拼写请求报文时的主要参考依据。其次,关键字的选取,RF 的类库中提供了很多已封装好的关键字,例如“create dictionary”“create list”是 BuiltIn 类库下的关键字,其主要作用是通过创建目录与列表的形式来存储以键值对样式存在的输入参数名和对应的数据值。“Create session”“to jso
16、n”“post request”关键字是 RequestsLibrary 类库下的关键字,其作用主要是创建接口访问地址 url、转换报文格式以及发送请求,如图 8 所示。其三,报文拼写顺序,通常根据报文头(HEAD)、附加项(ATTACHED)、报文体(BODY)的三部分内容,分别按照从内层到外层、关键字驱动、变量传值的方法逐级定义。如图 9 所示,变量$HEAD 包含四个参数值,变量$ATTACHED 包含一个参数值,变量$BODY 包含一个参数值 REQ,而 REQ 由变量$REQ 组成,变量$REQ 由 4 个参数组成,其中PARA 参数由变量 PARA 组成,变量 PARA 由PARA_ID 和 PARA_VALUE 组成。最终由 HEAD、ATTACHED、BODY 三部分组成了变量$message来存储完整的请求报文信息,通过关键字“to json”将$message 转换成 json 串格式的变量$request,再通过关键字“post request”向指定的接口地址发送请求信息。图 8 请求报文中关键字图 9 请求报文拼写3.3.4 解析响应报文通过模拟服务调用发送请