画布 1
jmeter
  组件介绍
    TEST FRAGMENT
      线程组
        总体介绍
          一系列线程的集合，模拟n个用户请求场景。每个线程代表一个向服务器发请求的真实用户
          一个测试计划执行的开始点
        重点节点
          线程属性
            线程数
              模拟用户数
            pamp-up period(in seconds)
              制定线程数所需时间
              每秒启动线程数=线程数/pamp-up period(in seconds)
              为0时表示并发
            循环次数
              设置整个循环次数
              总体循环次数=线程数*循环次数
              永远：表示永久执行
            delay thread creation until needed
              未勾选
                计划开始时，创建所有需要的线程
              已勾选
                线程执行时，才会被创建
          调度器配置
            持续时间（秒）
              整个测试阶段持续时长
              开始时间+持续时间=结束时间
              若设置，则忽略结束时间
            启动延迟（秒）
              手工开始执行后，等待“启动延迟”S才会真正开始执行
              若设置，则忽略启动时间
            启动时间
              真正开始测试时间
            结束时间
              结束时间
          取样器错误后执行的动作
            继续
              继续执行
            start next loop
              忽略错误，执行下个循环
            停止线程
              退出当前线程
            停止测试
              等当前sampler执行结束后，结束整个测试
            stop test now
              直接停止整个测试
    逻辑控制器
      具体组件
        simple controller
          意义
            分组，提供块的结构和控制
          重点
            启用后，子节点中必须重新设置http请求默认值
        loop controller
          意义
            循环
          重点
            子节点循环次数=线程组循环次数*loop控制器设置的循环次数
        once only controller
          意义
            每个线程中，该控制器的子节点只会执行一次
          重点
            一般都在最顶部
            用于登录
        interleave controller
        random controller
          意义
            子节点中随机选中一个执行
          重点
            一次循环中只有一个子节点会被执行
        random order controller
          意义
            子节点中随机执行
          重点
            一次循环中所有子节点会被执行
        throughput controller
          意义
            决定执行次数
          重点
            配置
              total excution
                不勾选per user
                  线程组中该控制器的子节点总共循环执行次数
                勾选per user
                  线程组中每个线程中该控制器的子节点都会循环执行total次
              percent excution
                不勾选per user
                  每个线程组该控制器子节点执行次数=线程组循环次数*百分比
                    四舍五入
                勾选per user
                  同不勾选，则per user不影响percent excution
            用途
              通常作为interleave和random控制器的子节点
        runtime controller
          意义
            控制执行时间
          重点
            runtime作用
              请求运行时间<runtime
                循环执行请求
              请求运行时间>runtime
                超时后不再执行请求，因此结果树中看不到该请求
        if controller
          意义
            控制子节点是否执行
          重点
            配置
              变量表达式作为条件
                条件必须是表达式且结果为true/false
              所有子节点都执行
                checked
                  控制所有节点
                not checked
                  只控制入口
              conditions
                只支持JS
                返回true/false
                可被否决
            判断方式
              增加用户自定义变量，使自定义变量作为条件
              前一个sampler结果作为后一个的条件
                json提取/正则提取
                将提取中的name写入到if condition中，eg："${name}"==""
        while controller
          意义
            循环，直至condition=false，控制器的子节点才不会执行
          重点
            配置
              blank
                循环最后一个请求执行失败后才退出循环
              last
                循环最后一个请求执行失败后才退出循环
                循环中前一个请求失败则不进入循环
              其他
                条件为false时退出循环
        switch controller
          意义
            执行子节点中指定的请求
          重点
            配置
              索引（数字）
                从0开始
                只针对请求
                当数字>该控制器下请求数量时，执行循环（eg：两个请求，数字填写为2，则第一个请求会执行两次）
              sampler名称
                不存在则不执行
                存在则执行
        foreach controller
          意义
            参数循环传递
          重点
            使用步骤
              1.添加用户自定义参数
              2.在请求中添加该参数：${参数输出变量名称}
        module controller
          意义
            执行测试过程中插入其他模块
        include controller
          意义
            引入外部jmx文件
          重点
            外部jmx文件要求
              不能包含线程组
              simple controller及子元件
              不存在cookie管理器和用户自定义变量
            filename域
              不支持变量、函数
        transation controller
          意义
            衡量控制器内所有请求嵌套处理的全部时间
        recording controller
          意义
            录制，详见录制章节
        critical section controller
          意义
            确保子节点（sampler/controller）被执行
          重点
            只有一个线程作为一个锁
      总体介绍
        逻辑等事务的控制
    sampler
      总体介绍
        逻辑等事务的控制
      具体组件
        HTTP Request
        Java Request
        JDBC Request
        BEANShell Sampler
    配置元件
      总体介绍
        子主题 1
      具体组件
        http cache manager
          功能
            为作用域范围内的http请求提供缓存功能
          重点
    定时器
      总体介绍
      具体组件
    前置处理器
      总体介绍
      具体组件
    后置处理器
      总体介绍
      具体组件
    断言
      总体介绍
      具体组件
    监听
      总体介绍
      具体组件
    函数
      _StringFromFile
        功能
          从文件中读取一个字符串，并以实现参数化
        重点
          参数
            输入文件路径
              文件存放的绝对路径
              单个文件
                文件名要求：文件全名
              多个文件
                文件名要求：多个文件时，文件名是以序列号递增
                地址中文件名以 name+#/000(name可为空)填写
                  #：插入数字，不从0开始，不包含空格
                  000：插入数字，包含三个数字组合，不从0开始
            Name of variable in which to store the result
              变量名称：保存读取结果的参数
              不能以${名称}使用
            Start file sequence number
              初始序列号
                多个文件情况才使用
            Final file sequence number
              结束序列号
                多个文件情况才使用
          返回
            文件异常（不存在、打开时错误等）
              返回error
            文件正常
              读取原则
                循环次数>文件内容总行数时，超过总行数的请求会报错：JMeterStopThreadException: End of sequence
                循环次数<=文件内容总行数时，读取循环次数行
                读文件时，文件内容中间的空行会被读取
                文件结束的空行不会被读取
              配置
                开始序列号/结束序列号不正确
                  可运行，但请求报错：JMeterStopThreadException: End of sequence
                开始序列号&结束序列号正确
                  逐行读取
                  可通过循环（循环控制器/线程/线程组的loop）读取下一行/下个文件
                只配置结束序列号
                  表示该文件循环读取的次数
                只配置开始序列号
                  返回error
                不希望被翻译的，需要加上英文''
      _JavaScript
        功能
          执行js代码，并返回结果
        重点
          参数
            JS EXPRESSION
              JS代码片段，eg：new Date()
            变量名
              重用函数计算值的引用名
          注意点
            表达式中含有","时，必须使用“\”分离
      _Random
        功能
          在给定最大值和最小值中生成一个随机数
        重点
          参数
            min值
              最小值
            max值
              最大值
            变量
              函数返回变量名
      _RandomString
        功能
          在给定字符中生成给定字数的随机字符串
        重点
          参数
            length
              生成随机字符串的长度
            characters to use
              使用到的字符
            变量
              函数返回变量名
          返回值
            characters to use 和变量为空
              随机生成指定个数的字符
            characters to use为空
              随机生成指定个数的字符并将其保存在指定的变量中
            变量为空
              生成包含给定字符的给定长度的字符串
            均不为空
              生成包含给定字符的给定长度的字符串并将其保存在指定的变量中
      __RandomFromMultipleVars
        功能
          在给定字符串中随机生成新的字符串
        重点
          参数
            Source Variable(s) (use | as separator)
              给定的字符串，多个时用|隔开
            变量
              函数返回变量名
      _CSVRead
  接口测试
    录制脚本
      借助浏览器
        配置
          jmeter配置
            1.添加线程组（测试计划-->添加-->Theads(users)-->线程组）
            2.添加录制控制器（线程组-->添加-->逻辑控制器-->录制控制器）
            3.添加HTTP(s)代理服务器（工作台-->添加-->非测试原件-->HTTP代理服务器）
            4.配置HTTP代理服务器
              端口：自设，不可和已有端口重复
          浏览器配置（火狐为例）
            1.打开配置（选项-->高级-->网络-->设置-->手动配置代理）
            2.配置代理{端口号：jmeter设置的端口，HTTP代理：本机IP/host name}
        录制
          1.配置jmeter和浏览器（见配置）
          2.jmeter：HTTP(s)代理服务器中点击start
          3.在火狐浏览器中运行待录制网站
          4.关闭浏览器
          5.jmeter：HTTP(s)代理服务器中点击end
          6.jmeter：录制控制器中可以看到录制的请求
      badboy
        1.在Badboy中运行待录制网站的URL，并运行相关功能
        2.导出jmeter脚本
        3.在jmeter中导入刚录制的脚本
    手工添加
      流程
        1.添加线程组
        2.添加HTTPC OOKIE管理器（可选）
        3.添加HTTP请求默认值（可选）
        4.添加http请求
        5。添加监听/断言进行调试
      注意
        添加参数
          post请求
            Parameters中添加
            body data中添加
              此时需要增加http信息头管理器，并在此种增加Content-Type
          Parameters和body data间只能选一个
        HTTP请求：web服务器--服务器名称或IP
          有HTTP请求默认值
            请求和请求默认值中的域名一致
              HTTP请求中不需要配置web服务器--服务器名称或IP
            请求和请求默认值中的域名不一致
              HTTP请求中需要配置web服务器--服务器名称或IP
          没有HTTP请求默认值
            HTTP请求中需要配置web服务器--服务器名称或IP
        乱码解决方案
          1.HTTP请求中content encoding中设置编码方式
          2.jmeter jmeter.properties配置文件中将 sampleresult.default.encoding设置为所需编码方式
          3.BeanShellPostProcessor中通过 prev.setDataEncoding("所需编码方式") 语句设置
          4.代码中设置
        请求参数为JSON格式
          body data中添加
            此时需要增加http信息头管理器，并在此种增加Content-Type，且值为application/JSON
        参数化
          函数助手
            1.在函数助手中选择_CSVRead
            2.第一行值中写入文件路径
            3.第二行值中写入列号（0开始）
            4.点击生成
            5.copy生成的值并将值粘贴到参数化的值中
            6.若文件中包含多个值，可通过改变线程组中线程数来达到循环目的
          CSV Data Set Config