接口测试其实基本知识已经学习了很久,但是只限于对基础的学习,以前总觉得一涉及到代码编写,定制开发就是遥不可及的目标,总不愿意多踏出去一步,其实在部门同事的升级替代下,有了更进一步的深入了解,发现写代码也是一项很愉快的事情,只要你多进一步,就会发现自己是可以去做的。
今年初给自己的目标是必须完成对代码编写的恐惧,已经掌握了大量的理论知识,只差一步的实践必须进行实践。自己的想法首先是在博客园了解测试圈大神们的博客,了解了接口测试可以通过哪些方式进行实现。比如主流的接口测试框架:RobotFramework、Jmeter、BDD、HttpRunner、gauge、Unittest+Request+HTMLRunner【推荐】。
具体的可以参考虫师的博文:https://www.cnblogs.com/fnng/p/9919803.html
我们做接口测试就是为了能更好的把项目管起来,可以实现系统化,而不是为了增加人力。接口文档是接口测试来源的依据,接口文档主要包括的内容:
接口测试经常遇到的bug和问题:
首先需要认识RF的一些基本语法,我们常用的代码都是有限的,所以我们需要先清楚代码的本身意思。
1.测试用例编写案例 *** Settings *** //用于引用库、资源 Library DatabaseLibrary Library RequestsLibrary Resource 公共资源.robot Library ExcelLibrary Library Collections *** Test Cases *** //用于编写测试用例 新增资源树节点 //用于编写测试用例名称 log robot framework //关键字、字符串之间间距为四个空格、前面为4个空格 Output: C:\Users\output.xml //XML格式记录测试结果 Log: C:\Users\log.html //测试日志,记录每一步的执行情况 Report: C:\Users\...\AppData\Local\Temp\report.html //偏向测试报告,总体展示测试用例的执行情况
keyword关键字: settiong 部分:参数arguments 是形参,在调用该关键字的时候可以传入对应的实际参数; return value值是关键字返回的值,调用关键字时可以使用变量来调用该返回值;
2.循环有3种模式: :FOR 循环变量 IN RANGE end; :FOR 循环变量 IN RANGE start end [step]; :FOR 循环变量 IN a[b,c,d.....] eg: :FOR ${i} IN RANGE 10; :FOR ${i} IN RANGE 1 10 2; :FOR ${i} IN 1,2,3,4,5 退出循环: EXIT FOR LOOP 3.分支:分支主要是通过关键字实现 run keyword if...ELSE(ELSE是另外必须大写,RF不区分大小写) RUN KEYWORD if 条件1 do action1 ... ELSE IF 条件2 do action2 ... ELSE IF 条件x do actionx ... ELSE do action N
#字符串截取 ${val2[2]} //截取变量的第三个字符 ${val2[0:3]} //截取变量的第一个到第三个字符
@{val}[0] //截取列表中的第一个值 #变量运算用Evaluate ${val2} Evaluate ${val1}+1 #list变量,获取值有2种方式:@{变量名}[index] 、${变量名[index]} #一维list @{list} create list a b c log @{list}[1] log ${list[1]} #二维list @{listA} create list 1 2 @{listB} create list 3 4 @{listC} create list ${listA} ${listB} 5 log @{listC[1]}[1] log ${list[1][1]}
RF接口自动化测试的核心就是关键字开发。在做接口自动化测试的时候,最重要的是数据与业务分离,实现测试脚本参数化,提高测试脚本的可重用性。
在开始编写代码时,基本的接口测试脚本开发思想已经实现。数据与脚本分离,我们如何获取数据?如何进行用例编写?可以进行拆分一一进行编写。
在进行RF接口自动化测试的时候,我们会把集中开始编写的用例先统一进行编写。比如测试数据准备的数据获取。一个接口有很多测试用例,如何进行单个用例执行?如果进行单接口的测试用例执行?如何连接数据库?这些都是在编写逻辑时所有接口都可以用到的,所以我们可以单独提取出来作为公共资源进行关键字自定义编写。
数据准备:
Excel用例数据里,一个sheet对应一个接口,sheet内容里包括用例名称、是否执行、断言内容、执行结果、是否通过、参数名称。
用例数据一行代表一个用例。一个接口可以分正向用例和逆向用例,把一些常用的接口用例进行设置。(根据自己的实际情况进行编写)
Excel中的数据准备:
需求数据:本次测试的是分页查询的功能,不需要进行参数编写
查询用例编写分2个方向进行编写:一个是正向流程,一个是逆向流程。
查询结果:就是验证查询结果是否能返回正确的数据。
数据准备脚本编写:
RF针对Excel有个库ExcelLibrary库,通过操作数据文件实现数据与脚本的分离,引入ExcelLibary库,操作Excel文件。可以通过2个脚本实现获取表头标题和入参标题、表头标题对应的值和入参标题对应的值。
excellibrary安装:pip install robotframework-excellibrary
Excellibrary库常用关键字:
Excellibrary使用注意事项:
excel文件的后缀为.xls结尾
获取表头标题 (用例名称、是否执行、断言内容、执行结果、是否通过)和入参标题(就是参数名称):
脚本最终实现的目的:
@{confParaName}列表用于保存前5个固定的标题,包括用例名称,是否执行,断言内容,执行结果,是否通过。
@{confDataName}列表用于保存接口的入参名。
#获取表头标题(用例名称、是否执行、断言内容、执行结果、是否通过)和入参标题(就是参数名称): *** Settings *** Library ExcelLibrary Library RequestsLibrary Library Collections Library requests Library DatabaseLibrary Library String *** Variables *** ${host} http://10.100.xx.xxxx:18292
#打开excel文件 open excel E:\\test.xls #通过行列坐标获取xcel内的值,比如这里的取值是第一行第二列的值. ${uri} Read Cell Data By Coordinates test 1 0 set global variable ${uri} #获取行数统计,比如有多少行. ${rowCount} Get Row Count test #获取列数统计,比如有多少列. ${columnCount} Get Column Count test set global variable ${rowCount} set global variable ${columnCount} @{confParaName} create list @{confDataName} create list set global variable @{confParaName} set global variable @{confDataName} : FOR ${colun} IN RANGE 5 ${TEMP1} Read Cell Data By Coordinates test ${colun} 1 Append to list ${confParaName} ${TEMP1} : FOR ${colun} IN RANGE 5 ${columnCount} ${TEMP2} Read Cell Data By Coordinates test ${colun} 1 Append to list ${confDataName} ${TEMP2}log
结果显示:
获取表头标题对应的值和入参标题对应的值:
脚本最终实现的目的:
&{ConfParaDict} 列表用于保存标题下对应的数据。
&{ConfDataDict}列表用于保存接口的入参名下对应的数据。
//通过字典的方式用于存储实际数据 &{ConfParaDict} Create Dictionary &{ConfDataDict} Create Dictionary @{ConfPara} Create List @{ConfData} Create List Set Global Variable &{ConfParaDict} Set Global Variable &{ConfDataDict} Set Global Variable @{ConfPara} Set Global Variable @{ConfData} : FOR ${colun} IN RANGE 5 \ ${TEMP3} Read Cell Data By Coordinates test ${colun} 2 \ Append to list ${ConfPara} ${TEMP3} \ set to Dictionary ${ConfParaDict} @{confParaName}[${colun}] ${TEMP3} log ${ConfPara} log ${ConfParaDict} : FOR ${colun} IN RANGE 5 ${columnCount} \ ${col} Evaluate ${colun}-5 \ ${TEMP4} Read Cell Data By Coordinates test ${colun} 2 \ Append to list ${ConfData} ${TEMP4} \ set to Dictionary ${confDataDict} ${confDataName[${col}]} ${TEMP4} log ${ConfData} log ${confDataDict}
实现层和断言层:
接口冒烟测试方法
https://www.ituring.com.cn/article/273457
原文:https://www.cnblogs.com/wendyw/p/14366316.html