fiddler V5.0 jmeter V5.2.1
第一部分,fiddler抓包内容************************************************
1. 什么时候会用到Fiddler
1)、做安全测试,检测敏感信息是否加密,拦截篡改数据;
2)、当测试时发现缺陷,用fiddler抓包,定位该问题是前端还是后端的问题;
3)、模拟弱网环境;
4)、统计单个功能的响应时间。
2. Fiddler的抓包原理(只能抓http和https协议的包)
在客户端和服务器之间建立一个代理,通过监听端口(默认是 8888),
监听本机发出的请求和服务器返回的响应结果。
fiddler使用(需要先安装.net 4.0)----------------------------------------
https://www.chinawealth.com.cn/zzlc/jsp/login/login.jsp
密码加密的
http://api.kaolafm.com/api/v4/pagecontent/list?pageid=103
103和105数据不同
1. 数据过滤
右半部分点击 Filters → 勾选 Use Filters,
选择show only Internet hosts(或不选)和 show only the following hosts,
填写网址(多个网址用英文逗号隔开),点击Actions
2. 查看包的请求和响应 (Inspectors → WebForms、 Raw)
左下角点击(Capturing)可以停止捕捉,紧挨着的是过滤类型(All Processes)
3. 拦截篡改数据
断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析。
a. 拦截请求数据
Rules → Automatic Breakpoints(自动断点) → 请求前
b. 拦截响应数据
Rules → Automatic Breakpoints(自动断点) → 响应后
4. 模拟弱网环境(弱网一般指2G网络)
2G一般上行/下行速率约为:2.7、9.6kbs,
模拟设置为:uploaded 约 2962 ms,downloaded 约 833 ms;
3G一般上行/下行速率约为:384、2560kbs,
设置为:uploaded 约 2.6 ms,downloaded 约 0.39 ms;
点击某个按钮,没有响应,可能的原因:
a.网络延时 b.页面没有跳转 c.系统卡顿 d.服务器本身没有响应 e.兼容性问题
模拟弱网步骤:
1.点击Rules → Customize Rules…(自定义规则),
或快捷键Ctrl+R,弹出脚本编辑器,
Ctrl+F搜索300或download等关键字,定位到m_SimulateModem(模拟带宽),
默认值如下(上传300,下载150):
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "300";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "150";
}
2.修改上传和下载的延时时间(数值越大,延时越大),保存Ctrl+S
3.点击Rules(规则)→Performance(性能)→Simulate Modem Speeds(模拟带宽)
5. 抓https的包
a. 先安装HTTPS协议的证书,
b. 然后Tools → Options → HTTPS → 全部勾选(勾选抓取HTTPS信息),
c. 再在Certificates generated by CertEnroll(安全控件)
点击蓝色字体(更换安全引擎),下拉列表选择MakeCert,OK之后重启fiddler
6. 抓手机APP的包
Tools →Options → Connections,默认监听端口8888(若其他端口没占用,也可修改),
勾选Allow remote computers to connect(允许远程计算机连接),
确定后重启fiddler
手机端设置:跟电脑在同一网段,设置代理为手动,填写电脑端的IP(如192.168.0.52)、
端口(fiddler默认8888),手机浏览器打开192.168.0.52:8888,下载并安装证书
打开手机浏览器即可抓包,作用:定位是前端还是后端问题
删除手机中证书:安卓系统设置—安全—收信任的凭证—用户,点击证书删除即可;
注:如果不小心将右上角的Online关闭,可以在View- Show Toolbar打开。
7.请求时,主机IP替换
左下角的QuickExec输入框,输入指令:urlreplace 原host 新host
urlreplace weixin.sceneray.com apit.jingyh.com
urlreplace 清空之前的设置
另一种方法
tools → HOSTS...:
1.勾选 允许将一个主机的请求重新映射到另一个主机或IP,覆盖DNS。
2.填写:新IP 原IP
3.保存即可
若取消设置,取消勾选并保存即可
第二部分,接口测试内容****************************************************
1. 接口测试理论
1.1 正常通信:客户端→ web应用服务器→ DB数据库→ 应用服务器→ 返回客户端
1.2 不正常通信:
客户端 → web应用服务器 → 保存到DB数据库的同时,将响应返回客户端
容易出现丢单问题(尤其金融项目),即请求数据是否真正保存到了数据库,
万一服务器到数据库之间通信异常呢?
2. 接口文档信息:
1. 接口的功能,
2. 接口的服务器和路径信息,
3. 接口的请求协议、请求方式,
4. 发送给服务器的参数及其约束条件,
5. 服务器返回的内容(正常和异常的返回信息)
3. 接口测试要关注什么内容
1. 发送给服务器的请求数据是否正确;
2. 服务器返回给客户端的信息是否和预期结果一致;
3. 进入数据库,检查接口是否实现的相应的功能;
4. 接口的响应时间是否符合需求。
4. 接口测试用例编写(注意md5等加密方式)
在传统用例的基础上增加了两列:请求报文(请求数据),响应报文(响应数据),
考虑正常、异常的请求参数的请求报文、响应报文
5. 什么情况下进行接口测试?
在开发阶段、页面完成之前,通过测试程序或工具,模拟客户端向服务器发送请求报文,
服务器接收请求报文后,对相应的报文做出处理。
6. 为什么要做接口测试 / 接口测试的目的
1. 尽早介入测试,早发现bug,降低修复成本
2. UI界面测试无法发现底层问题;反之,接口测试无法模拟用户的使用场景.
第三部分,jmeter内容******************************************************
软件环境:jmeter 5.2.1,jdk 8.0.600.27
http://www.pingan.com/cms-tmplt/pinganlife/synShopList.do
post请求,参数dateUpdated:2017-12-02
平安接口2017-12-02有数据,2010-06-09不能跑,2020-06-09能跑但没数据
1. jmeter安装:
1-1. jdk安装(默认C盘),配置环境变量(注意CLASSPATH的.和变量之间的;):
JAVA_HOME是 C:\Program Files\Java\jdk1.8.0_60\
CLASSPATH是 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
Path是 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
DOS窗口验证安装成功与否:
java -version
javac
1-2. 解压jmeter压缩包:路径太深可能打不开,注意运行内存70%以下
打开bin/jmeter.bat,点击Options → Choose Language,选择简体中文。
1-3. 外观可以选择白色更好看些:选项-外观-Windows classic,然后点击yes保存
1-4. Ctrl + shift + 鼠标滚轮可以缩放页面
2. jmeter使用:
1. 左上方 Test Plan → 右键添加 线程(用户) → 线程组
2. 选中线程组,右键添加 → 取样器 → HTTP请求,名称可以改
3. 右边框里选择基本,填写协议、服务器IP、端口号、请求方法、路径(接口地址)
4. 下方如果需要添加参数,就点击底部的添加
5. 右键选中请求 → 添加 → 监听器 → 察看结果树
6. 保存脚本,运行后查看请求、响应信息
http默认端口80,https默认端口443
3. 断言:判断预期结果和实际结果是否一致
不能凭红绿色判断失败成功,只要服务器返回200的响应码,就是绿色,应使用断言
新增断言:右键选中已添加的请求 → 添加 → 断言 → 响应断言
在右边区域的中间部分的测试模式里面添加预期结果(响应信息),
有时候要在“测试字段”里面选到“忽略状态”,意思就是忽略返回的状态码
4. 请求数据参数化
接口测试,要考虑异常场景(可能输错的参数),参数化可以模拟不同用户的不同输入
某post请求要添加字段名为dateUpdated的日期格式的参数,正常格式为2017-12-02
具体参数化步骤为:
1. 新建文本文档,第1行写dateUpdated(字段名),第2行写正确的内容,
第3行写用户可能会输错的内容,每行一个数据
2. 右键选中已添加的请求 → 添加 → 配置元件 → CSV数据文件设置,文件名选择
刚才新建的文本文档,(如果乱码,文件编码就写utf-8,正常为空)
3. 找到post请求输入参数的位置,参数名填写dateUpdated,
参数值填写 ${dateUpdated}
4.右键线程组 → 添加 → 逻辑控制器 → 循环控制器,将请求拖到循环控制器里面,
循环次数设置为文本文档里面参数个数
5. 断言参数化:针对不同的参数,设置不同的断言
比如上述post请求,返回结果resultcode=1表示成功,resultcode=0表示失败
1. 原来的参数化文件(文本文档)里面第1行第一个字段是日期的参数,
加一个英文逗号,再写一个断言的字段名expect(比如断言设为expect),
2. 第2行也加一个逗号,后面写resultcode=1表示成功,第3行也加个英文逗号,
后面写resultcode=0表示失败,目的是判断预期结果和实际结果是否一致
3. 回到响应断言,将断言内容填写成 ${expect}
6. 添加请求头:针对部分请求,需要添加headers
右键选中请求 → 添加 → 配置元件 → HTTP信息头管理器
如请求头为Content-Type:application/json,请求数据要以json形式传参
7. 添加请求默认值:针对多个请求具有相同的服务器IP,可以添加HTTP请求默认值
右键线程组 → 添加 → 配置元件 → HTTP请求默认值,填写协议、IP、端口
8. 正则表达式提取器:某项目后续接口如创建任务,需要用到登录后的token值
每次登录的token都不同,需要先获取token,再为后续接口使用
1. 右键登录请求 → 添加 → 后置处理器 → 正则表达式提取器,填写引用名称
2. 正则表达式的值填写"token":"(.+?)",模板值填写$1$
3. 若正则的引用名称填写token,则后续接口使用token值的地方应是${token}
() 表示括起来的部分就是要提取的。
. 表示匹配任何字符串。
+ 表示一次或多次。
? 表示不要太贪婪,在找到第一个匹配项后停止。
模板:用$$引用起来,如$1$,表示解析到的第1个值
匹配数字:0代表随机取值,1代表全部取值,通常情况下填1
缺省值:如果参数没有取得到值,那默认给一个值让它取,通常情况下为空
(.*?)表示提取0个字符串及以上,要取的值是空值的时候可以取得到。
-----------------------------------------------------------------
{ "id": 3030,
"username": "juzi6",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCICJ9.eyJ1c2p1emk2"}
token左边界是"token":",右边界是",所以正则表达式的值是"token":"(.+?)"
-----------------------------------------------------------
登录响应body如下
{ "code": 1,
"data": { "id": 211,
"token": "6f9c23464d2ffde0fc8083d51200e1d3" },
"show": 0 }
我们取值token那一行,正则表达式也是"token":"(.+?)"
-----------------------------------------------------------------
9. 获取token值的另一种方法是json提取器(了解):
右键选中登录请求 → 添加 → 后置处理器 → json提取器,
Names of created variables(变量名称)填写token,
JSON Path Expressions(表达式)填写$.token,
Match No.(取值)默认为空或填写0,0表示随机取值。
如果响应类似{ "data": [ {"sx":1} ,{} ] },整个响应是个对象,
若取sx的值,表达式为:$.data[0].sx 或 $..sx
10. 注意事项:
1. jmeter里面,协议为空表示默认HTTP,端口为空表示默认80
2. 请求里面不要勾选 → 对post使用multipart /form data
3. 接口返回的数据格式,常用的是文本格式、json格式
4. 断言最好使用文本格式,且有时候会添加响应body的全部内容(文本格式)
5. 快捷键: 运行 Ctrl + R , 清空日志 Ctrl + E
11. 其他问题
1. 接口返回的状态码怎么定义的?
HTTP响应码是 200 302 400 404 500
接口返回码是由开发规定的,比如-1,-10235等等都是由开发规定的
2. jmeter察看结果树、断言都是正确的,为什么显示红色?
有时候断言是根据状态码断言(若识别到状态码是500、404等,会报错),
要忽略状态码,因为请求成功了,并不代表结果一定正确。
2. 接口的返回码有哪些,接口返回信息从哪里看?
察看结果树的响应报文里面,响应数据(响应body)
3. 参数化文件里面,如果某个参数本身正好含有逗号,怎么处理呢?
CSV配置里面,“是否允许带引号”选择True,参数化文件里面,
各参数用引号括起来即可。(其实,只把带逗号的参数用引号括起来就行了)
第四部分,电商接口项目**************************************************
手机号不是手机号也可以;密码用123456,加密后是X66Jcqs03vkxqAZMM3zXGA==
***********************************************************************
***********************************************************************
(以下内容为补充,可做了解:)
第五部分,接口自动化框架 Ant+Jmeter+Jenkins ****************************
达到框架、脚本、测试数据相分离的效果。
1. 安装Ant,配置Ant环境变量。
Ant是功能强大的打包编译工具,可以将JTL(xml)格式转化为html格式的文件。
1-1. 解压ant的压缩包apache-ant-1.9.9.zip,添加环境变量
Path: C:\apache-ant-1.9.9\bin
CLASSPATH: C:\apache-ant-1.9.9\lib
1-2. DOS窗口验证ant:ant -version
如果DOS窗口报Error occurred during initialization of VM
Could not reserve enough space for object heap
说明内存不足,清理下内存再试即可。
2. 安装jmeter(先安装JDK,配置环境变量)
3. 安装Jenkins,安装好后,会自动打开登陆页面(http://localhost:8080/login)。
3-1.如果没有打开,查看端口8080占用情况:netstat -ano|findstr 8080,
如果8080没被占用,就重启Jenkins服务后再次尝试;
3-2.如端口被占用,可在Jenkins\jenkins.xml中,搜索httpPort=8080,
将端口修改为未被占用的端口后再次尝试。不行,就重启电脑。
3-3.根据页面提示,找到系统的初始化密码,填入Administrator password的框中。
3-5.点击“选择插件安装”后,上方选择“None”,点击右下角的“安装”。
3-6.创建用户如admin,密码为admin123,全名(就是昵称)随便写,然后保存。
4. 环境配置
1. 将jmeter的extras目录中ant-jmeter-1.1.1.jar复制到ant目录下的lib目录中。
2. 搜索文件jmeter\bin\jmeter.properties文件的
关键字jmeter.save.saveservice.output_format=csv,复制粘贴去掉注释,
将csv改成xml保存即可。原因是jmeter执行结果文件默认保存的
不是xml格式,无法转化成html格式
3. 可在C盘,直接创建workspace文件夹,里面包括三个文件夹和一个build.xml文件,
三个文件夹分别是: args文件夹存放参数化的数据,
reports文件夹存放测试报告,
testCases文件夹存放测试用例。
4. 其中reports下再创建两个文件夹:html文件夹,jtl文件夹,测试报告从html看
5. build.xml文件在ant+jenkins.rar解压得到,按需修改build.xml文件4个地方:
本地的 Jmeter 目录,
jtl格式的结果报告的路径,
html格式的结果报告的路径,
testCases路径。
6. 准备一个带聚合报告的jmeter脚本,放在testCases文件夹下,
将参数化文件放入args文件夹中,同时注意调整好jmeter脚本参数化文件的位置。
5. 使用ant运行jmeter脚本
5-1. 打开DOS窗口,cd到workspace,或在workspace按住shift,右键进入DOS窗口,
输入ant,运行成功后,查看workspace\reports\html下是否生成html报告。
5-2. 如果DOS窗口一直不行,可以尝试修改...\workspace\build.xml第25行左右。
6. Jenkins实现接口持续集成自动化测试
6-1.打开Jenkins,新建任务,输入任务名称,勾选“构建一个自由风格的软件项目”,
选择触发器“Build periodically”,设置执行时间0 17 * * * ,即每天17点执行。
6-2.在“构建”下拉菜单中选在“Execute Windows batch command”,换行输入以下命令:
如果是C盘,2条命令(换行输入): cd C:\workspace, ant
如果是F盘,3条命令(换行输入): F:,cd workspace,ant
6-3.点击应用即可,每晚17:00自动跑任务。
6-4.如果DOS窗口执行命令没问题,而Jenkins总是失败,重启电脑即可。