接口概念
1. 接口是啥 ---传递数据的通道
接口测试:是测试系统组件间接口的一种测试
接口主要包括:同一个系统中模块与模块间的接口/前后端接口,另一个是跨系统平台的对接(内部接口、外部接口)
PS:属于黑盒测试(功能测试)、前端or中间部分
原理:模拟客户端向服务器发送请求,没有页面的
1.1 服务器的构架
测试左移:尽可能尽早地介入 ---代码完成功能,去测试 ---接口测试一个点
测试右移:确保产品上线后的正确运行,并建立一套机制,让线上的bug能尽早或先于用户发现并处理
1.2 接口测试:请求url+参数/条件,通过工具/代码实现
2. 接口分类 ---功能模块对外可以访问的地址
1)接口的分类:
内部接口:登录接口 注册接口 查询接口
外部接口:登录接口(第三方) 支付接口 ---产品之间的调用
2)常见接口类型/协议
HTTP类型/协议:通过GET或POST来获取数据,在数据处理上效率比较高
Webservice类型/协议:通过soap协议来获取数据,比起http来说处理更加复杂的数据类型,本质上也是http协议 【Websocket dubbo 这种类型的 → 后期做拓展】
3)http常见接口请求方式:get、post
两者区别:微信订阅号 https://www.cnblogs.com/zymnstlm/p/9479634.html
3. 为啥要做接口测试
1)如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案
2)接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试测试人力成本与时间,缩短测试周期,支持后端快速发版需求,接口持续集成是为什么能低成本高收益的根源。
3)现在很多系统前后端构架是分离的,从安全层面来说:
①只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证
②前后端传输、日志打印等信息是否加密传输也需要验证的,特别帅涉及到用户的隐私信息,如身份证、银行卡
4 如何查看接口
- 需求文档:必须学习和掌握的内容
- 抓包:F12 OR fiddler
5常见的http状态码:服务器返回的14种常见HTTP状态码_刻刻帝丶的博客-CSDN博客
200(正常):表示一切正常,到了服务器,并且服务器正常的响应了你的请求
302(临时重定向):指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出
304(未修改):表示客户机缓存的版本是最新的,客户机应该继续使用它,比如:前端Js ---性能测试
403(禁止):服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致
404(找不到):服务器上不存在客户机所请求的资源 --not found 地址错误
500(内部服务器错误):服务器的CGI、ASO、JSP等程序发生错误
504:超时
- 接口文档分析
1.接口测试流程/步骤---接口测试怎么做?
1)获取接口需求并分析
2)编写接口测试用例&评审测试用例
3)项目环境部署(公司有要求就做)
4)执行测试&工具选用
5)提交bug并跟进
6)单独需要整理接口测试报告(公司有要求就做)
知识储备:
- 软件测试基础知识:编写用例/设计方法
- Linux命令---查看日志
- Tomcat框架---查看日志
- 数据库知识/观察数据表中的数据流---分析业务
- 接口概念的掌握
- 工具的掌握:浏览器/插件/Jmeter/soapui原理及具体操作步骤
- 分析能力:需求业务/日志分析
2.获取接口需求并分析
2.1 获取接口需求、
1)开发提供接口文档
2)通过抓包工具fiddler或F12获取(前端界面),并找开发确认
2.2 分析接口内容 ---前程贷接口文档v1.3为例,开发提供
1)修订记录表:版本记录;追责;方便管理 ---看公司
2)接口概述:怎样组成,包含内容,返回结果,请求结果
①接口URL格式:http:// ip:port/futureloan/apiName --port端口号一般为1-65535
②请求头 (注:红色字体标记的请求头必须设置)
http常见请求:http常见7种请求 - zhouwenfan - 博客园
③响应体:为json对象,包含code、msg、data三个字段
Ps:请求体:请求头 响应头 响应体(响应内容/响应报文-response)
④通用返回码/错误码对照表:code=0表示成功,code>0表示失败 ---看开发定
⑤接口token鉴权
3)接口说明:关于每个功能的接口进行详细说明
注意: Json:{ “user_name”:”xxx”,”pwd”:”123666”}
xml标签:<user_name>xxx</user_name>
<pwd>123666</pwd>
用例包含:序号、接口模块、用例标题、请求头、请求方式(Get/Post)、接口地址、参数输入、期望返回结果、数据库结果、实际结果、备注
接口文档特殊数据类型:
- string字符串””
- int 整数
- float浮点数
- [1,2,3,4]列表
- {“age”:18,”title”:ceo} 字典!--json
- jmeter工具
- 接口测试工具介绍
Firefox插件 ---http requester---插件已经不维护,很多不能使用
Chrome插件 ---Postman---用的多
Soapui ---比较少用
Jmeter ---用的多,重点讲解 性能测试
Loadrunner ---性能测试 ---接口
代码实现【后面讲--0.02元的Python视频/Java】--python学前课
浏览器:http请求get请求方式
- Jmeter的基础使用详解
1)常用测试元件
测试计划: 默认
线程组: 并发用户数、并发时间、请求循环次数
采样器: 较常用HTTP请求、JDBC Request、soap/websrvice
监听器: 查看树结果
配置元件: http请求默认值、HTTP信息头管理器、JDBC Connection Configuration
断言: 响应断言。通过对比服务器返回的响应数据,判断请求是否成功
参数化: 用户定义参数、CVS Data Set Config、函数参数化
关联: 后置处理器:正则表达式、json表达式
2)补充知识:content-type
数据传递格式:
Json:{键值对}
{“mobile_phone”:”1886666888”,”password”:”lemon123456”}
xml:一对标签包裹传递的数据
<mobile_phone>1886666888</mobile_phone>
<password>lemon123456</password>
form表单:application/x-www-form-urlencoded
禅道提交bug【后面抓包演示+脚本演示】
- 参数化的三种方式(必问)
${变量名}
① 配置元件:用户定义的变量
② 配置元件:CSV Data Config
③ 函数助手中的函数获取参数值 _Random函数 _RandomString函数
例如:y=a+b 去找a,b的值可以为(0,8)(1,7)(2,6)(3,5)(4,4)
2)附加了解:
①如何设置循环次数
②根据参数化设计测试用例以及测试点
- 关联
关联概念:两个请求,上一个请求的响应结果,作为下一个请求的参数传入
关联运行的场景:下一个请求的参数值是变化的
关联方式:Jmeter中的关联是通过“添加-后置处理器”来获取数据,传给后面的请求使用
①正则表达式提取器
②json提取器
注意:后置处理器,放在请求的子级,数据一般从“查看结果树”的响应数据提取
4.1 正则表达式提取器
1)要检查的响应字段:样本数据源
2)引用名称:可自定义设置,引用方法:${引用名称}
3)正则表达式:数据提取器,()括号里为你要获取的值。常见的性质(.*?)
4)模板:$$对应正则表达式提取器类型,
$1$$2$:{“token_type”:”(.*)”,”expires_in”:”(.*)”,“token”:”(.*)”}}
→ 匹配数字:-1表全部,0岁,1第一个,2第二个,以此类推,一般写1
→ 缺省值:匹配失败时的默认值,可不写
4.2正则表达式
概念:匹配内容的一个表达式,*.log==帮我匹配出所有.log后缀的文件
如何判断自己的正则表达式是否正确,可在线检验:在线正则表达式测试
百度:30分钟入门正则表达式
课外小知识:
打开工具 → 函数助手对话框 → 选择功能RandomString(可点击帮助选择查询自己需要的)→length选择名字长度、generation类型 → 生成字符串后copy到值里
Json Path Tester → Json Path Expression → 输入$.({}里所需要的内容)
http请求 →添加后置处理器 → Json提取器 →从请求响应结果里获取到值 → 可通过查看结果树/线程组添加取样器Debug Sampler(调试取样器)→ 运行 ---只适用Json格式
正则表达式
参考手机号码的正则表达式:手机号码正则表达式_lz3301413033的博客-CSDN博客_手机号码的正则表达式怎么写
- Json提取器
1)要检查的响应字段:样本数据源
2)引用名称:可自定义设置,引用方法:${引用名称}
3)json路径表达式:http://lemfix.com/topocs/63
4)匹配数字:-1表全部,0岁,1第一个,2第二个,以此类推,一般写1
5)缺省值:匹配失败时的默认值,可不写
- Jemter断言
通过添加 → 断言 → 响应断言;还需要在监听器 →断言结果,才能在执行后查看断言结果是否正确
如果请求成功,则断言结果会正常显示的结构,否则会报错,显示为红色
Jmeter使用
1.配置jmete
①添加线程组
②配置http请求(可设置线程组中默认请求)
③添加查看结果(可用json格式)
思考:
- 什么时候要做接口测试
- 为什么要做接口测试
- 接口测试原理
- 前端已经界面出来,已经通过前端界面进行了测试,后端接口是否还需要测试
- 做完接口测试,还需要做前端功能测试吗
- 接口测试一般属于执行哪个阶段?集成、系统
答案:
- 1)项目要求做接口测试才做,无要求就可以不做、
- 一般后端接口开发出来,我们就可以尽早介入进行测试
- 1)提升效率降低成本
2)安全
3)接口比较稳定 - 模拟客户端向服务器发送请求
- 前端测试完,后端要做接口测试(从安全性出发考虑)
- 做完接口测试,还需要做前端功能测试
1)验证前端功能按钮的正确性(UI、URL、下拉框等)
2)页面输入限制
3)前端是否提交数据到服务器
6. 属于集成和系统两个阶段