RF接口自动化测试实践与案例解析
"该文是关于使用Robot Framework (RF) 进行接口自动化测试的案例分析,涵盖了如何构建模型、创建数据集,并重点讲解了如何利用for循环进行一系列的测试操作。文中引用了多个库,如RequestsLibrary、Collections、SSHLibrary、HttpLibrary以及DatabaseLibrary,同时引用了环境变量资源env.txt和业务关键字资源业务关键字.txt,用于测试用例的执行。" 在RF接口自动化测试中,首先需要了解Robot Framework。Robot Framework 是一个通用的关键词驱动测试框架,适用于自动化各种测试任务,尤其适合接口和端到端的Web应用测试。在这个案例中,我们看到测试设置部分(Settings)引入了一些关键库: 1. **RequestsLibrary**:这是RF的一个扩展库,用于发送HTTP请求,进行接口测试。在这里,它被用来模拟与服务器的交互,比如GET、POST、PUT等请求。 2. **Collections**:这个库提供了对Python集合操作的关键词支持,如列表的创建、修改、查找等,可以方便地处理测试数据。 3. **SSHLibrary**:用于进行SSH连接,如果测试场景涉及到远程服务器的管理或数据交互,这个库将非常有用。 4. **HttpLibrary.HTTP** 和 **HttpLibrary**:这两个库可能代表了不同的版本或者特定的HTTP操作,如HTTP请求的详细配置。 5. **DatabaseLibrary**:用于数据库操作,例如查询、插入、更新数据,以验证接口的数据库影响。 测试用例部分(TestCases)展示了如何定义具体的测试场景。例如,“新增数据集”这个测试用例,它创建了一个名为“api”的session,可能用于模拟API调用。然后,它设置了变量json,包含了一组JSON数据,这些数据可能是接口请求的payload,用于测试数据的添加。 `createsessionapi${sit}` 表示创建一个名为“api”的会话,并将变量${sit}作为参数,这通常是服务器地址或API的基础URL。 `${json}SetVariable{"system_id":"olap",...}` 这里创建了一个JSON对象,包含了系统ID、数据库名、表名、类型等字段,用于接口调用的数据传递。 在实际测试中,可能会使用for循环来遍历数据集,对每条数据执行相同的操作,确保接口处理批量数据的正确性。for循环在RF中非常常见,可以用于迭代列表、字典或其他可迭代对象,以实现数据驱动测试。 例如,如果要对多个用户进行注册测试,可以使用for循环遍历用户列表,每次迭代时将当前用户信息插入到请求中,然后检查响应状态和返回结果,确保每个用户都能成功注册。 这个案例展示了如何使用Robot Framework进行接口自动化测试,包括环境设置、数据准备、接口调用和循环遍历,对于理解RF的接口测试流程具有很好的参考价值。
*** Settings ***
Library RequestsLibrary
Library Collections
Resource env.txt # 环境变量
Library SSHLibrary
Library HttpLibrary
Library HttpLibrary.HTTP
Library DatabaseLibrary
Resource 业务关键字.txt
*** Test Cases ***
新增数据集
create session api ${sit}
${json} Set Variable {"system_id": "olap","database": "olap","tablename": "test_day_data_0119","type": "FACT","ide_job_id": "1040874","granularity": "P1D","ttl": 10,"meta": {"dimensions":[{"dimension": "id","is_time": false,"is_key": false,"is_multivalue": false}, {"dimension": "trans1","is_time": false,"is_key": false,"is_multivalue":false}, {"dimension": "province","is_time": false,"is_key": false,"is_multivalue": true}, {"dimension": "trans2","is_time": false,"is_key": false,"is_multivalue": false}, {"dimension": "money1","is_time": false,"is_key": false,"is_multivalue": false}, {"dimension": "custname","is_time": false,"is_key": false,"is_multivalue": false}, {"dimension": "booksnumber","is_time": false,"is_key": false,"is_multivalue": false}, {"dimension": "version__","is_time": false,"is_key": false,"is_multivalue": false}, {"dimension": "date","is_partition": false,"is_time": true,"time_format": "yyyy:MM:dd HHmmss","is_key": false,"is_multivalue": false}, {"dimension": "dates","is_partition": true,"is_time": true,"time_format": "yyyyMMddHHmmss","is_key": false,"is_multivalue": false}],"measures": ["sales"]},"is_timeline": true,"back_start": 2,"back_end": 1}
${result} post request api /api/bigquery/datamanager/migrate data=${json}
log ${result}
should be equal as strings ${result.status_code} 200
log ${result.text}
${dict} Set Variable ${result.json()}
#以下断言
${error_msg} get from dictionary ${dict} error_msg
should be equal ${error_msg} success
#校验数据库
连接数据库 ${database} ${user} ${passwd} ${host}
${q_result} query select * from bigquery_dataset \ where tableName='${tablename}'
${q_result_tostr} convert to string ${q_result}
should contain ${q_result_tostr} ${tablename}
${id} set variable ${q_result[0][0]}
log ${id}
\ sleep 10
\ ${rc} Row Count SELECT * from bigquery_task where relationId ='${id}'
\ run keyword if ${rc} > 0 sleep 30
\ ${sa} Run Keyword If ${rc} > 0 query SELECT * from bigquery_task where relationId ='${id}'
\ ... ELSE Continue For Loop
\ run keyword if '${sa[0][7]}' == 'SUCCEEDED' and '${sa[1][7]}' == 'SUCCEEDED' log 执行成功
\ ... ELSE FAIL log 状态错误
\ exit for loop
run keyword if '${rc}'=='0' RUN KEYWORDS log task表无数据,请检查
... AND FAIL
disconnect from database
查询数据集列表
${dict} Create Dictionary database=olap tablename=${tablename}
Create Session api ${sit}
${result} Get Request api /api/bigquery/migrate/list params=${dict}
Should Be Equal As Strings ${result.status_code} 200
#断言
${var1} get json value ${result.content} /error_msg
${var2} get json value ${result.content} /result
${var3} get json value ${result.content} /result/items
${var1todict} to json ${var3}
${gets} get from dictionary ${var1todict[0]} table_name
should be equal ${gets} ${tablename}
Comment ${demm} Evaluate demjson.decode(u'${result}') demjson
Comment ${tyype} evaluate type($result)
Comment log ${tyype}
新增维表
剩余8页未读,继续阅读
- 粉丝: 236
- 资源: 28
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构