API接口自动化示例
本章节内容:应用LUCKYFRAME来编写API测试用例的过程。
1 、添加项目名称和归属部门
进入系统管理--->项目管理--->点击添加,填写“项目名称”、“归属部门”、“项目标识”,点击“确定”,如图下图。备注:归属部门在系统管理--->部门管理模块设置。
2、添加协议模板
说明:协议模板是什么?是构造接口请求必须遵守的基础约定;不理解先放一边,重点是要知道一个接口对应一个协议模板。
进入测试管理--->协议模板--->点击添加,选择项目名称,模板名称填写接口名称,消息头域(一般访问接口的时候需要先登录,那么此处就需要填写,格式看示例要求)。其他选项可以先默认,点确定,完成一个协议模板的添加。如下图。
勾选模板类型,点击“模板参数”,如下图。
RAW标签页面,填写格式遵循JSON格式请求,如下图。(此处不懂JSON格式需要去百度一下)。
FORM标签页面,各种参数类型填写格式,如下图。
String:字符串
Json对象:{"endDate":
"string","startDate": "string" }
JsonNARR:[{"endDate":
"string","startDate": "string" }]
File对象:D:\F盘\01tlw\04接口测试\1.jpg(即LuckyFrameClient本地磁盘上传文件的路径)
Number对象:1.2.3……
Boolean对象:true or false
注意:填写RAW标签和FROM标签,只填写其中一种。
3、添加用例模块
进入测试管理--->用例模块--->选中项目名称,点击新增,填写父模块、模块名字、显示顺序、备注。点击“确定”,完成模块的添加,如下图:
4、用例管理
进入测试管理--->用例管理--->点击添加,如下图:
选择项目名称、用例模块,填写用例名称、用例类型选择“HTTP接口”,点击“确定”如下图:
勾选用例名称,点击“用例步骤”,如下图:
用例步骤页面,如下图:
4.1步骤编辑页面基本使用方法
4.1.1包|定位路径
填写接口的地址,如:http://10.0.7.105/validation/rest/quality
4.1.2方法|操作
此处单击可以选择系统内置的一种方法名,如:HttpClientGet
4.1.3参数
填写接口参数,传入多个参数用|分隔,参数名称和参数值用#分隔,如:id#1|name#test
4.1.4步骤动作
填写该行用例步骤执行后的等待时间;等待1秒格式,如:1#wait
4.1.5预期结果
此处填写接口预期的返回值;模糊匹配返回值中是否有200,如:%=200
4.1.6类型
默认http接口
4.1.7扩展字段
此处单击可以选择已添加过的协议模板,如:新增质检模型接口
4.1.8示例
4.1.9调试
点击调试按钮,进入用例调试页面,如下图
注意调试时要先进入系统管理--->客户端管理--->点击添加客户端,且状态正常,如下图:
客户端添加完成后,点击“调试”按钮,进入用例调试页面,如下图:
根据用例调试页面的日志,可以查看用例的执行结果是否正常,到此完成接口用例编写的介绍。
4.2步骤编辑页面进阶使用方法
4.2.1参数引用以及传递
将用例里面前面步骤的执行结果,传递至后续步骤的包路径、方法、参数、预期结果中当成参数;
赋值局部变量:$=value
引用:@value用例里面前面步骤的执行结果,传递至后续步骤的包路径、方法、参数、预期结果中当成参数; 当您需要引用项目中定义的公共参数时,直接使用@变量名引用即可。
赋值全局变量:$A= value
赋值局部变量$=value,作用域只在单条用例内的步骤间进行传递,而关键字$A=value支持作用域扩展到整个任务执行的生命周期内。只要是同一个调度任务内,都可以对此变量进行引用以及传递。
注意:
当遇到参数值里面本身带了字符@的,请使用@@来转义。比如参数值是一个邮箱地址XX@qq.com,那么这时候你应该写成XX@@qq.com.
当遇到参数值里面本身带了字符|的,请使用\\|来转义。比如有一个参加值是:tfwfsf|ysggfw|ggsvs,那么这时候你应该把这个参数写成这样:tfwfsf\\|ysggfw\\|ggsvs
示例:
4.2.2预期结果精确匹配
将用例里面【方法|操作】执行的结果,与【期望的结果】字段里面的字符串进行精确匹配;
直接在预期结果里面填写需要匹配的字符串即可。
4.2.3预期结果模糊匹配
将用例里面【方法|操作】执行的结果,与【期望的结果】字段里面的字符串进行模糊匹配;
模糊匹配:%=value
示例:
4.2.4正则方式结果模糊匹配
将用例里面【方法|操作】执行的结果,与【期望的结果】字段里面的字符串通过正则表达式进行匹配;
模糊匹配:~=value
正则表达式写法,请自行百度,不再累述。针对多个结果模糊匹配,非包含字符匹配都可以用此种方式,非常灵活。
4.2.5步骤间添加休眠时间
步骤执行完成后,等待N秒,在【步骤动作】中加上“10#Wait” 10表示10秒;
示例:
4.2.6随机参数值引用
目前支持两种模式,一种是随机数字,一种是获取当前时间的指定格式
随机数字引用关键字参数:@{random[开始数字][结束数字]}比如你想随机一个指定区间的手机号码,如:137XXXX8888可以在引用参数的时候这样写:137@{random[1000][9999]}8888
获取当前时间指定格式引用关键字参数:@{timenow[日期时间格式]}比如:想生成这样一个字符串 现在时间是:2019-01-25 11:13:36可以在引用参数的时候这样写:现在时间是:@{timenow[yyyy-MM-dd HH:mm:ss]}其中[yyyy-MM-dd HH:mm:ss]中的参数与JAVA类SimpleDateFormat的格式用法是一致的,里面的间隔符(比如-,: )可以删除或是用其他任意字符替换。如果格式不正确的话,会使用默认格式进行引用。
下面做下简单的说明:
yyyy代表年份
MM代表月份
dd代表日期
HH代表24小时制
hh代表12小时制
mm代表分钟
ss代表秒
4.2.7接获取JSON串中KEY值的方法
4.2.7.1客户端中内置驱动增加直接获取JSON串中KEY值的方法
包路径:luckyclient.driven.SubString
方法名:getJsonValue
参数:@loginrespone|accessToken|1
备注:
@loginrespone:JSON字符串
accessToken:JSON字符串中需要获取值的key
1:key值索引(序号)
4.2.7.2步骤动作新支持的关键字。
key[序号]#getJV获取测试结果中JSON对象中,指定KEY的值,比如测试结果返回:{["name":"张三","age":"18"]["name":"李四","age":"17"]},如果想获取李四的年纪 在步骤动作中需要这样写age[2]#getJV获取到以后,会拿到17这个值,给预期结果中的关键字进行判断,是匹配,还是赋值都可以。
[startstr][endstr]#subCentreStr截取测试结果中指定开始字符以及结束字符的中间字符串,比如测试结果返回:{["name":"张三","age":"18"]["name":"李四","age":"17"]},如果想获取李四的年纪 在步骤动作中需要这样写[age":"]["]}]#subCentreStr获取到以后,会拿到17这个值,给预期结果中的关键字进行判断,是匹配,还是赋值都可以。
[startnum][endnum]#subCentreNum截取测试结果中指定开始位置以及结束位置的中间字符串,比如测试结果返回:{["name":"张三","age":"18"]["name":"李四","age":"17"]},如果想获取李四的年纪 在步骤动作中需要这样写[45][46]#subCentreNum获取到以后,会拿到17这个值,给预期结果中的关键字进行判断,是匹配,还是赋值都可以。
[rgex][index]#subStrRgex通过正则截取测试结果中的字符串,[rgex]在[]中填写正则表达式,[index]在[]中填写匹配到字符串的序号,拿到截取的值以后,给预期结果中的关键字进行判断,是匹配,还是赋值都可以。