
# 业务验证
业务验证对上云迁移非常重要。业务验证主要包括功能验证和性能验证等。在上云迁移过程中，有两个阶段需要进行业务验证。首先，业务部署完成后，在切换前需要进行功能和性能验证，其次，业务切换时，当业务流量切换到目的端，切换后也需要进行功能和性能验证。
#### 功能验证
- **功能测试内容**
  功能测试确保应用系统在上线前能够正常运行，以下是功能测试的内容：
  表1功能测试内容列表 
  | 测试内容分类     | 说明                                                                                                                 |
  |:---|:---|
  | 本应用功能测试    | 测试的内容强依赖应用系统的功能，比如某电商系统，核心的功能测试用例至少包括线上线下的浏览、购物、下单支付（各种支付途径支付、用劵支付）、打印账单、开发票、活动促销、库存同步、新会员注册，老会员退会、订单退款、订单返劵等核心功能。 |
  | 周边系统集成功能测试 | 测试的内容强依赖应用系统的集成功能，比如某大型零售电商平台，和某团购平台、某外卖平台、某到家平台、某小视频平台等都有业务合作，集成的用例至少包括在这些集成平台的下单、用劵、通知发货，评论等各种功能的验证。             |
     
  

- **功能测试目的**
  - 验证应用系统迁移到目标端华为云后，更换了技术组件后的应用功能是否正常
  
  - 验证应用更换到目标端后，应用和周边的系统的集成是否正常，识别需要周边系统配合修改的内容都已修改正常。
   

- **功能测试方法**
  - 冒烟测试：冒烟测试是一种简单的功能测试，通过执行少量的核心测试用例来验证系统是否可用。在目标端部署完成后，可以首先执行冒烟测试来确认系统的基本功能是否正常。
  
  - 全业务功能测试：全面的业务功能测试可以验证系统的所有功能是否正常，通过执行针对各种业务流程的测试用例，确保所有功能模块正常。
  
  - 日志分析：在目的端业务部署完成后，需要对系统的日志进行分析，检查是否存在异常情况的错误信息。通过日志分析可以发现一些潜在的问题和隐患，及时进行修复和优化。
  
  - DNS劫持测试：因云上部署的业务一般按照生产环境的域名进行配置，在使用手机App或浏览器测试业务功能时，需要配合使用DNS劫持的方式进行测试，可以使用内网WIFI及运维改造的APISIX，配合WiFi上的DNS解析，劫持流量指向测试环境，进行的内网测试。
   

- **功能测试流程**
  图1功能测试流程   
  ![](https://support.huaweicloud.com/usermanual-caf/zh-cn_image_0000002177520753.png "点击放大")
  1. **确定测试目标和重点关注点** ：明确需要测试的应用功能和场景，以及测试的重点和关注点。
     1. 系统功能：如促销活动，用劵支付、退货反劵等
     
     2. 批处理JOB功能：若本次搬迁的应用同时涉及多个批处理JOB，在功能测试时，需要重点关注批处理JOB的执行情况，比如库存推数。
     
     3. 第三方业务集成功能：如某团购平台、某外卖平台、某到家平台、某小视频平台的集成功能验证，以及门店POS支付等功能验证。
      
  
  2. **确认测试环境：** 确认使用哪个环境用作测试，不要对生产业务造成影响。注意，如果有请求第三方接口的业务，需要注意外网隔离，防止测试污染生产数据，可以通过内网搭建特殊WIFI，让内部测试人员登录模拟进行三方功能的测试。
     表2测试环境的对比分析 
     | 场景                  | 测试环境选择建议                | 优点                                                              | 缺点                                                                               |
     |:---|:---|:---|:---|
     | 目标端华为云生产环境是否已上线部分应用 | 方案1：在目标端华为云生产环境用作测试     | 1.测试后直接转生产上线，节省工作量 2.各项参数在测试期间已调为最优 | 需做好网络隔离，有对现网影响的风险。                                                               |
     | 目标端华为云生产环境是否已上线部分应用 | 方案2：在目标端华为云新建一套测试环境用作测试 | 对现网无影响                                                          | 1.新搭建一套环境有一定的成本费用 2.在测试环境调测好的配置参数需要1：1配置到生产环境，有一定工作量 |
     | 目标端华为云生产环境是全新环境     | 目标端华为云生产环境用作测试          | 1.测试后直接转生产上线，节省工作量 2.各项参数在测试期间已调为最优 | 无                                                                                |
        
     
  
  3. **设计测试用例** ：根据测试目标，设计和准备测试用例。切换之前的测试用例要尽可能的全覆盖，切换期间，由于测试时间有限，建议将测试用例划分P0、P1、P2三个优先级。
     1. P0定义：最核心的功能用例，此用例通过，可以决策不再考虑回退。
     
     2. P1定义：重要功能用例，此用例通过表示基本功能全部可用，此用例通过后，即可宣布当晚切换成功，可取消外部维护公告。
     
     3. P2定义：其他补充用例，如切换时间窗足够，可切换当晚测试，如果切换时间窗不够，可第二天测试。
        表3测试用例执行说明 
        | 阶段     | 测试用例                                                              | 覆盖率                                          |
        |:---|:---|:---|
        | 切换前测试  | 所有                                                                | 包括所有的应用功能和第三方集成功能测试。特殊无法测试场景需单独讨论模拟测试方案。     |
        | 切换期间测试 | 分P0、P1、P2三个级别。 在切换时间窗内至少完成P0和P1级用例测试。 | 根据切换时间窗口，时间窗口充足，完成所有的用例，时间窗口不足，至少完成P0和P1级用例。 |
           
        
     
     
     对于测试环境的测试用例选择，企业需要根据应用场景分析是否具备测试条件，比如第三方库存同步的用例，第三方只有生产环境对接本企业生产环境，无法对接测试环境情况下，此用例就无法测试。所以需识别无法测试的用例，评估测试用例的覆盖率，对于无法覆盖的用例单独讨论模拟测试方法，参考如下：
     
     | 场景     | 是否具备测试条件                                                            | 特殊场景应对措施                        |
     |:---|:---|:---|
     | 第三系统下单 | 第三方系统由于和测试环境无法打通，所以在测试环境无法测试                                        | 针对无法测试的场景，讨论应对方案如直接调用库存同步接口模拟测试 |
     | 库存同步   | 第三方库存由于和测试环境的库存系统无法打通，所以在测试环境无法进行测试                                 | 针对无法测试的场景，讨论应对方案如直接调用库存同步接口模拟测试 |
     | 支付     | 线上支付具备测试条件 线下POS支付由于和测试环境无法打通网络，不具备测试条件 | 针对无法测试的场景，讨论应对方案如：直接调用接口模拟测试等   |
     | ...    | ...                                                                 | ...                             |
        
     
  
  4. **预置测试数据：**为了确保测试的真实性和有效性，需提前预置测试数据。可以使用源端测试环境数据，也可以使用脱敏后的生产数据。
  
  5. **执行测试用例：**部分企业测试自动化起步较晚，大量用例仍需要人工执行，手工执行用例，在测试过程中需执行人详细记录测试时间、测试人员、用例执行结果等相关信息。部分企业已有自动化测试能力，上云过程中只需要将新增的用例增加到自动化平台自动执行。
  
  6. **输出测试报告：**全部测试用例测试完成后，输出测试报告。 总的来说，功能测试需要确保测试环境和生产环境尽可能的一致，测试用例覆盖率100%，以保证应用上云后的功能正常。
   
 
#### 性能验证
- **性能验证**
  应用系统迁移到云上后，底层技术组件更换了，云上的技术组件默认参数可能与源端默认参数不同，或者源端和目的端的技术组件实现机制不同，可能会导致上云发生性能问题，需要进行性能测试，性能测试内容包括如下三类。
  表4性能测试内容 
  | **测试内容** | **说明**                                       |
  |:---|:---|
  | 云服务性能测试  | 针对某个云服务进行性能测试，比如数据库，Hbase、存储的IOPS等。          |
  | 应用接口性能测试 | 接口性能是系统性能评估的一个方面，针对某几个接口进行针对性接口压测。           |
  | 应用整体性能测试 | 根据应用的使用场景，比如大促期间，上千人同时浏览一个产品并抢购的场景下，整体的性能测试。 |
     
  这三类性能测试的目的如下表所示。
  表5性能测试目的说明 
  | **测试内容** | **目的**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
  |:---|:---|
  | 云服务性能测试  | 评估云服务的规格是否满足应用高并发下的性能，参数是否是最优配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
  | 应用接口性能测试 | 针对某几个接口评估接口的极限负载能力                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
  | 应用整体性能测试 | 1. 确定云上业务系统的极限负载能力：通过高并发、高负载的测试，确定云上业务系统可以承载的最大负载，以及达到极限负载时系统的表现和响应时间。在压力逐步上升的过程中，观察云上业务系统在承载和源端压力相当时的性能表现，并对比收集到的指标，确定是否存在问题。  2. 验证系统的稳定性和可靠性：通过长时间、高负载的测试，验证云上业务系统在各种情况下的稳定性和可靠性，包括系统资源的管理、数据传输、异常处理等。  3. 评估系统的可扩展性：在系统压力逐步增大的过程中，测试云上业务系统的可扩展性，可以确定系统是否可以扩展到更大的规模，并支持更多的用户和业务需求  4. 识别系统的性能瓶颈：通过对云上业务系统的压力测试，可以识别系统的瓶颈，确定迁移过程中业务环境的改变带来的系统性能问题，从而优化系统性能。   |
     
  
 
上述三类性能测试的具体方法如下。
1. **云服务性能测试（以数据库为例）**
   对于大多数应用系统来说，整个系统的瓶颈往往在数据库。因为应用的其他组件，例如网络带宽、负载均衡、应用服务器、中间件等比较容易实现水平扩展，但对于数据库，由于数据一致性要求高，多数业务系统仍然采用数据库主备方式实现，未实现数据库的分布式架构。
   常用的数据库相关指标有：
   - **TPS/QPS：**每秒处理事务数和每秒查询数，用于衡量数据库的吞吐量。
   
   - **响应时间：**包括平均响应时间、最小响应时间、最大响应时间、时间百分比等，其中时间百分比参考意义较大，如前95%的请求的最大响应时间。
   
   - **并发量：**同时处理的查询请求的数量。
   
   - **成功率：**指请求在一定时间内成功返回结果的比例。
   
   
   华为云RDS提供了数据库的TPS/QPS等标准性能基线，企业也可以基于自己的业务数据重新进行压力测试。常用的数据库压测工具是Sysbench，支持多线程，支持多种数据库。主要包括以下几种测试：
   - CPU性能
   
   - 磁盘IO性能
   
   - 调度程序性能
   
   - 内存分配及传输速度
   
   - POSIX线程性能
   
   - 数据库性能(OLTP基准测试)
     

2. **应用接口性能压测**
   你可以使用以下两种方式针对应用接口进行性能测试，一种是采用华为云提供的云原生性能测试工具CodeArts PerfTest，另一种是使用Goreplay。两种方式的优缺点如下表所示。
   表6接口性能压测方式对比 
   | **测试工具**          | **压测方式**                           | **优点**                                                                                                                                                                                                                                                                                                                                                                                          | **缺点**                                                                                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|:---|:---|
   | CodeArts PerfTest | 基于华为云性能测试工具完成接口压测。                 | - 支持多协议、高并发、复杂场景的测试  - 专业性能测试报告，应用性能表现一目了然  - 与生产环境核心业务不产生交互，不会对现网产生影响  - 接口测试对其他业务依赖较少，可以基于单业务系统进行。   | - 执行成本高，前期业务梳理和脚本编写耗时较久。  - 对测试人员技术要求较高，需要熟悉测试工具的使用和相关测试知识，否则测试效果可能不够理想。                                                                                                                                                          |
   | GoReplay          | 在业务网关部署GoReplay工具，复制现网流量，在目的端进行回放。 | - 低成本、效率高：无需梳理各个系统的接口和业务逻辑，可以直接基于实际流量进行测试  - 一方面线上大量真实流量确保覆盖率，另一方面支持中间过程的验证，例如发送消息的内容、中间计算过程等等的全对象的对比验证，传统手工编写验证点很难实现。                                                                                                                 | - 需要在生产环境流量入口网关上安装插件，会占用一定的cpu和存储空间。  - 对于分批割接的场景，由于流量录制是基于所有业务请求进行录制，如果目标端有部分业务没有部署，会导致有接口404的报错，需要人工进行定位，定位工作量大。  - 只支持HTTP协议，对于HTTPS、TCP、UDP等无法录制   |
      
   关于如何使用CodeArts PerfTest进行性能压测，请[CodeArts PerfTest帮助文档](https://support.huaweicloud.com/cpts/index.html)。以下介绍如何通过GoReplay流量复制进行性能压测。
   GoReplay是一个用于复制、重放和操作HTTP流量的开源工具。它可以捕获实时流量，并将其发送到一个或多个目标服务器，从而实现流量的复制和重放。通过GoReplay，可以将实际的HTTP请求和响应流量复制到测试、开发或生产环境中，以便在这些环境中进行测试、监控和分析。在上云迁移过程中，我们可以使用GoReplay工具，从源端现网业务网关流量入口复制请求数据，在目的端云上执行机上回放业务请求，实现对云上相关业务接口的压力测试，详细方案如下图所示：
   图2GoReplay流量复制压测方案   
   ![](https://support.huaweicloud.com/usermanual-caf/zh-cn_image_0000002142203274.png "点击放大")
   使用GoReplay做性能压测时要注意以下事项：
   - 在源端网关使用GoReplay录制请求流量时，要注意对主机性能的影响，需实时观察主机相关指标，如CPU使用率，内存使用率等。同时，GoReplay输出的out.file文件，会占用大量的磁盘空间，注意磁盘使用率，防止因磁盘写满导致网关应用不可用，最好使用网络存储来存放输出文件。
   
   - 在进行流量回放时，目的端业务如果有访问第三方接口的需求，可能会对生产业务产生影响，注意做好网络隔离。
    
3. **应用整体性能压测**
   应用整体性能压测是指对业务系统的所有业务流程和功能进行综合性的压力测试，以评估系统在真实生产环境下的稳定性和性能表现。在压测过程中，模拟真实用户的行为，并生成高负载情景，以评估系统在高负荷下的性能和稳定性，确认业务系统能够满足用户的实际需求。
   以下是几个常见的全业务整体性能压测场景：
   1. 正常业务负载：模拟系统在正常使用情况下的业务负载，包括用户请求的数量、频率和类型等。通过验证系统在正常负载下的性能表现，确保系统能够满足用户需求。
   
   2. 峰值负载：模拟系统面临最高负载的情况，通常是在特定时间段内用户请求达到峰值。这种场景用于确定系统的扩展能力是否能够处理高峰期的请求，并确保系统不会出现性能瓶颈或崩溃。
   
   3. 突发负载：模拟系统面临的异常情况，如突然增加的用户请求或大规模数据处理等。这种场景用于评估系统在压力突增时的稳定性和容错能力，确保系统能够优雅地处理异常负载而不受影响。
   
   4. 长时间负载：模拟系统长时间运行的情况，一般持续数小时甚至更长时间。这种场景用于测试系统在长时间运行后是否会出现内存泄漏、资源耗尽等问题，以确保系统的稳定性和可靠性。
   
   5. 异常场景：模拟系统面临的各种异常情况，如网络故障、服务器宕机、数据库连接中断等。这种场景用于测试系统在异常情况下的容错能力和恢复能力，确保系统能够正确处理异常并保持可用性。
    
 
