<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.7">Jekyll</generator><link href="https://nnnnmkaka.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://nnnnmkaka.github.io/" rel="alternate" type="text/html" /><updated>2020-07-01T13:48:54+00:00</updated><id>https://nnnnmkaka.github.io/feed.xml</id><title type="html">卡卡</title><subtitle>卡卡的个人博客</subtitle><author><name>Kaka</name></author><entry><title type="html">正则表达式的运用</title><link href="https://nnnnmkaka.github.io/2020/06/30/Regular-expression/" rel="alternate" type="text/html" title="正则表达式的运用" /><published>2020-06-30T00:00:00+00:00</published><updated>2020-06-30T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/06/30/Regular-expression</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/06/30/Regular-expression/">&lt;p&gt;在日常工作中使用“正则表达式”语法是非常普遍的，所谓正则表达式，就是一种描述字符串结构模式的形式化表达方法。许多工具都支持正则表达式（文本编辑器、文字处理软件、系统工具、数据库引擎，等等）。当然，它还成为了编程语言的一部分。例如：C、C++、C#、JAVA、Go、JavaScript、elisp、Perl、Python、Php、Ruby、Tcl、Sed、Awk、Lua等等……&lt;/p&gt;

&lt;p&gt;本文将介绍正则表达式的常见用法：&lt;/p&gt;

&lt;h3 id=&quot;1元字符&quot;&gt;1、元字符&lt;/h3&gt;
&lt;center&gt;表1.常用的元字符&lt;/center&gt;

&lt;table style=&quot;width:600px; margin:auto;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;代码&lt;/th&gt;
      &lt;th align=&quot;left&quot;&gt;说明&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;.&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;小数点可以匹配除了换行符（\n）以外的任意一个字符&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;\w&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;任意一个字母或数字或下划线，也就是 A~Z,a~z,0~9,_ 中任意一个&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;\s&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;包括空格、制表符、换页符等空白字符的其中任意一个&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;\d&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;任意一个数字，0~9 中的任意一个&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;\b&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;匹配单词的开始或结束&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;^&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;匹配一行的开头位置&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;匹配一行的结束位置&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;示例：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;http://www.regexlab.com/zh/workshop.asp?pat=\d\d&amp;amp;txt=abc123&quot;&gt;举例1：表达式 “&lt;font color=&quot;red&quot;&gt;\d\d&lt;/font&gt;“，在匹配 “abc123” 时&lt;/a&gt;，匹配的结果是：成功；匹配到的内容是：”12”；匹配到的位置是：开始于3，结束于5。&lt;/p&gt;

  &lt;p&gt;&lt;a href=&quot;http://www.regexlab.com/zh/workshop.asp?pat=a.\d&amp;amp;txt=aaa100&quot;&gt;举例2：表达式 “&lt;font color=&quot;red&quot;&gt;a.\d&lt;/font&gt;“，在匹配 “aaa100” 时&lt;/a&gt;，匹配的结果是：成功；匹配到的内容是：”aa1”；匹配到的位置是：开始于1，结束于4。&lt;/p&gt;

  &lt;p&gt;&lt;a href=&quot;http://www.regexlab.com/zh/workshop.htm?pat=%5Cd%2B&amp;amp;txt=abc123&amp;amp;dlt=0&quot;&gt;举例3：表达式”&lt;font color=&quot;red&quot;&gt;\d+&lt;/font&gt;“，在匹配”abc123”时&lt;/a&gt;，匹配的结果是：成功；匹配到的内容是：”123”；匹配到的位置是：开始于3，结束于5。”&lt;font color=&quot;red&quot;&gt;\d+&lt;/font&gt;“表示匹配1个或更多连续的数字。这里的+是和* 类似的元字符，不同的是*匹配重复任意次(可能是0次)，而+则匹配重复1次或更多次。&lt;/p&gt;

  &lt;font color=&quot;red&quot;&gt;\ba\w**\b*&lt;/font&gt;
  &lt;p&gt;匹配以字母a开头的单词——先是某个单词开始处(\b)，然后是字母a,然后是任意数量的字母或数字(\w*)，最后是单词结束处(\b)&lt;/p&gt;

  &lt;font color=&quot;red&quot;&gt;\b\w{6}\b&lt;/font&gt;
  &lt;p&gt;匹配刚好6个字符的单词。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;2重复&quot;&gt;2、重复&lt;/h3&gt;

&lt;center&gt;表2.常用的限定符代码&lt;/center&gt;

&lt;table style=&quot;width:600px; margin:auto;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;代码&lt;/th&gt;
      &lt;th align=&quot;left&quot;&gt;说明&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;*&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;重复零次或更多次&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;+&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;重复一次或更多次&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;?&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;重复零次或一次&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;{n}&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;重复n次&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;{n,}&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;重复n次或更多次&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;{n,m}&lt;/td&gt;
      &lt;td align=&quot;left&quot;&gt;重复n到m次&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;下面是一些使用重复的例子：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;http://www.regexlab.com/zh/workshop.htm?pat=Windows%5Cd%2B&amp;amp;rto=1&amp;amp;txt=Windows12345%0AWindowsaaaaa%0AWindows%u55EF%u55EF%u55EF%u55EF%u55EF%u55EF&amp;amp;dlt=0&quot;&gt;Windows\d+&lt;/a&gt;       匹配Windows后面跟1个或更多数字&lt;/p&gt;

  &lt;p&gt;&lt;a href=&quot;http://www.regexlab.com/zh/workshop.htm?pat=Windows%5Cd%2B&amp;amp;rto=1&amp;amp;txt=Windows12345%0AWindowsaaaaa%0AWindows%u55EF%u55EF%u55EF%u55EF%u55EF%u55EF&amp;amp;dlt=0&quot;&gt;13\d{9}&lt;/a&gt;               匹配13后面跟9个数字(中国的手机号)&lt;/p&gt;

  &lt;p&gt;&lt;a href=&quot;http://www.regexlab.com/zh/workshop.htm?pat=Windows%5Cd%2B&amp;amp;rto=1&amp;amp;txt=Windows12345%0AWindowsaaaaa%0AWindows%u55EF%u55EF%u55EF%u55EF%u55EF%u55EF&amp;amp;dlt=0&quot;&gt;\^\w+&lt;/a&gt;                  匹配一行的第一个单词(或整个字符串的第一个单词，具体匹配哪个意思得看选项设置)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;3测试工具&quot;&gt;3、测试工具&lt;/h3&gt;

&lt;p&gt;俗话说，要想攻其事，必先利其器。&lt;/p&gt;

&lt;p&gt;在线测试：&lt;/p&gt;

&lt;p&gt;https://regex101.com/  （推荐）&lt;/p&gt;

&lt;p&gt;http://www.regexpal.com/&lt;/p&gt;

&lt;p&gt;http://tool.chinaz.com/regex&lt;/p&gt;

&lt;p&gt;https://jex.im/regulex/#!flags=&amp;amp;re=%5E(a%7Cb)*%3F%24/   (正则分析)&lt;/p&gt;

&lt;p&gt;本地测试：&lt;/p&gt;

&lt;p&gt;http://www.regexbuddy.com/&lt;/p&gt;

&lt;h3 id=&quot;4测试工作中常见的一些需求&quot;&gt;4、测试工作中常见的一些需求&lt;/h3&gt;

&lt;p&gt;匹配中文字符的正则表达式：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[\u4e00-\u9fa5] 　　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;获取日期正则表达式：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\\d{4}[年|\\-|\\.]\d{\1-\12}[月|\\-|\\.]\d{\1-\31}日? 　　&lt;/code&gt;　&lt;/p&gt;

&lt;p&gt;匹配双字节字符(包括汉字在内)：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\[^\x00-\xff]　　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配空白行的正则表达式：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\n\s*\r 　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配HTML标记的正则表达式：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;(\S\*?)\[^&amp;gt;]\*&amp;gt;.\*?&amp;lt;/&amp;gt;|&amp;lt;.*?/&amp;gt; 　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配首尾空白字符的正则表达式：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^\s*|\s\*$　　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配Email地址的正则表达式：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\w+([-+.]\w+)\*@\w+([-.]\w+)\*\.\w+([-.]\w+)*　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配网址URL的正则表达式：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[a-zA-z]+://\[^\s]*　　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^\[a-zA-Z][a-zA-Z0-9_{4,15}$　　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配国内电话号码：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\d{4}-\d{7}|\d{3}-\d{8}　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配腾讯QQ号：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\[1-9][0-9]\\{4,\\}　　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配中国邮政编码：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[1-9]\d{5}(?!\d)　　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配身份证：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\d{17}[\d|X]|\d{15}　&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;匹配ip地址：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)&lt;/code&gt;&lt;/p&gt;</content><author><name>Kaka</name></author><summary type="html">在日常工作中使用“正则表达式”语法是非常普遍的，所谓正则表达式，就是一种描述字符串结构模式的形式化表达方法。许多工具都支持正则表达式（文本编辑器、文字处理软件、系统工具、数据库引擎，等等）。当然，它还成为了编程语言的一部分。例如：C、C++、C#、JAVA、Go、JavaScript、elisp、Perl、Python、Php、Ruby、Tcl、Sed、Awk、Lua等等……</summary></entry><entry><title type="html">分布式压测</title><link href="https://nnnnmkaka.github.io/2020/06/19/%E5%88%86%E5%B8%83%E5%BC%8F%E5%8E%8B%E6%B5%8B/" rel="alternate" type="text/html" title="分布式压测" /><published>2020-06-19T00:00:00+00:00</published><updated>2020-06-19T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/06/19/%E5%88%86%E5%B8%83%E5%BC%8F%E5%8E%8B%E6%B5%8B</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/06/19/%E5%88%86%E5%B8%83%E5%BC%8F%E5%8E%8B%E6%B5%8B/">&lt;h2 id=&quot;如何开展分布式压测&quot;&gt;如何开展分布式压测？&lt;/h2&gt;

&lt;p&gt;当接到一个压测需求时，要怎么测试？一般可从以下角度阐述：&lt;/p&gt;

&lt;p&gt;​    1、分析被测服务的调用链及其协议，选择测试工具&lt;/p&gt;

&lt;p&gt;​    2、编写测试用例，准备测试数据，确认本地调试通过&lt;/p&gt;

&lt;p&gt;​    3、准备发压环境&lt;/p&gt;

&lt;p&gt;​    4、确认测试指标，选择测试场景&lt;/p&gt;

&lt;p&gt;​    5、测试执行&lt;/p&gt;

&lt;p&gt;​    6、总结和分析&lt;/p&gt;

&lt;h2 id=&quot;一测试工具&quot;&gt;一、测试工具&lt;/h2&gt;

&lt;h3 id=&quot;11-jmeter&quot;&gt;1.1 Jmeter&lt;/h3&gt;

&lt;p&gt;​        Jmeter常用于Web场景的压力测试。但除了常见的HTTP、TCP协议的性能测试外，Jmeter本身也提供了底层SDK以供开发者进行可视化的自定义开发。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;TarsJmeter插件
    Tars是由腾讯开源的高性能RPC微服务框架。
    [TarsJMeter是一套运行在JMeter环境上的性能测试方案，目的是为了解决Tars私有化协议的性能测试。
    (下载地址：https://git.code.oa.com/dcsiq_sec_gz/tars_jmeter)
    
如何使用TarsJmeter插件？
    1、编译打包，生成TencentJMeter_tars-1.0.jar
    2、将 TencentJMeter_tars-1.0.jar 放到Jmeter的 .../lib/ext 目录下
    3、添加取样器时即可选择Tars or Shark相关Sampler
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396250_39_w1230_h1292.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;二用例设计&quot;&gt;二、用例设计&lt;/h2&gt;

&lt;h3 id=&quot;21-常用测试协议&quot;&gt;2.1 常用测试协议&lt;/h3&gt;

&lt;h3 id=&quot;211-shark&quot;&gt;2.1.1 shark&lt;/h3&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/captures/202006/1592460650_7_w2812_h1720.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;​    Shark Sampler中，Shark协议总共有6种：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tcpShark nohttp：tcp on shark on tcp，长链接

tcpShark http：http on shark on tcp，长链接

OldtcpShark nohttp：tcp on old shark on tcp，长链接

OldtcpShark http：http on old shark on tcp，长链接

httpShark nohttp：tcp on shark on http，短链接

httpShark http：http on shark on http，短链接
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​    其中，OldShark是指旧Mazu，旧的是链路只有Mazu，新的是Mazu+SashimiServer。目前TMF使用的是新Mazu，因此常用协议为tcpShark http。&lt;/p&gt;

&lt;h3 id=&quot;212-tars&quot;&gt;2.1.2 tars&lt;/h3&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/captures/202006/1592460701_89_w2818_h1718.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;213-http&quot;&gt;2.1.3 http&lt;/h3&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/captures/202006/1592460747_66_w2818_h1706.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;22-常用设置&quot;&gt;2.2 常用设置&lt;/h2&gt;

&lt;h3 id=&quot;221-线程组&quot;&gt;2.2.1 线程组&lt;/h3&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396380_42_w738_h473.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;​    线程数：通常从较小的数值开始测试，然后逐渐加大并发；&lt;/p&gt;

&lt;p&gt;​    Ramp-Up时间：指多长时间内启动完全部线程，设置30即30s秒启动完全部线程。设置该参数可以模拟一段时间内都平稳有请求上去，避免请求全都在同一时间起来。&lt;/p&gt;

&lt;h3 id=&quot;如何合理设置线程数&quot;&gt;如何合理设置线程数？&lt;/h3&gt;

&lt;p&gt;​        通常情况下，QPS开始会随着压测端线程数而增加，到达极限值后不再上涨，因此测试的时候需要预估合理的线程数来达到极限QPS。&lt;/p&gt;

&lt;p&gt;​    1、验证单个请求的响应时间（RT）&lt;/p&gt;

&lt;p&gt;​    2、&lt;strong&gt;预估线程数 = RT x CPU核数 x 单CPU使用率 = RT x CPU核数 x 100%&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592461766_65_w869_h329.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;222-定时器&quot;&gt;2.2.2 定时器&lt;/h3&gt;

&lt;p&gt;​    定时器可以用于控制发送频率。（比如，想控制每秒发送一次，可以使用常数吞吐量定时器，设置为60）&lt;/p&gt;

&lt;p&gt;​    常用的两种定时器：&lt;/p&gt;

&lt;p&gt;​    固定定时器：一次请求后，延迟多长时间，再进行下一次请求&lt;/p&gt;

&lt;p&gt;​    常数吞吐量定时器：指定每分钟最多发送多少个请求&lt;/p&gt;

&lt;h3 id=&quot;何时需要用定时器怎么设置参数&quot;&gt;何时需要用定时器？怎么设置参数？&lt;/h3&gt;

&lt;p&gt;​    在不设置定时器的情况下，会根据回包再发送下一个请求。因此定时器通常不是必须设置项。但在需要控制发包频率的场景时，可以设置。（例子：问题定位-网关HTTP协议）&lt;/p&gt;

&lt;p&gt;​    先设置1个线程运行，观察响应时间（RT）。假设RT=1ms，即每分钟最多可发送请求数：60/1/0.001&lt;/p&gt;

&lt;h3 id=&quot;223-查看结果树&quot;&gt;2.2.3 查看结果树&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396434_19_w2862_h1770.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;添加查看结果树，可以看到每次请求的结果，也可只过滤失败请求。这个方便在本地调试使用。&lt;/p&gt;

&lt;h3 id=&quot;224-后端监听器&quot;&gt;2.2.4 后端监听器&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;http://km.oa.com/files/photos/captures/202006/1592460809_26_w2844_h1716.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;​        后端监听器可以将测试结果传到influxdb，grafana从influxdb读取结果进行可视化展示，方便实时查看测试结果（QPS、错误率、耗时等）。&lt;/p&gt;

&lt;h3 id=&quot;225-聚合报告&quot;&gt;2.2.5 聚合报告&lt;/h3&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396463_89_w2846_h1774.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;​        聚合报告可以显示错误率、TPS等结果信息，在没有可视化报表等情况下，可以用Jmeter自带的聚合报告看到测试结果。&lt;/p&gt;

&lt;h3 id=&quot;226-csv数据文件设置&quot;&gt;2.2.6 CSV数据文件设置&lt;/h3&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396476_19_w2850_h1774.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;​    适用于需要读取特定文件内容的场景。&lt;/p&gt;

&lt;h2 id=&quot;三环境管理&quot;&gt;三、环境管理&lt;/h2&gt;

&lt;h3 id=&quot;30-压测方式&quot;&gt;3.0 压测方式&lt;/h3&gt;

&lt;p&gt;​    压测可分为内网压测和外网压测。TMF是使用腾讯云服务器私有化部署，在办公网进行压测为外网压测；使用同一个腾讯云账号购买服务器进行压测，即为内网压测。&lt;/p&gt;

&lt;p&gt;​    外网压测网络开销对响应耗时的影响较大，而内网压测几乎取消了网络开销的影响，可以更好地评估服务自身的性能，因此我们采用了内网压测。（客户端RT=服务端RT+网络开销）&lt;/p&gt;

&lt;h3 id=&quot;31-环境依赖&quot;&gt;3.1 环境依赖&lt;/h3&gt;

&lt;p&gt;​        确认是否安装了Java。若没有安装，则：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;yum search jdk
yum install java-1.8.0-openjdk.x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​        安装成功后，配置.bashrc：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=${JAVA_HOME}/bin:$PATH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​        修改后，执行source ~/.bashrc生效&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;source ~/.bashrc 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;32-jmeter部署&quot;&gt;3.2 Jmeter部署&lt;/h3&gt;

&lt;p&gt;（1）分别登录5台压测机器，将jmeter打包上传上去，解压：&lt;/p&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396515_25_w615_h116.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;（2）修改.bashrc配置，配置jmeter的bin目录&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;export JMETER_HOME=/root/apache-jmeter-5.2.1
export PATH=${JMETER_HOME}/bin:${JAVA_HOME}/bin:$PATH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​    修改后，执行source ~/.bashrc生效&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;（3）设置jmeter分布式压测&lt;/p&gt;

&lt;p&gt;​    修改 /apache-jmeter-5.2.1/bin/jmeter.properties，设置remote_hosts；&lt;/p&gt;

&lt;p&gt;​    ip设置为压测机器，端口通常设置为1099&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;remote_hosts=ip1:port,ip2:port,ip3:port,ip4:port,ip5:port;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​    修改server.rmi.ssl.disable=true&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;server.rmi.ssl.disable=true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;33-tarsjmeter插件替换&quot;&gt;3.3 TarsJmeter插件替换&lt;/h3&gt;

&lt;p&gt;​    分别登录5台压测机器，上传插件：&lt;/p&gt;

&lt;p&gt;​    TencentJMeter_tars-1.0.jar 到 /apache-jmeter-5.2.1/lib/ext&lt;/p&gt;

&lt;h3 id=&quot;34-清理环境启动jmeter&quot;&gt;3.4 清理环境，启动Jmeter&lt;/h3&gt;

&lt;p&gt;​    分别登录5台压测机器，执行以下操作：&lt;/p&gt;

&lt;p&gt;（1）清理环境：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ps aux | grep jmeter | xargs kill -9
rm -rf nohup.out
rm -rf jmeter-server.log
rm -rf taf/nohup.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;（2）每个机器执行对应ip的命令，启动jmeter：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nohup jmeter-server -Djava.rmi.server.hostname=本机ip -n &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;35-常见问题&quot;&gt;3.5 常见问题&lt;/h3&gt;

&lt;p&gt;（1）执行用例时，出现Engine is busy…&lt;/p&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/captures/202006/1592460430_62_w1310_h336.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;​    解决方法：执行3.4进行环境清理&lt;/p&gt;

&lt;p&gt;（2）启动Jmeter时提示无权限&lt;/p&gt;

&lt;p&gt;​    解决方法：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo chmod -R 777 apache-jmeter-5.2.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;（3）运行用例时提示 Connection refused to host&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://km.oa.com/files/photos/captures/202006/1592460578_77_w2522_h726.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;解决方法：&lt;/p&gt;

&lt;p&gt;​        修改master机器的 jmeter.bat：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;set rmi_host=-Djava.rmi.server.hostname=本机ip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​        修改salve机器的 jmeter-server：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;RMI_HOST_DEF=-Djava.rmi.server.hostname=本机ip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;四用例执行&quot;&gt;四、用例执行&lt;/h2&gt;

&lt;h3 id=&quot;41-测试前确认&quot;&gt;4.1 测试前确认&lt;/h3&gt;

&lt;p&gt;（1）确认压测环境能否通过内网访问被测环境&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;telnet ip port
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​    若不是同一账号下的腾讯云机器，内网ip不通，需要另外准备测试机。&lt;/p&gt;

&lt;p&gt;（2）确认压测环境能否访问influxdb的ip&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;telnet ip port
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​    如果不通，提供出口ip和被访ip，找运维开白名单：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl cip.cc  # 查看出口ip
nslookup 域名  # 查看被访ip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;42-执行用例&quot;&gt;4.2 执行用例&lt;/h3&gt;

&lt;p&gt;（1）上传用例&lt;/p&gt;

&lt;p&gt;​    登录master机器，上传jmx文件放到 /taf 目录下&lt;/p&gt;

&lt;p&gt;（2）/taf 目录下，执行：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nohup jmeter -n -t xxx.jmx -r &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​    若需要生成jmeter原生报告（.jtl），则使用以下命令：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nohup jmeter -n -t xxx.jmx -r -l report.jtl &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​    备注：nohup 是为了将进程放到后台运行，避免跳板机中断导致的各种问题。如，强制中断会导致无法停止运行，下次执行出现Engine is busy，此时需要清理环境（详见3.4）。&lt;/p&gt;

&lt;h3 id=&quot;43-停止测试&quot;&gt;4.3 停止测试&lt;/h3&gt;

&lt;p&gt;​    登录master机器，根目录执行命令：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;stoptest.sh
shutdown.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;五测试结果查看&quot;&gt;五、测试结果查看&lt;/h2&gt;

&lt;h3 id=&quot;51-查看当前执行情况&quot;&gt;5.1 查看当前执行情况&lt;/h3&gt;

&lt;p&gt;​    登录master机器，进入执行用例的目录，执行命令：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat nohup.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;52-jmeter原生报告&quot;&gt;5.2 Jmeter原生报告&lt;/h3&gt;

&lt;p&gt;（1）执行用例时使用 -l 生成 .jtl 报告&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nohup jmeter -n -t xxx.jmx -r -l report.jtl &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;（2）.jtl 转 .html&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;jmeter -g report.jtl所在目录 -o 生成结果目录
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396612_24_w1903_h1416.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;53-grafana实时图表&quot;&gt;5.3 grafana实时图表&lt;/h3&gt;

&lt;p&gt;​    后端监听器将测试结果传入influxdb，grafana再从influxdb读取数据进行展示。方便实时查看测试结果。&lt;/p&gt;

&lt;p&gt;​    &lt;img src=&quot;https://git.code.oa.com/dcsiq_sec_gz/tars_jmeter/raw/master/res/network.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;​     &lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396649_51_w3502_h1996.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;六常用测试指标&quot;&gt;六、常用测试指标&lt;/h2&gt;

&lt;h3 id=&quot;61-qps&quot;&gt;6.1 QPS&lt;/h3&gt;

&lt;p&gt;​    QPS是后台服务压测最常见的指标。&lt;/p&gt;

&lt;p&gt;​    影响QPS的可能因素有很多，从宏观归结来看，主要可以分为两个：耗时、CPU。不同因素的影响，通常都是对耗时和CPU产生影响。&lt;/p&gt;

&lt;h3 id=&quot;如何测试qps极限值&quot;&gt;如何测试QPS极限值？&lt;/h3&gt;

&lt;p&gt;​    &lt;strong&gt;预估最大值QPS = 1000ms / CPU Time x CPU核数 x CPU使用率&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;​    但实际测试过程中，由于种种原因，通常会遇到没有压到预期最大QPS的情况。比如，CPU使用率没有压满，但QPS不再上涨。如何判断此时的QPS是否已经达到极限值？&lt;/p&gt;

&lt;p&gt;​    根据实践经验总结，随着压测线程数的增加，会得到一个QPS极限值。之后再增加线程数，会导致响应耗时上涨，而QPS不再变化。因此我们需要通过设置合理的线程数，来达到该极限值：&lt;/p&gt;

&lt;p&gt;​    1、验证单个请求的响应时间（RT）&lt;/p&gt;

&lt;p&gt;2、&lt;strong&gt;预估线程数 = RT x CPU核数 x 单CPU使用率 = RT x CPU核数 x 100%&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;​     &lt;strong&gt;&lt;img src=&quot;http://km.oa.com/files/photos/pictures/202006/1592396669_87_w823_h356.png&quot; alt=&quot;img&quot; /&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;62-耗时&quot;&gt;6.2 耗时&lt;/h3&gt;

&lt;p&gt;​    &lt;strong&gt;客户端RT = 服务端RT + 网络开销 = CPU Time + Wait Time + 网络开销&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;​    由于使用内网压测，避免了网络开销对耗时的影响。因此这里的耗时基本上是服务端本身的响应耗时。&lt;/p&gt;

&lt;p&gt;​    RT通常会随着压测线程数增加而上涨，因此这里会取QPS达到极限值时的响应耗时。TMF一般要求服务响应耗时在300ms之内。&lt;/p&gt;

&lt;h3 id=&quot;63-错误率&quot;&gt;6.3 错误率&lt;/h3&gt;

&lt;h3 id=&quot;64-cpu使用率&quot;&gt;6.4 CPU使用率&lt;/h3&gt;

&lt;p&gt;​    CPU使用率通常可以作为参考标准，用以判断QPS是否已达到预期极限值。假设被测环境为4核CPU，CPU使用率被压满可到400%（实际通常到380%-390%，服务器自身预留）。&lt;/p&gt;

&lt;p&gt;​    如果CPU使用率未被压满，但QPS已经到达极限值，则需要排查瓶颈点。根据经验总结，瓶颈通常为后端服务。（如：压测网关，但后端转发服务耗时高）&lt;/p&gt;

&lt;h2 id=&quot;七测试场景&quot;&gt;七、测试场景&lt;/h2&gt;

&lt;p&gt;​    根据不同需求（被测服务）的要求，通常会选择不同的测试场景。目前TMF压测中，负载测试和稳定性测试为必选项。&lt;/p&gt;

&lt;h3 id=&quot;71-基准测试&quot;&gt;7.1 基准测试&lt;/h3&gt;

&lt;p&gt;​    在给系统施加较低压力时，查看系统的运行状况并记录相关数据作为基础。&lt;/p&gt;

&lt;h3 id=&quot;72-负载测试&quot;&gt;7.2 负载测试&lt;/h3&gt;

&lt;p&gt;​         是指对系统不断地增加压力或增加一定压力下的持续时间，知道系统的某项或多项性能指标达到安全临界值，例如某种资源已经达到饱和状态等。&lt;/p&gt;

&lt;h3 id=&quot;73-压测测试&quot;&gt;7.3 压测测试&lt;/h3&gt;

&lt;p&gt;​        压力测试是评估系统处于或超过预期负载时的运行情况，关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。&lt;/p&gt;

&lt;h3 id=&quot;74-稳定性测试&quot;&gt;7.4 稳定性测试&lt;/h3&gt;

&lt;p&gt;​    在给系统加载一定业务压力的情况下，给系统运行一段时间，以此检测系统是否稳定。&lt;/p&gt;

&lt;h3 id=&quot;75-并发测试&quot;&gt;7.5 并发测试&lt;/h3&gt;

&lt;p&gt;​    测试多个用户同时访问同一应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。&lt;/p&gt;

&lt;h3 id=&quot;76-高耗时测试&quot;&gt;7.6 高耗时测试&lt;/h3&gt;

&lt;p&gt;​    验证后端调用服务返回耗时高的情况下，当前被压测服务的处理情况。&lt;/p&gt;

&lt;h2 id=&quot;八问题定位&quot;&gt;八、问题定位&lt;/h2&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;待补充 ## 九、压测心得
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ol&gt;
  &lt;li&gt;压测过程出现性能瓶颈，若压测机任务管理器查看到的cpu、网络都正常，未达到90%以上，则可以说明服务器有问题，压力机没有问题&lt;/li&gt;
  &lt;li&gt;通常影响性能的因素可能包括：数据库、应用程序、中间件、网络、操作系统等&lt;/li&gt;
  &lt;li&gt;若吞吐量大于并发数，则可以慢慢的往上面增加；若压测机性能很好的情况下，出现吞吐量小于并发数，说明并发数不能再增加了，可以慢慢往下减，找到最佳的并发数&lt;/li&gt;
  &lt;li&gt;在实际的业务过程中，请求之间是有一定时间的停顿的，所以在请求之间设置合理的延时是必须的，也是更接近用户真实业务情况。除此之外，在大多数时候如果要在压测过程中完全模拟真实业务场景，还需要做大量的功能调研与用户使用调研，尽可能实现场景的真实覆盖，只有越接近真实，才能尽早挖掘出系统的瓶颈和准确评估系统的性能指标。&lt;/li&gt;
&lt;/ol&gt;</content><author><name>Kaka</name></author><summary type="html">如何开展分布式压测？</summary></entry><entry><title type="html">Jmeter常用操作(1)_打印时间戳</title><link href="https://nnnnmkaka.github.io/2020/06/16/jmeter-Print-timestamp/" rel="alternate" type="text/html" title="Jmeter常用操作(1)_打印时间戳" /><published>2020-06-16T00:00:00+00:00</published><updated>2020-06-16T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/06/16/jmeter-Print%20timestamp</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/06/16/jmeter-Print-timestamp/">&lt;h2 id=&quot;1jmeter常用操作1_打印时间戳&quot;&gt;1、Jmeter常用操作(1)_打印时间戳&lt;/h2&gt;

&lt;p&gt;&lt;br /&gt;
&lt;strong&gt;Jmeter中提供了一种函数，可以打印时间戳，如下图：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/2020-06-16-jmeter-Print%20timestamp_1.png?raw=true&quot; alt=&quot;image-20200616150259736&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;关于时间戳的格式，可以自由组合定义，例如：&lt;strong&gt;&lt;font color=&quot;red&quot;&gt;yyyy-MM-dd HH:mm:ss&lt;/font&gt;&lt;/strong&gt;，生成的函数：${__time(yyyy-MM-dd HH:mm:ss,)}&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;年&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;月&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;日&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;时&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;分&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;秒&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;yyyy&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;MM&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;dd&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;HH&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;mm&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;ss&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;将上图生成的函数，写入下一个接口：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/2020-06-16-jmeter-Print%20timestamp_3.png?raw=true&quot; alt=&quot;image-20200616154310388&quot; /&gt;&lt;/p&gt;

&lt;p&gt;执行，查看结果树，可以看到结果中，将当前时间打印出来了哦~&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/2020-06-16-jmeter-Print%20timestamp_4.png?raw=true.png&quot; alt=&quot;image-20200616154426444&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
此函数适用于一些需要填写时间参数的接口，用于实时获取当前时间。时间参数如果写死的话，过段时间接口就会报错啦~&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;下面说一下&lt;font color=&quot;red&quot;&gt;时间偏移如何打印&lt;/font&gt;。&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;说到时间偏移，就是说我不光想打印当前时间，我还想打印明天，后台，甚至是明年的时间，那么我们要怎么去处理?这里就需要用到 &lt;strong&gt;BeanShell Sampler&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;添加BeanShell取样器&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/2020-06-16-jmeter-Print%20timestamp_6.png?raw=true&quot; alt=&quot;image-20200616155451772&quot; /&gt;&lt;/p&gt;

&lt;p&gt;添加脚本：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/2020-06-16-jmeter-Print%20timestamp_7.png?raw=true&quot; alt=&quot;image-20200616161549491&quot; /&gt;&lt;/p&gt;

&lt;p&gt;附:脚本代码&lt;/p&gt;
&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;java.text.SimpleDateFormat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;java.util.Calendar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;java.util.Date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;Date&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//获取当前时间&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;SimpleDateFormat&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sf&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SimpleDateFormat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yyyy-MM-dd HH:mm:ss&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;nowDate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;Calendar&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Calendar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getInstance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setTime&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nowDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Calendar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;DAY_OF_YEAR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;//此处+0为当前时间，+1为加1天，类推&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;orderDate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getTime&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Calendar&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;DAY_OF_YEAR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;365&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;//此处在之前的时间变量基础上叠加，1为一天，365为一年&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;senderDate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getTime&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;vars&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;orderDate&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;orderDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;vars&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;senderDate&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;senderDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;//传递两个变量，orderDate和senderDate&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/2020-06-16-jmeter-Print%20timestamp_8.png?raw=true&quot; alt=&quot;image-20200616161933144&quot; /&gt;&lt;/p&gt;

&lt;p&gt;执行后，查看结果树：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/2020-06-16-jmeter-Print%20timestamp_9.png?raw=true&quot; alt=&quot;image-20200616162300701&quot; /&gt;&lt;/p&gt;</content><author><name>Kaka</name></author><summary type="html">1、Jmeter常用操作(1)_打印时间戳</summary></entry><entry><title type="html">Jmeter常用操作(2)_代理服务器录制脚本</title><link href="https://nnnnmkaka.github.io/2020/06/16/jmeter-Record-script/" rel="alternate" type="text/html" title="Jmeter常用操作(2)_代理服务器录制脚本" /><published>2020-06-16T00:00:00+00:00</published><updated>2020-06-16T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/06/16/jmeter-Record-script</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/06/16/jmeter-Record-script/">&lt;h2 id=&quot;1jmeter常用操作2_代理服务器录制脚本&quot;&gt;1、Jmeter常用操作(2)_代理服务器录制脚本&lt;/h2&gt;

&lt;p&gt;&lt;br /&gt;今天重点说一下jmeter如何利用自身的代理服务器录制脚本：&lt;/p&gt;

&lt;p&gt;（1）创建代理服务器：Test Plan —&amp;gt;右键选添加—&amp;gt;非测试元件—&amp;gt;HTTP代理服务器。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;C:\Users\v_zhyawang\AppData\Roaming\Typora\typora-user-images\image-20200616170059190.png&quot; alt=&quot;image-20200616170059190&quot; /&gt;&lt;/p&gt;

&lt;p&gt;（2）配置代理，选择录制控制器&lt;/p&gt;</content><author><name>Kaka</name></author><summary type="html">1、Jmeter常用操作(2)_代理服务器录制脚本</summary></entry><entry><title type="html">Jmeter的安装与配置</title><link href="https://nnnnmkaka.github.io/2020/06/16/jmeter-installation-and-configurationr/" rel="alternate" type="text/html" title="Jmeter的安装与配置" /><published>2020-06-16T00:00:00+00:00</published><updated>2020-06-16T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/06/16/jmeter-installation-and-configurationr</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/06/16/jmeter-installation-and-configurationr/">&lt;h2 id=&quot;1环境部署&quot;&gt;1、环境部署&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;安装jmeter之前，需要安装并配置好jdk，参考&lt;a href=&quot;https://blog.csdn.net/qq_39720249/article/details/80721719&quot;&gt;【window10】jdk8的下载和安装步骤&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;jmeter安装与配置，参考&lt;a href=&quot;https://blog.csdn.net/qq_39720249/article/details/80721777&quot;&gt;故三殇【Jmeter 下载、安装、汉化】&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2jmeter目录介绍&quot;&gt;2、Jmeter目录介绍&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/image-20200615213126504.png?raw=true&quot; alt=&quot;image-20200615213126504&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bin                       包含启动、配置等相关命令

docs                      官方本地文档目录

extras                    辅助库

lib                       核心库，包含 JMeter 用到的各种基础库和插件

licenses                  包含 non-ASF 软件的许可证

printable_docs            可打印版本文档目录

LICENSE JMeter            许可说明

NOTICE JMeter             简单信息说明

README.md JMeter          官方基本介绍
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;21bin-目录如图&quot;&gt;2.1bin 目录，如图：&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/image-20200615213503142.png?raw=true&quot; alt=&quot;image-20200615213503142&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;jmeter.properties JMeter  核心配置文件，各种配置基本在这完成

log4j.conf JMeter         日志配置管理

jmeter.log JMeter         运行日志记录，什么输出信息、警告、报错都在这里进行了记录

jmeter.bat                windows 下 jmeter 启动文件

shutdown.cmd              windows 下 jmeter 关闭文件

stoptest.cmd              windows 下 jmeter 测试停止文件

jmeter-server.bat         windows 下 jmeter 服务器模式启动文件
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;22关键配置&quot;&gt;2.2&lt;font color=&quot;red&quot;&gt;关键配置：&lt;/font&gt;&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#默认语言设置   
language=en

#捕捉cookie开关
CookieManager.save.cookies=true

#配置编辑器的字体和尺寸
jsyntaxtextarea.font.family=宋体
jsyntaxtextarea.font.size=20

#配置默认编码格式
sampleresult.default.encoding=UTF-8

# 配置远程主机host
remote_hosts=127.0.0.1

# 设置日志输出级别
log_level.jmeter=INFO

# 设置junit日志输出级别
log_level.jmeter.junit=DEBUG

# 设置输出报告模板格式
jmeter.save.saveservice.output_format = csv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;23面板&quot;&gt;2.3：面板&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/nnnnmkaka/nnnnmkaka.github.io/blob/master/images/posts/Jmeter/image-20200615215304478.png?raw=true&quot; alt=&quot;image-20200615215304478&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;strong&gt;快捷菜单栏功能（从左到右）&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;● 新建测试计划
● 选择测试计划模板创建一个新的测试计划
● 选择已经存在的测试计划并打开
● 关闭当前脚本
● 保存测试计划
● 另存测试计划
● 删除选定的元件，如果元件是父节点，那么其子节点元件也一同被删除
● 复制选定的元件及子元件
● 粘贴复制的元件及子元件
● 展开目录树
● 收起目录树
● 禁用或者启用元件，禁用元件的子元件也会被禁用
● 本机开始运行当前测试计划，按线程组的设置来启动
● 立即开始在本机运行当前测试计划
● 停止运行状态的测试计划，当前线程执行完成后停止
● 停止运行测试计划，立即终止，类似于杀进程
● 开启远程运行测试计划
● 停止运行远程测试计划，当前线程执行完成后停止
● 停止运行远程测试计划，类似于杀进程
● 清除运行过程中元件显示的响应数据，比如查看结果树中的内容，聚合报告中的内容，但不能清除日志控制台中的内容
● 清除所有元件的响应数据，包括日志
● 查找
● 清除查找 
● 函数助于对话框，这些函数在做参数化时会用到
● 帮助文档快捷方式
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name>Kaka</name></author><summary type="html">1、环境部署</summary></entry><entry><title type="html">测试用例的设计</title><link href="https://nnnnmkaka.github.io/2020/06/09/test-case/" rel="alternate" type="text/html" title="测试用例的设计" /><published>2020-06-09T00:00:00+00:00</published><updated>2020-06-09T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/06/09/test-case</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/06/09/test-case/">&lt;font face=&quot;微软雅黑&quot;&gt;&amp;emsp;&amp;emsp;作为一个测试工程师，你的目标是要保证系统在各种应用场景下的功能是符合设计要求的，所以你需要考虑的测试用例就需要更多。&lt;/font&gt;
&lt;p&gt;&lt;br /&gt; 
一般在工作中常用的用例设计方法有以下两种：&lt;/p&gt;

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;等价类划分法&lt;/strong&gt;：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;font color=gray&amp;gt;将所有可能的输入数据划分成若干个子集，在每个子集中，如果任意一个输入数据对于揭露程序中潜在错误都具有同等效果，那么这样的子集就构成了一个等价类。后续只要从每个等价类中任意选取一个值进行测试，就可以用少量具有代表性的测试输入取得较好的测试覆盖效果。”&amp;lt;/font&amp;gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;边界值分析法&lt;/strong&gt;：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;font color=gray&amp;gt;选取输入、输出的边界值进行测试。因为通常大量的软件错误是发生在输入或输出范围的边界上，所以需要对边界值进行重点测试，通常选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。”&amp;lt;/font&amp;gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;针对“&amp;lt;font color=red&amp;gt;&lt;strong&gt;用户登录&lt;/strong&gt;&amp;lt;/font&amp;gt;”功能，基于等价类划分和边界值分析方法，我们设计的测试用例包括：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;序号&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;用例&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;需求类型&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;输入已注册的用户名和正确的密码，验证是否登录成功；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;输入已注册的用户名和不正确的密码，验证是否登录失败，并且提示信息正确；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;3&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;输入未注册的用户名和任意密码，验证是否登录失败，并且提示信息正确；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;4&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户名和密码两者都为空，验证是否登录失败，并且提示信息正确；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;5&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户名和密码两者之一为空，验证是否登录失败，并且提示信息正确；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;6&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;如果登录功能启用了验证码功能，在用户名和密码正确的前提下，输入正确的验证码，验证是否登录成功；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;7&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;如果登录功能启用了验证码功能，在用户名和密码正确的前提下，输入错误的验证码，验证是否登录失败，&lt;br /&gt;并且提示信息正确；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;8&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户名和密码是否大小写敏感；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;9&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;页面上的密码框是否加密显示；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;10&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;后台系统创建的用户第一次登录成功时，是否提示修改密码；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;11&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;忘记用户名和密码的功能是否可用；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;12&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;前端页面是否根据设计要求限制用户名和密码长度；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;13&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;如果登录功能需要验证码，点击验证码图片是否可以更换验证码，更换后的验证码是否可用；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;14&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;刷新页面是否会刷新验证码；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;15&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;如果验证码具有时效性，需要分别验证时效内和时效外验证码的有效性；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;16&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户登录成功但是会话超时后，继续操作是否会重定向到用户登录界面；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;17&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;不同级别的用户，比如管理员用户和普通用户，登录系统后的权限是否正确；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;18&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;页面默认焦点是否定位在用户名输入框中；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;19&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;快捷键Tab和Enter等，是否可以正常使用；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;显式功能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;20&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户密码后台存储是否加密；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;21&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户密码在网络传输过程中是否加密；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;22&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;密码是否具有有效期，密码有效期到期后，是否提示需要修改密码；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;23&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;不登录的情况下，在浏览器中直接输入登录后的URL地址，验证是否会重新定向到用户登录界面；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;24&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;密码输入框是否不支持复制和粘贴；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;25&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;密码输入框内输入的密码是否都可以在页面源码模式下被查看；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;26&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户名和密码的输入框中分别输入典型的“SQL注入攻击”字符串，验证系统的返回页面；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;27&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;用户名和密码的输入框中分别输入典型的“XSS跨站脚本攻击”字符串，验证系统的行为是否被篡改；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;28&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;连续多次登录失败的情况下，系统是否会阻止后续的尝试以应对暴力破解；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;29&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;同一用户在同一终端的多种浏览器上登录，验证登录功能的互斥性是否符合设计预期；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;30&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;同一用户先后在多台终端的浏览器上登录，验证登录是否具有互斥性；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;安全性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;31&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;单用户登录的响应时间是否小于3秒；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;性能压力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;32&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;单用户登录时，后台请求数量是否过多；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;性能压力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;33&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;高并发场景下用户登录的响应时间是否小于5秒；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;性能压力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;34&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;高并发场景下服务端的监控指标是否符合预期；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;性能压力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;35&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;高集合点并发场景下，是否存在资源死锁和不合理的资源等待；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;性能压力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;36&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;长时间大量用户连续登录和登出，服务器端是否存在内存泄漏；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;性能压力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;37&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;不同浏览器下，验证登录页面的显示以及功能正确性；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;兼容性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;38&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;相同浏览器的不同版本下，验证登录页面的显示以及功能正确性；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;兼容性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;39&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;不同移动设备终端的不同浏览器下，验证登录页面的显示以及功能正确性；&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;兼容性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;40&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;不同分辨率的界面下，验证登录页面的显示以及功能正确性。&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;兼容性&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kaka</name></author><summary type="html">&amp;emsp;&amp;emsp;作为一个测试工程师，你的目标是要保证系统在各种应用场景下的功能是符合设计要求的，所以你需要考虑的测试用例就需要更多。 一般在工作中常用的用例设计方法有以下两种：</summary></entry><entry><title type="html">Fiddler 之高级应用</title><link href="https://nnnnmkaka.github.io/2020/05/28/Advanced-application-of-fiddler/" rel="alternate" type="text/html" title="Fiddler 之高级应用" /><published>2020-05-28T00:00:00+00:00</published><updated>2020-05-28T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/05/28/Advanced-application-of-fiddler</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/05/28/Advanced-application-of-fiddler/">&lt;h3 id=&quot;网速限速&quot;&gt;网速限速&lt;/h3&gt;

&lt;p&gt;我们为什么要限速？
限速对于web前端研发是非常重要的，由于开发者的机器一般配置都很高，并且是在localhost下来调试程序，所以很难模拟到用户的真实使用情况，如正在下载JS,css等静态资源的时候，页面的一个渲染情况。
当网速很慢的时候，我们更希望看到的是先渲染出用户界面，而不是让用户看到一片空白。那么这个时候，网络限速就能很方便在localhost针对类似的情况来做性能调试与优化。&lt;/p&gt;

&lt;p&gt;方法一：Fiddler script（自定义延时）&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;需要的插件：Fiddler script，下载地址：http://www.telerik.com/download/fiddler/fiddlerscript-editor
下载完直接安装就行了，安装之前必须关闭fiddler，再打开fiddler就会在右侧tab看到fiddler script选项
fiddler script原理：把请求完全代码化
Eg：模拟延时3s发送请求：
选中会话，在fiddler-script——&amp;gt;Go to-&amp;gt;OnBeforeRequest添加代码如下：
oSession[&quot;request-trickle-delay&quot;] = &quot;3000&quot;
点击save script保存，再replay会话就会发现会话延迟了三秒才发送
延时响应同理
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;fiddler断点调试&quot;&gt;fiddler断点调试&lt;/h3&gt;

&lt;p&gt;设置断点有两种方法:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;第一种：打开Fiddler 点击Rules-&amp;gt; Automatic Breakpoint -&amp;gt;Before Requests(这种方法会中断所有的会话)

如何消除命令呢？ 点击Rules-&amp;gt; Automatic Breakpoint -&amp;gt;Disabled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;第二种: 在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com)

如何消除命令呢？ 在命令行中输入命令 bpu
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;看个实例，模拟QQ邮箱的登录，输入错误的用户名和密码，用Fiddler中断会话，修改成正确的用户名密码,这样就能成功登录:&lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;登录qq邮箱，输入错误的密码&lt;/li&gt;
    &lt;li&gt;打开Fiddler, 在命令行中输入bpu&lt;/li&gt;
    &lt;li&gt;输入错误的用户名和密码 点击登录&lt;/li&gt;
    &lt;li&gt;Fiddler 能中断这次会话，选择被中断的会话，点击Inspectors tab下的WebForms tab 修改用户名密码，然后点击Run to Completion。&lt;/li&gt;
    &lt;li&gt;结果是正确地登录了qq邮箱&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;禁用缓存&quot;&gt;禁用缓存&lt;/h3&gt;

&lt;p&gt;两种方法，一种暂时的，一种永久的（通过fiddler script）&lt;/p&gt;

&lt;p&gt;暂时的方法：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Tools-&amp;gt;Performance-&amp;gt;Disable Caching
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;永久的方法：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;在fiddler script里查找

&amp;gt; var m_DisableCaching: boolean = false;

把值改成true并保存就可以了
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;扩展fiddler-script的一些用法&quot;&gt;扩展Fiddler script的一些用法&lt;/h3&gt;

&lt;h5 id=&quot;实例-让所有qq的会话都显示红色&quot;&gt;&lt;em&gt;实例 :让所有qq的会话都显示红色&lt;/em&gt;&lt;/h5&gt;
&lt;hr /&gt;

&lt;p&gt;把这段脚本放在OnBeforeRequest(oSession: Session) 方法下，并且点击”Save script”&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;HostnameIs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;www.cnblogs.com&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

      &lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ui-color&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;red&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;这样所有的&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cnblogs&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;的会话都会显示红色&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;如何在fiddler-script中修改cookie&quot;&gt;&lt;em&gt;如何在Fiddler Script中修改Cookie&lt;/em&gt;&lt;/h5&gt;
&lt;hr /&gt;

&lt;p&gt;cookie其实就是request 中的一个header.&lt;/p&gt;
&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// 删除所有的cookie&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Remove&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// 新建cookie&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;username=testname;testpassword=P@ssword1&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;注意: Fiddler script不能直接删除或者编辑单独的一个cookie， 你需要用replace方法或者正则表达式的方法去操作cookie的string&lt;/p&gt;

&lt;p&gt;复制代码&lt;/p&gt;
&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;OnBeforeRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Session&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 

   &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;HostnameIs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;www.example.com&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; 

         &lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;uriContains&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;pagewithCookie&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
         &lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Contains&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; 

   &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 

   &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;sCookie&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt; 

   &lt;span class=&quot;c1&quot;&gt;//  用replace方法或者正则表达式的方法去操作cookie的string&lt;/span&gt;

   &lt;span class=&quot;nx&quot;&gt;sCookie&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;sCookie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Replace&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;cookieName=&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ignoreme=&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 

   &lt;span class=&quot;nx&quot;&gt;oSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;oRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;sCookie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 

  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;一点小的tips&quot;&gt;&lt;em&gt;一点小的tips：&lt;/em&gt;&lt;/h5&gt;
&lt;hr /&gt;
&lt;p&gt;1、我在使用Fiddler的过程中碰到过无法抓包的情况，原因是之前因为测试配置了autoresponder或者filter等没有改回去，如果碰到这个情况请确保Fiddler的选项都配置正确&lt;/p&gt;

&lt;p&gt;2、chrome和firefox浏览器无法被监听
fiddler安装之后，默认会在IE浏览器中安装一个fiddler的插件，所以它对IE及国内基于IE内核的各类浏览器都能实现监听，但其他内核的浏览器无法被监听。&lt;/p&gt;

&lt;p&gt;解决办法：禁用chrome和firefox中具有代理功能的插件，比如chrome如果安装了switchSharp，禁用它或选择“使用系统代理设置”&lt;/p&gt;</content><author><name>Kaka</name></author><summary type="html">网速限速</summary></entry><entry><title type="html">Fiddler 之安装willow插件</title><link href="https://nnnnmkaka.github.io/2020/05/28/Fiddler-installation-willow-plugin/" rel="alternate" type="text/html" title="Fiddler 之安装willow插件" /><published>2020-05-28T00:00:00+00:00</published><updated>2020-05-28T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/05/28/Fiddler-installation-willow-plugin</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/05/28/Fiddler-installation-willow-plugin/">&lt;p&gt;Willow是一个Fiddler的插件，提供重定向和host主机等功能，通过可视化的方式去管理host
注：Fiddler2和Fiddler4，对应的Willow插件版本也是不一样的&lt;/p&gt;

&lt;h3 id=&quot;willow的下载与安装&quot;&gt;Willow的下载与安装&lt;/h3&gt;

&lt;p&gt;Fiddler4的Willow插件下载地址：https://github.com/QzoneTouch/commonWidget/releases&lt;br /&gt;
官方说明：https://qzonetouch.github.io/commonWidget/willow&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img1.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;安装插件之前，需要把fiddler客户端关闭，下载完插件压缩包之后，将其放到fiddler的安装目录中解压，如有文件重复就需要替换&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img2.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;文件解压完成后，重新启动Fiddler，在右边的窗口中，可看到willow插件，至此，willow安装成功！&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img3.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;注：win10安装willow前需先安装.NET framework3.5&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;下面介绍，安装.NET framework3.5的方法：&lt;/p&gt;

&lt;h3 id=&quot;win10安装net-framework35&quot;&gt;win10安装.NET framework3.5&lt;/h3&gt;

&lt;p&gt;随便在一个盘新建一个文件夹，将下载的win10操作系统镜像盘解压到文件夹中；&lt;/p&gt;

&lt;p&gt;以管理员身份运行cmd，输入如下命令：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;DISM.exe /Online /Enable-Feature /FeatureName:NetFX3 /Source:F:\win10\sources\sxs；
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;可能会出现如下错误：“未识别命令”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img4.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;解决办法是输入dism.exe /?，在帮助命令中找到所要用的命令，复制粘贴，递归上述步骤，直至复制示例的完整的命令DISM.exe /Online /Enable-Feature /FeatureName:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img5.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;然后补上后面的参数，路径地址为自己解压的系统文件夹下\sources\sxs文件夹整个路径。&lt;/p&gt;

&lt;p&gt;回车运行，100%后显示操作成功。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img6.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;可在控制面板程序和功能-&amp;gt;启用或关闭Windows功能查看，.Net framework3.5前复选框已选择则安装成功。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img7.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/fiddler/2020-05-28-Fiddler-installation-willow-plugin-img8.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;</content><author><name>Kaka</name></author><summary type="html">Willow是一个Fiddler的插件，提供重定向和host主机等功能，通过可视化的方式去管理host 注：Fiddler2和Fiddler4，对应的Willow插件版本也是不一样的</summary></entry><entry><title type="html">vmware安装与使用教程</title><link href="https://nnnnmkaka.github.io/2020/05/28/vmware/" rel="alternate" type="text/html" title="vmware安装与使用教程" /><published>2020-05-28T00:00:00+00:00</published><updated>2020-05-28T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/05/28/vmware</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/05/28/vmware/">&lt;h3 id=&quot;vmware安装与使用教程&quot;&gt;vmware安装与使用教程&lt;/h3&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h4 id=&quot;一vmware安装&quot;&gt;一、vmware安装&lt;/h4&gt;

&lt;p&gt;&amp;lt;font color=red&amp;gt;官方下载网址：&amp;lt;/font&amp;gt;&lt;a href=&quot;https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0&quot;&gt;点我下载&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1、点击下载链接，进入下载页面，选择适合自己的版本，点击“转至下载”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/595f7c49720d9d14b7856b8c66909586e8c0443fc0ac1b3d/0&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2、点击立即下载&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/1a1c3f0aeef787f90a4c840a59aa494417920bf92d3b261f/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;3、点立即下载这里会跳到登录页面，不想注册这么麻烦的话，直接用我下好的安装包就可以了&lt;/p&gt;

&lt;p&gt;链接: &lt;a href=&quot;http://xn--: https-zg1ss654b//pan.baidu.com/s/1TbJwmBqQkz8Lp8UVRk6RVw 提取码: 839n 复制这段内容后打开百度网盘手机App，操作更方便哦&quot;&gt;https://pan.baidu.com/s/1TbJwmBqQkz8Lp8UVRk6RVw &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;提取码: 839n&lt;/p&gt;

&lt;p&gt;4、点击.exe文件开始安装&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/5b5d7e4be8ab39aaf2232a76d0c3021bb4d27fd9f81cdbf7/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;选择下一步&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/494f6c59d79a9742943324a995b1a56acf56fbf42db95df5/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;安装位置自定义：如D:\&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/5e587b4e9f9f7f21953857e379db2da9e8072a2d1347e612/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;继续下一步，等待安装完成。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/b4b291a40c06aec5247da1fb8314fd058339280e9ed05c9f/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/46406356ba98adc15bdaa157734dd5725b0c99df02a0336e/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;5、安装完成后，第一次运行程序会要求输入激活码，分享我自己百度的激活码。&lt;/p&gt;

&lt;p style=&quot;text-indent:4em&quot;&gt;YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8&lt;/p&gt;
&lt;p style=&quot;text-indent:4em&quot;&gt;UG5J2-0ME12-M89WY-NPWXX-WQH88&lt;/p&gt;
&lt;p style=&quot;text-indent:4em&quot;&gt;UA5DR-2ZD4H-089FY-6YQ5T-YPRX6&lt;/p&gt;
&lt;p style=&quot;text-indent:4em&quot;&gt;GA590-86Y05-4806Y-X4PEE-ZV8E0&lt;/p&gt;
&lt;p style=&quot;text-indent:4em&quot;&gt;ZF582-0NW5N-H8D2P-0XZEE-Z22VA&lt;/p&gt;
&lt;p style=&quot;text-indent:4em&quot;&gt;YA18K-0WY8P-H85DY-L4NZG-X7RAD&lt;/p&gt;
&lt;center&gt;激活成功后会进入如下图所示页面&lt;/center&gt;
&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/4a4c6f5a85ddd2a0826925251dc77c0f7d32437be10ed285/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h4 id=&quot;二wmware新建虚拟机以win8为例&quot;&gt;二、wmware新建虚拟机（以win8为例）&lt;/h4&gt;

&lt;p&gt;&amp;lt;font color=red&amp;gt;需要提前下载好镜像文件：&amp;lt;/font&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/0b0d231b27db070e812e7fe2fd347dfab4612b6bdfde567c/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;1、点击“创建新的虚拟机”：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/ded8fbce73ad25ecd81e99ca440ca721533faf20e55a975e/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2、选择”典型”配置：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/f4f2d1e4e1557b67f35714da9bf4d21d3f65fc32dd6479f7/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;3、选择稍后安装操作系统（S）：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/1c1a390caf7f9b4e64dc9b57449f55eec22ece35290a4e61/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;4、因为安装的是Windows8_x64，故选择下面的信息：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/8781a2976800c02891e92254edc74ca32039ffdf56703963/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;5、根据自己的情况选择磁盘以及文件夹来存放虚拟系统：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/b9bf9ca957019aec915e183ffe0b9f2138066246b90dc137/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;6、设置硬盘大小，一般按照默认设置来：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/e9efccf9a62022ae8f715743a6e455fe64f63307d6ffe43b/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;7、点击“自定义硬件”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/d9dffcc9c681de9dabbdaa4db9ac32e36f394b2ba00058ff/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;8、在左边点击CD/DVD，勾选启动时链接，选择使用ISO映像文件，点击“浏览”，将我们下载好的ios镜像文件添加到这里面来。点击下面的”高级“，选择第三个”IDE“点击确定。然后关闭硬件设置：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/010724119d3385dcd0963716b07c54998d4179c0f6e6db88/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;9、回到以下界面，选择“完成”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/0d0b281d1e4396c9a0399554285e38f6e970ffa23c72667e/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;三在虚拟机中安装win8系统&quot;&gt;三、在虚拟机中安装win8系统&lt;/h4&gt;

&lt;p&gt;点击“开启虚拟机”，然后安照指引一直点击下一步操作，安装过程中虚拟机中的电脑会重启几次，系统激活码可以百度找一个可以用的，也可以使用“小马激活工具”进行激活。&lt;/p&gt;

&lt;p&gt;以下&lt;strong&gt;xp系统激活码&lt;/strong&gt;都是可用的&lt;/p&gt;

&lt;p&gt;MRX3F-47B9T-2487J-KWKMF-RPWBY(工行版) 可用(强推此号)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/6365467378a34ff9e74d19f662bb88fdb2a59ef21c9dc23b/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/64624174dd47ca77a70e33797eed0a903beb82ca409e0e63/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/13153603356589373476d426394de7a9d4805e8fe3b0ac1c/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/a4a283b4a36f11656ca11a3d14ba51f1fc224fcc802e0061/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/2e280b3e970bd6bdb565596ab5c01d8e07c68a631076cc9d/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/f7f1d2e7d4c5eda2441912ba205c138946c0ad3372f19772/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/ebedcefb3ea331ada467984a203dce651ba060e12ae11130/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/8e88ab9e57468c4ef1a3b777c459aa69943c709bd4451fab/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/797f5c69588193744ac9e297af4efce35cf8f62b458f1fca/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/8e88ab9e5d8bab839c50da2ef891b22fdbca1963dbfb4a24/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;可能遇到的问题&quot;&gt;可能遇到的问题&lt;/h3&gt;

&lt;h4 id=&quot;1虚拟机上不了外网&quot;&gt;1、虚拟机上不了外网？&lt;/h4&gt;

&lt;p&gt;这是因为自己的主机（物理机）电脑入域后，8000给我们配置了代理上网，虚拟机也要设置代理才能上外网。&lt;/p&gt;

&lt;p&gt;打开虚拟机控制面板—网络和 Internet—Internet选项—连接—局域网设置—使用自动配置脚本，地址输入:http://txp-01.tencent.com/proxy.pac 即可。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/babc92aa4c12669cf8cd3beae69320f4f257a9a29b6be554/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;2虚拟机不能全屏&quot;&gt;2、虚拟机不能全屏？&lt;/h4&gt;

&lt;p&gt;新安装的虚拟机都是不能全屏的，安装vmware tools后即可（win7系统可能会提示先升级到sp1）。安装vmware tools具体方法可百度，也可参考这篇博客【&lt;a href=&quot;https://blog.csdn.net/qq_39720249/article/details/83858332&quot;&gt;解决 win 7 虚拟机系统屏幕没有适应 vmware 窗口全屏问题&lt;/a&gt;】。&lt;/p&gt;

&lt;h4 id=&quot;3虚拟机里面的系统提示网线电缆被拔出&quot;&gt;3、虚拟机里面的系统提示“网线电缆被拔出”？&lt;/h4&gt;

&lt;p&gt;（1）将虚拟机的网络适配器设置成 ‘NAT模式’。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/77717066a98c7510fcde937267c06d30a16b62354d4d6582/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;（2）打开物理机的 ‘服务’，启动红框里面的两个服务。重启虚拟机，可以看到网络连上了。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://p.qpic.cn/pic_wework/1948211503/54525345a17396b47769a881716685e96de6bdcea824c712/0&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;</content><author><name>Kaka</name></author><summary type="html">vmware安装与使用教程</summary></entry><entry><title type="html">Fiddler 之基本介绍</title><link href="https://nnnnmkaka.github.io/2020/05/27/fiddler-Introduction/" rel="alternate" type="text/html" title="Fiddler 之基本介绍" /><published>2020-05-27T00:00:00+00:00</published><updated>2020-05-27T00:00:00+00:00</updated><id>https://nnnnmkaka.github.io/2020/05/27/fiddler-Introduction</id><content type="html" xml:base="https://nnnnmkaka.github.io/2020/05/27/fiddler-Introduction/">&lt;h3 id=&quot;背景介绍&quot;&gt;背景介绍&lt;/h3&gt;

&lt;p&gt;Fiddler是一个http协议调试代理工具，它能够记录并检查所有你的电脑和互联网之间的http通讯，设置断点，查看所有的“进出”Fiddler的数据（指cookie,html,js,css等文件，这些都可以让你胡乱修改的意思）。 Fiddler 要比其他的网络调试器要更加简单，因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
Fiddler是用C#写出来的,它包含一个简单却功能强大的基于JScript.NET事件脚本子系统，它的灵活性非常棒，可以支持众多的http调试任务，并且能够使用.net框架语言进行扩展。&lt;/p&gt;

&lt;p&gt;注：Fiddler因为设置代理的原因，在使用中可能会出现网络问题，直接关闭或者点击关掉左下角的capture就好了&lt;/p&gt;

&lt;h3 id=&quot;fiddler原理&quot;&gt;Fiddler原理&lt;/h3&gt;

&lt;p&gt;在本机开启一个http的代理服务器，然后它会转发所有的http请求和响应到最终的服务器,如图所示&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://km.oa.com/files/post_photo/692/234692/05b5174ead9dbf9f738b1cc5aa0bd91a1462759742.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Fiddler就是一个代理层，打开Fiddler后，可以记录请求响应、修改经过它的文件、延迟传输、修改域名对应的IP等等。打开ie的internet选项-&amp;gt;连接-&amp;gt;局域网设置-&amp;gt;高级可以看到下图&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img-blog.csdn.net/20181023161456529?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xvbmVyX2Zhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;通过更改浏览器的代理服务地址，Fiddler就可以截获所有发出的请求&lt;/p&gt;

&lt;h3 id=&quot;fiddler两种代理模式&quot;&gt;Fiddler两种代理模式&lt;/h3&gt;

&lt;p&gt;在Fiddler的工具栏的Stream可以进行两种模式的切换，默认是缓冲模式&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;流模式：（streaming） 实时传送给客户端（更接近于浏览器本身真实的行为）&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;缓冲模式： （buffering） 等http请求所有东西都准备好后才返回给应用程序（可控制最后的服务器响应）&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;fiddler使用场景&quot;&gt;Fiddler使用场景&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;开发环境host配置，Tools-&amp;gt;Hosts&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;前后端接口调试&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;线上bugfix，将线上项目代理到本地进行修改调试(AutoResponder,Willow)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;性能分析和优化&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;工具栏常用功能介绍&quot;&gt;工具栏常用功能介绍&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Replay，回放会话，选中会话并按R键即可回放会话（可多条）&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;清空监控面板，快捷键ctrl+x&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;go 断点调试&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;stream切换代理模式&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Decode 解压请求&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;keep all session选项可选保存会话的数量，默认的保存所有，保存的会话越多，fiddler占用的内存越大，可以设置下，而且调试也不希望看到太多会话，可以根据需要清空监控面板或过滤请求&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;All Process，可以用来控制如只捕获chrome浏览器的请求&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Find 可以查找会话并选择颜色高亮标明&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;TextWizard 解码/编码功能，可选选项很多，避免去网上找解码工具&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;状态栏&quot;&gt;状态栏&lt;/h3&gt;

&lt;p&gt;状态栏功能较少，但也很重要：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Capture用来控制Fiddler是否工作，点击即可切换状态&lt;/li&gt;
  &lt;li&gt;All Process控制请求来源&lt;/li&gt;
  &lt;li&gt;旁边的数字代表当前会话数量&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;命令行&quot;&gt;命令行&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;select命令&lt;/p&gt;

    &lt;p&gt;选择所有响应类型（指content-type）为指定类型的HTTP请求，选中的部分会高亮显示：&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;select image   选择图片请求
   
select css        选择css请求
   
select html     选择HTML的请求
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;allbut命令&lt;/p&gt;

    &lt;p&gt;allbut命令用于选择给定类型的HTTP请求(删除其他类型请求)，该命令还有一个别名：keeponly.&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Eg:只保留image会话：allbut image
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;?text命令&lt;/p&gt;

    &lt;p&gt;选择所有 URL 匹配问号后的字符的全部 session&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Eg:?qq.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;小于/大于size命令&lt;/p&gt;

    &lt;p&gt;选择响应大小大于某个大小或者小于某个大小的所有HTTP请求&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Eg:选择响应大小小于10k的请求：&amp;lt;10k
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;=status命令&lt;/p&gt;

    &lt;p&gt;选择响应状态等于给定状态的所有HTTP请求&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Eg:选择所有状态为200的HTTP请求：=200
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;@host命令&lt;/p&gt;

    &lt;p&gt;选择包含指定 HOST 的全部 HTTP请求。&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Eg：选择所有host包含csdn.net的请求：@csdn.net
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bpafter,Bps, bpv, bpm, bpu&lt;/p&gt;

    &lt;p&gt;这几个命令主要用于批量设置断点:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Bpafter xxx: 中断 URL 包含指定字符的全部 session 响应
    
Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应。
   
Bpv xxx: 中断指定请求方式的全部 session 响应
   
Bpm xxx: 中断指定请求方式的全部 session 响应。等同于bpv xxx
    
Bpu xxx:与bpafter类似。
    
当这些命令没有加参数时，会清空所有设置了断点的HTTP请求。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;help&lt;/p&gt;

    &lt;p&gt;输入help会弹出这个页面 http://docs.telerik.com/fiddler/knowledgebase/quickexec，是fiddler的官方命令行文档&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;右侧窗口功能&quot;&gt;右侧窗口功能&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Stastics：统计选中的一个或多个请求相关数据，大小、耗时
    &lt;ul&gt;
      &lt;li&gt;最下方会有一个不太容易发现的功能show charts，点击会对请求进行可视化处理&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Inspectors：多种方式查看Request或者Response的详细消息,如图：&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;AutoResponder： 设置一些规则将符合规则的请求重定向到本地。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Composer：创建发送HTTP请求/前后端接口联调&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Filters：设置会话过滤规则&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Log：日志&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Timeline：性能优化和分析&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Willow的使用：请求重定向（模拟响应）
    &lt;ul&gt;
      &lt;li&gt;右键添加项目，规则，host&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;</content><author><name>Kaka</name></author><summary type="html">背景介绍</summary></entry></feed>