Jmeter接口测试
本节课目标
1、接口概念
2、F12接口内容分析
request、response、code_status、cookie/session
3、接口相关问题
1、接口概念
1)接口是什么
接口
=== 通俗来说:传递数据低通道
接口测试:
=== 测试系统组件之间的一种测试
接口主要包括:
=== 同一个系统中模块与模块之间的接口/前端-后端接口,另外是一个跨系统、跨平台数据库的对接。(内部接口、外部接口)
2)通过项目架构理解接口
接口测试原理:
借助工具/代码,模拟客户端发送请求到服务器,服务器处理后,接收返回的响应结果,这一个过程
3)剖析 http、request --浏览器F12
一个 http request (http请求) 指从客户端到服务端的请求信息,包括一下信息-四要素:
接口请求地址 url:
http://wy.lemonban.com:3000/callComponent/login/DoLogin?version=2.0
说明:
协议 :http
域名/ip :wy.lemonban.com
端口 : 3000
资源路径 : /callComponent/login/DoLogin-、
参数=参数值 : version=2.0
请求方法:GET、POST等
请求头: 重点了解 content-type:客户端传递到服务器的数据格式
请求体/请求正文:就是请求参数
4)常见接口类型/协议
Http类型/协议:
通过Get或POST获取数据,在数据处理上效率比较高--95%项目
Webservice类型/协议:
通过soap协议来获取数据,比起来http能处理更复杂的数据类型。
本质也是http协议。传统项目的接口类型
5)http常见接口请求方式:restful接口定义-规范
get、post、put、delete等。get、post 两者的区别?
---开发怎么定义,就按照定义来测试
应用层协议--http,传输层协议-TCP ==> 查阅题库了解概念:3次握手、4次挥手
6)数据类型content-types
application/json:{键值对》 -- [key:value)
json格式注意事项:key-参数名:双括号括起来;value-值:数值-可以不用引号,
搞不清楚,全部用双引号括起来。传空值-null 或 ""
{
"logo""HC"
"username"."wy tudou"
班禁止外传
"passwd""lemon666"
班禁止
"validateCode"."lemon"
"errorlnfo".m
}
一对标签中包裹传递的数据 --比较少接触,简单了解
text/mxl格式:<> </>
<username>wy tudou</username>
<passwd>lemon666</passwd>
2、F12接口内容分析
7)剖析http response --浏览器F12
响应:服务器-> 客户端 3要素
1)http状态码:标记响应状态的一个标识
2)响应头: cookie/session--登录鉴权
3)响应体/响应正文:针对请求从服务响应回来的具体数据,比如:xml、json等,token-登录鉴权
常见面试问题:常见的http状态码有哪些?
200-ok 404-not found
8)常见的http状态码 --面试
200(正常):表示一切正常,到了服务器,并且服务器正常的响应你的请求
302(临时重定向):指出被请求的文档已被临时移动到别处,此文档的新URL在Location响应头中给出
304(未修改):表示客户机缓存的版本是最新的,客户机应该继续使用它,比如:前端js
403(禁止):服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致
404(找不到):服务器上不存在客户机所请求的资源
500(内部服务器错误):服务端的CGI、ASP、JSP等程序发生错误
504(超时):网关超时,是指服务器作为网关或代理,但是没有及时从上游服务器收到请求
详细说明:
https://blog.csdn.net/q1056843325/article/details/53147180
9)剖析cookie session token --区别
cookie:
客户端和服务器都能创建cookie,存放客户端。存放一些不敏感的数据,比如说:用户名,,数据类型为JSON
session:
服务器端生成session,存放服务器端。可以存放任意数据,一般默认时间是30min,session依赖cookie实现
token:
服务器生成、验证,以cookie或请求头的方式传给客户端,客户端以同样的方式发送给服务器。过期时间
通行证(登录鉴权):
session_id 会存在cookie中,每次请求cookie中的所有信息都会传送给服务器,服务器
通过session_id来识别是否同一个用户的请求。不是同一个用户的话,就要去用户重新登录。
为什么会有这种机制呢?
因为 http请求是无状态的,也就是没有记忆-记录
凡是登录之后才能操作的页面对应的接口 -- 需要做登录鉴权
参考博文:
https://www.cnblogs.com/nickjiang/p/9148136.html
10)剖析 cookie session
11)剖析 token
3、接口相关问题
1、什么时候要做接口测试? --常识
公司有接口测试需求,接收到接口测试任务
2、为什么要做接口测试?
1)开发代码初期,UI和Web页面设计还没到位,提前介入测试更早发现问题,
否则则底层的一个bug可能会引起外面的8个bug
2)出于接口安全层面考虑,前端进行限制容易绕过,需同样测试后端的限制;
另外测试接口验证数据的加密传输,例如用户敏感数据
3、接口测试原理? 工具/代码
模拟客户端向服务器发送请求,服务器接受请求后对相应的请求做处理并向客户端返回响应结果,客户端接受的一个过程
4、前端已经界面处理,已经通过前端界面进行测试,后端接口是否还需要测试?
1)实际安全层面是需要的,但是公司不一定有时间给你去测试,有时间可以补充接口测试;
不然以主要功能为主;
2)没有前端界面,以及测试后端接口了,前端界面出来,还要做测试吗?
一定需要,前后端对接是否ok,系统测试用例去执行
5、接口测试一般属于测试执行那个阶段?
一般:集成、系统
4、安装Java并配置环境
查看自己 window系统的位数
依据自己的电脑系统位数,选择对应的位数的jdk安装包
安装JDK
1、双击jdk1.8出现如下图
2、点击下一步,记住jdk安装路径(请一定要记住该路径,后面的环境变量会使用到该路径)
3、这里可以点击下一步:
4、点击关闭,到此已经结束啦。Jdk已经安装完成。
配置jdk环境变量
1、安装完JDK后配置环境变量,右键点击计算机→属性→高级系统设置→高级→环境变量
2、点击环境变量,系统变量→新建 JAVA_HOME 变量 。
变量值填写jdk的安装目录(我的是C:\Program Files\Java\jdk1.8.0_65,
请大家填写上面步骤中自己安装在自己电脑上的jdk路径地址)
3、系统变量→寻找到一个名为:Path的变量→编辑
win7系统:
在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(注意:原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)
(注意:不需要去管path变量值里面有什么,不要去删除任何东西,只要往最后添加即可)
win10系统
点击编辑后,再点击新建
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
分2次将上述配置添加到path变量中
(注意,是分2次新建添加,一次只添加一条)
4、系统变量→新建 CLASSPATH 变量
变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
系统变量配置完毕
检验环境变量是否配置成功
1、电脑左面的左下角,搜索cmd,进入Windows命令行页面
输入:java -version (java 和 -version 之间有空格)
若如图所示 显示版本信息 则说明安装和配置成功。
2、按下键盘上上的win+r键,调出运行窗口,在运行窗口输入cmd
进入Windows命令行页面,输入:java -version (java 和 -version 之间有空格)
若如图所示 显示版本信息 则说明安装和配置成功。
错误解决
如果提示java不是内部或者外部命令,请确认自己的环境变量是否配置正确。
5、JMeter安装与使用
安装/配置
1、从官网下载 Jmeter(压缩包),官网下载链接 :https://jmeter.apache.org/
(官网下载速度较慢,需要等待一定的时间,这里我推荐复制下载链接,然后用迅雷下载 或 ~)
2、安装、配置步骤
https://blog.csdn.net/weixin_45426071/article/details/122019211?ops_request_misc
3、JMeter5.2.1 改变默认设置
https://blog.csdn.net/xiao_xiao2/article/details/125692734
JMeter接口测试实操
目标一
1、接口测试流程/步骤
2、收获接口需求 --- 开发
3、接口测试用例编写
开始 =>
获取接口需求 =>
编写接口用例/评审 =>
搭建项目环境 =>
完成测试报告 =>
结束
接口测试流程/步骤
1、获取接口需求并分析
2、编写接口测试用例&评审测试用例
3、项目环境部署 -- 不一定测试部署,很多公司主要运维/开发部署
4、执行测试&工具选用
5、提交bug并跟进
6、单独需求整理测试报告(公司有要求就做)
知识储备
1)软件测试基础知识: 编写用例/设计方法
2)Linux命令/项目框架
3)数据库知识/观察数据表中的数据流
4)接口概念的掌握
5)工具的掌握: 浏览器/插件/Jmeter/soapUI 原理以及具体操作步骤 Postman
6)分析能力: 需求业务/日志分析
获取接口需求并分析
1、获取接口需求?
开发提供接口文档--swagger在线 / Word文档
开发未提供,通过抓包工具fiddler 或 F12开发者工具获取(前端界面),并找开发确认
2、swagger
是一个用于生成、描述和调用 RESTful 接口的web服务。通俗的来讲,swagger就是将项目中所有(想要暴露的)接口展现在页面上,并且可以进行接口调用和测试的服务
3、分析接口内容?
http://47.115.15.198:7001/smarthome/swagger-ui.html
1)业务分析能力
2)用例设计方法-等价类、边界值、场景法、错误推测法
以注册为例:
url: http://47.115.15.198:7001/smarthome/user/register
请求方式: post
请求头:Content-Type:application/json
X-Lemonban-Media-Type: lemonban.v2
请求体: 看看接口文档
响应--http状态码、响应头、响应头 -- 重点看-开发定义( code、msg、data)
如何编写接口测试用例? 高频面试题
接口的正常调用。
就是输入正常的参数值,检查接口返回的响应结果信息跟接口文档预期一致,包括 msg,code,data 等;数据库增删改查是否正确
接口的异常验证。
依据限制约束,包括 长度、类型、必填等异常,同步考虑 边界值。例如: id 是否支持整数,传递的是小数 或 字符串呢? 且传递的参数足够大 或为负数时,接口是否可以正常处理
业务规则验证。
登录鉴权,代理商添加小区,物业添加小区,是否报错?
接口的安全性验证。
对于用户的敏感信息(密码、身份证号)进行加密。如果是外部接口的话,这点尤其重要。 ---用户加密、鉴权;其他安全性要求看项目要求
接口的性能验证。
接口处理数据的时间也是测试的一个方法。牵扯到内部就是算法与代码的优化。会借助压力测试工具比如 Jmeter、loadrunner 完成 --响应时间多与少,易用性 --有无项目要求
接口测试用例模板
1、序号
2、接口模块
3、用例标题
4、请求头
5、请求方式
6、接口地址
7、参数输入
8、期望返回结果
9、数据库结果
10、实际结果
11、备注
如:
目标二
1、所有接口测试工具介绍
包括: Jmeter,postman,soupUl,fiddler,loadrunner,代码实现,浏览器实现
2、Jmeter工具的基本使用
a) 请求默认值
b) 请求头部管理器
c) 查看结果树
3、Jmeter工具发送 Jdbc的请求,连接数据库
4、Jmeter工具测试 webservice接口-- 扩展内突
目标
1、接口测试工具介绍
2、Jmeter工具详解
接口测试流程
1)开始->获取接口需求->
2)编写接口用例/评审->
3)搭建项目环境->
4)执行接口测试->
5)完成测试报告->
6)结束
1、接口测试工具介绍
Postman -- 主流
soapUI -- 少用,用于 webservice类型/soap协议
Jmeter -- 主流
Loadrunner -- 主要性能测试-接口
代码实现[Python/Java] -- Python接口自动化测试
2、Jmeter的基础使用详解
常用测试元件
测试计划: 默认
线程组 : 并发用户数、并发时间、请求循环次数
采样器 : 比常用Http请求-重点、JDBC Request、soap/webservice --本质http
监听器 : 查看结果树
配置元件: http请求默认值、Http信息头管理器、JDBC Connect Configuration
关联 : 后置处理器: 正则表达式、JSON表达式
参数化 : 用户定义的参数、CSV Data Set Config 、函数参数化
断言 : 响应断言。通过对比服务器返回的响应数据,判定请求是否成功
2.1sampler的http请求
1、http请求界面介绍
重点:接口请求地址的拆分、如何选择请求方式、参数的填写
2、http请求默认值、http信息头管理器应用
3、完成一次http请求,并查看结果树。[如何查看请求的数据以及返回的数据]
4、http cookie 管理器应用
5、添加多线程,禁用/启用请求的使用
2.2 sampler的jdbc请求
1、项目用到是 mysql 数据库,所以用的驱动(连接数据库): com.mysql.jdbc.Driver
驱动包: mysql-connector-iava-5.1.7-bin.jar 插件包 -- 放到imeter安装目录下lib目录下
在整个项目中 -> 测试计划,添加/加载(连接JDBC驱动包) mysql-connector-java-5.1.7-bin.jar
创建线程组
jdbc 连接设置。变量名
jdbc参数配置:
与测试环境部署的数据库配置信息是一样的,讲解配置信息如何 填写,每个字段分别是什么意思
参数说明:
idbc.url
jdbc:mysql://127.0.0.1:3306/my_database?useUnicode=true&characterEncodi ng=utf-8&allowMultiQueries=true
127.0.0.1 -- 数据库所在服务器的ip
3306 -- 数据库端口
my_database --- 数据库库名
物业接口项目数据库url
jdbc:mysql://47.115.15.198:3306/wisdom_home?useUnicode=true&characterEncodi ng=utf-8&allowMultiQueries=true
jdbc请求。 jdbc请求变量设置
运行,查看执行结果
连接数据库-驱动包
Database | Driver class | Database URL |
---|---|---|
2.3文件上传
文件类型
.doc application/msword
.docx application/
.ovnd.openxmlformats-officedocument.wordprocessingml.document
.pdf application/pdf
.xls application/vnd.ms-excel application/x-excel
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.ppt application/vnd.ms-powerpoint
.pptx application/
.ovnd.openxmlformats-officedocument.presentationml.presentation
.txt text/plain
.png image/pngimage/jpg
上传操作
2.4webservice/soap-了解
webservice接口:
http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl --- 已经对外发布
,直接访问可以获取接口说明
如果是公司未发布的webservice接口,没有接口相关说明,只有一个wsdl地址--借助soapui
自动解析接口的类、方法的解析
1、直接访问 webservice接口
2、除掉 接口 ?wsdl ,访问描述页
3、进入 webxml.com.cn/ 接口详情页
4、填写请求头信息
5、填写请求体信息(数据、内容)
6、执行请求,查看返回结果
7、使用SoapUI 创建项目
8、SoapUI分析并获取webservice请求头和请求体
目标
1:Jmeter的金数化
2: Jmeter关联(正则表达式提取器、json提取器)
3: 断言