3.抓包+接口测试

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总是失败,重启电脑即可。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值