
# 方案概述
#### 应用场景
用户在使用本地JMeter进行压测时，为应对不同的压测需求，需要安装各种插件。为了方便查看可视化的测试报告，可以在性能测试服务中引入JMeter测试工程。PerfTest-JMeter测试工程旨在为用户提供JMeter原生引擎的支持，用户可在PerfTest-JMeter测试工程里导入JMeter脚本，使用JMeter原生引擎快速发起高并发的性能测试，且可查看完备的性能测试报告。
#### 约束与限制
- 首次使用性能测试服务测试资源，需要用户对性能测试服务进行授权，允许性能测试服务操作CCE和VPC终端节点。

- 性能测试服务容器集成了开源Apache-JMeter、性能测试服务的控制代码以及性能测试服务的部分JMeter增强能力（如多阶段压力配置、日志输出等）。
- PerfTest-JMeter工程，默认集成Apache-JMeter 5.4引擎（当前版本），可以通过在性能测试服务测试资源上传自定义安装包，更改为Apache-JMeter 5.6、5.3或5.2版本。自定义安装包是从Apache官网下载的zip包。
- 如果希望PerfTest-JMeter工程能够支持部分第三方插件，可以在PerfTest-JMeter工程处以"第三方jar包"的形式，将第三方插件上传。这等效于将jar包放置在JMeter根目录"\\lib\\ext"下。
- 用户在界面上删除jmx脚本时，性能测试服务的OBS中的脚本也会被删除。
 
#### 方案架构
PerfTest-JMeter测试工程，通过集成开源Apache-JMeter实现压力测试，具体工作原理如下：
1. 用户通过性能测试服务测试资源，将自己租户下的CCE节点，纳管到性能测试服务，作为调试节点（一个）和执行节点（至少一个才能发起任务）使用。纳管后，性能测试服务会创建一个VPC终端节点，用于上传测试数据到性能测试服务。性能测试服务通过CCE拉起常驻的调试负载，负载拉起一个容器（即性能测试服务容器），用于调试。
2. 用户使用PerfTest-JMeter测试工程时，需要上传jmx脚本到性能测试服务。这些脚本会存储在性能测试服务的OBS中。性能测试服务拉起容器后，性能测试服务容器会通过OBS下载并执行用户的脚本。
3. 用户执行任务时，通过CCE拉起临时的执行负载。负载根据任务规模拉起一个或多个性能测试服务容器，用于执行任务。当采用多个容器执行任务时，线程组中的线程数会平分给每个性能测试服务容器。
4. 性能测试服务执行任务过程中，性能测试服务容器会通过VPC终端节点将测试的结果数据上传到性能测试服务，用于：
   - 统计任务的并发数、时延、RPS、带宽、TP90等性能指标。
   
   - 显示执行时产生的请求日志、返回日志。
    
5. 任务结束时，性能测试服务容器会被销毁，只有执行记录会留在用户的执行机中。
 
