华为云用户手册

  • 响应消息 正常响应要素说明 表3 要素说明 名称 参数类型 说明 records List 停止结果记录。 详情请参见表4。 表4 records字段说明 名称 参数类型 说明 instance_id String 实例ID。 job_id String 任务ID。 正常响应样例 { "records": [ { "instance_id": "5b409baece064984a1b3eef6addae50cin01", "job_id": "2b414788a6004883a02390e2eb0ea227" } ] } 异常响应 请参见异常请求结果。
  • 接口约束 如需批量停止实例,请联系客服申请。 最多支持批量停止50个实例。 该接口仅支持MySQL引擎。 Serverless型实例不支持该接口。 仅支持停止存储类型为超高IO、SSD云盘、极速型SSD的按需实例,专属云RDS不支持停止实例。 已停止的实例被删除后不会进入回收站。 停止主实例时,如果存在只读实例,会同时停止只读实例。不支持单独停止只读实例。对于华东-上海一区域,主实例和只读实例均默认停止十五天。对于除华东-上海一外的其他区域,主实例和只读实例均默认停止七天。 对于华东-上海一区域,实例默认停止十五天,如果您在十五天后未手动开启实例,数据库实例将于十五天后的下一个可维护时间段内自动启动。 对于除华东-上海一外的其他区域,实例默认停止七天,如果您在七天后未手动开启实例,数据库实例将于七天后的下一个可维护时间段内自动启动。 实例停止后,虚拟机(VM)停止收费,其余资源包括弹性公网IP(EIP)、存储资源、备份正常计费。 实例在以下状态不能执行停止实例: 创建、重启、扩容、变更规格、恢复、修改端口等不能进行此操作。
  • 约束限制 账户余额大于等于0元,才可设置自动扩容。 实例状态为“正常”和“存储空间满”时可以进行扩容。 如需开通存储空间自动扩容的权限,请联系客服申请。 仅支持RDS for PostgreSQL云盘实例,即存储类型为SSD云盘或极速型SSD。存储类型介绍请参见数据库实例存储类型。 云数据库 RDS for PostgreSQL实例最大可自动扩容至4000GB。 如果是主备实例,针对主节点设置自动扩容时,会同时对其备节点生效。 实例在进行规格变更、内核小版本升级、备机迁移、重启时,不能进行此操作。 包周期实例存在未完成订单时,不会自动扩容。
  • 操作场景 RDS for PostgreSQL云盘实例支持存储空间自动扩容,在实例存储空间达到阈值时,会触发自动扩容。 只读实例设置自动扩容与主实例自动扩容互不影响,因此,您需要单独为只读实例设置扩容,以满足业务需求。对只读实例设置自动扩容时,您可选择大于或等于主实例的存储空间。 设置存储空间自动扩容有两种方式: 创建实例时设置存储空间自动扩容。详情请参见购买RDS for PostgreSQL实例。 创建实例后设置存储空间自动扩容。本章节介绍创建实例后如何设置存储空间自动扩容。
  • 代码示例 @Controller @RequestMapping("/api") public class TestController { @GetMapping("/testApi") public String test(HttpServletRequest request) { String token = request.getHeader("Authorization"); String issuer = verifyAndReturnIssuer(token); if (issuer.equals("user")) { return "success"; } return "error"; } }
  • 收集信息 表1 收集信息 项目 说明 私钥/公钥获取URL/密钥ID/公钥/appId 访问私钥是在CraftArts IPDCenter API交互过程身份凭证。通过私钥生成认证凭据,用于确保请求者身份的正确性。公钥获取URL自动获取公钥的地址,通过此地址,可自动获取公钥信息,用于检验认证凭据的正确性。 公钥获取URL地址为:https://域名/文根/basic/mgmt//public/api/v1/keymanage/getPublicKeyList appId、公钥、私钥与密钥ID见下面获取方式。
  • 开发过程 在Spring boot项目工程中创建一个API。 @Controller @RequestMapping("/api") public class TestController { @GetMapping("/testApi") public String test(HttpServletRequest request) { return "success"; } } 获取token并检验合法性。 @GetMapping("/testApi") public String test(HttpServletRequest request) { String token = request.getHeader("Authorization"); String issuer = verifyAndReturnIssuer(token); if (issuer.equals("user")) { return "success"; } return "error"; }
  • 约束与限制 共享流量包费用为一次性支付,即刻生效,不支持指定生效日期。 共享流量包一旦购买不支持退订,到期后也不支持续订。 共享流量包支持包月和包年,到期后剩余的流量将无法再使用。 共享流量包只能针对按需计费(按流量计费)的带宽生效,且需要区分动态BGP和静态BGP类型。动态BGP共享流量包适用于动态BGP按需计费(按流量计费)的独享带宽,静态BGP共享流量包适用于静态BGP按需计费(按流量计费)的独享带宽。 共享流量包不支持对指定的某一个EIP带宽生效。 共享流量包不支持对共享带宽生效。 共享流量包不支持用于优选BGP类型的EIP。
  • 变更配置后对计费的影响 如果您在购买增强型95计费的共享带宽后变更了共享带宽配置,会产生一个新订单并开始按新配置的价格计费,旧订单自动失效。 如果您在一个小时内变更了共享带宽配置,将会产生多条计费信息。每条计费信息的开始时间和结束时间对应不同配置在该小时内的生效时间。 例如,您在9:00:00购买了一个按增强型95计费共享带宽,带宽大小500Mbit/s,并在9:30:00升配带宽大小1000Mbit/s,那么在9:00:00 ~ 10:00:00间会产生两条计费信息。 9:00:00 ~ 9:30:00,按照带宽大小500Mbit/s计费。 9:30:00 ~ 10:00:00,按照带宽大小1000Mbit/s计费。
  • 资源包抵扣顺序示例 某客户在华北-北京四区域购买了2个共享流量包,规格信息如下: 共享流量包A:动态BGP类型,规格100GB,2020年10月1日生效,购买时长2个月,即12月1日过期。 共享流量包B:动态BGP类型,规格500GB,2020年10月10日生效,购买时长2个月,即12月10日过期。 表2 抵扣顺序 时间段 抵扣顺序 10月1日~10月9日 只有共享流量包A生效。 使用共享流量包A抵扣,超出100GB部分按需计费。 10月10日~11月30日 共享流量包A、B同时生效,叠加使用。 优先使用共享流量包A抵扣,超出100GB部分使用共享流量包B抵扣,超出600GB部分按需计费。 12月1日~12月9日 共享流量包A过期,只有资共享流量包B生效。 使用资源包B抵扣,超出500GB部分按需计费。 12月10日及之后 共享流量包A、B均已过期,此时为按需计费。
  • 资源包抵扣顺序 资源包抵扣原则 共享流量包购买后立即生效,并自动抵扣按需计费(按流量计费)的EIP带宽产生的流量资费,直到流量包用完或到期。购买多个共享流量包,优先抵扣将要到期的流量包。 带宽加油包到期将自动失效,恢复到原来的带宽规格。 带宽加油包是从购买时选择的有效期开始时间生效的,根据您设置的有效期时间,带宽加油包支持购买后立即生效。 如果您购买带宽加油包后,带宽还是不能满足要求,可以再次购买带宽加油包叠加使用。 目前带宽加油包支持叠加使用的区域:华北-北京四,华东-上海一,华南-广州,西南-贵阳一,中国-香港。 共享流量包抵扣顺序原则 当购买了多个共享流量包,会按照共享流量包过期时间顺序进行抵扣,优先抵扣即将到期的共享流量包。
  • 资源包说明 共享流量包 按需计费(按流量计费)的EIP,您可以通过购买共享流量包获取更多的优惠。共享流量包是一款带宽流量套餐产品,使用方便,价格实惠。购买共享流量包后立即生效,并自动抵扣按需计费(按流量计费)的EIP带宽产生的流量资费,直到流量包用完或到期。 共享流量包费用为一次性支付,即刻生效,不支持指定生效日期。 共享流量包一旦购买不支持修改和退订,到期后也不支持续订。 共享流量包支持包月和包年,到期后剩余的流量将无法再使用。 共享流量包只能针对按需计费(按流量计费)的带宽生效,且需要区分动态BGP和静态BGP类型。动态BGP共享流量包适用于动态BGP按需计费(按流量计费)的独享带宽,静态BGP共享流量包适用于静态BGP按需计费(按流量计费)的独享带宽。 共享流量包不支持对指定的某一个EIP带宽生效。 共享流量包不支持对共享带宽生效。 共享流量包不支持用于优选BGP类型的EIP。 带宽加油包 在有效期内的包年/包月的EIP,当某个时间段业务量激增(例如:双11),需要在这个时间段临时调整带宽规格,您可以通过购买带宽加油包,设置有效期时间来解决。加油包到期将自动失效,恢复到原来的带宽规格。 带宽加油包只能针对包年/包月带宽生效。 带宽加油包不支持用于优选BGP类型的EIP。 带宽加油包1天起售,购买后不能修改起始时间及带宽大小。 可用的资源包如表1所示,资源包在不同规格及时长下的具体价格,请参见产品价格详情。 表1 资源包说明 资源包 作用 使用限制 共享流量包 抵扣按需计费(按流量计费)的EIP带宽产生的流量资费 共享流量包费用为一次性支付,即刻生效,不支持指定生效日期。 共享流量包一旦购买不支持退订,到期后也不支持续订。 带宽加油包 临时调大带宽上限,适用于在有效期内的包年/包月独享带宽和共享带宽。 带宽加油包只能针对包年/包月带宽生效。 带宽加油包1天起售,购买后不能修改起始时间及带宽大小。
  • 计费模式概述 弹性公网IP提供包年/包月、按需计费两种计费模式,以满足不同场景下的用户需求。 包年/包月:一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大。 按需计费:一种后付费模式,即先使用再付费。按需计费又分为按带宽计费和按流量计费。 不同计费方式推荐的适用场景如表1所示。 表1 弹性公网IP计费方式适用场景 计费模式 计费方式 推荐适用场景 包年/包月 按带宽计费 流量大或访问量稳定。 可预估资源使用周期。 按需计费 按带宽计费 流量大或访问量稳定。 资源使用有临时性和突发性。 按流量计费 流量低或访问量波动较大。 资源使用有临时性和突发性。 加入共享带宽 多业务流量高峰分布于不同时段,需节约公网成本。 如您需要详细了解EIP计费情况,请参见图1和表2。 图1 弹性公网IP计费概览 表2 计费模式 计费模式 包年/包月 按需计费(按带宽计费) 按需计费(按流量计费) 按需计费(加入共享带宽) 付费方式 预付费 按照订单的购买周期结算。 后付费 按照您指定的带宽大小及实际使用时长计费,不限流量。 后付费 按照您指定的线路类型及实际流量使用量计费,华为云仅收取出网流量费用,不收取入网流量费用。 后付费 此处带宽费为共享带宽的费用。 计费周期 按订单的购买周期计费,精确到秒。 秒级计费,按小时结算。 秒级计费,按小时结算。 秒级计费,按小时结算。 适用计费项 带宽费 带宽费 弹性公网IP保有费 流量费 弹性公网IP保有费 共享带宽费 弹性公网IP保有费 计费项说明 购买包年/包月EIP时,需要一次性支付选定周期内的带宽费,按照您指定的带宽大小计费,不限流量。 带宽费:按照您指定的带宽大小及实际使用时长计费,不限流量。 您购买EIP时可以指定带宽大小,后续支持修改。使用过程中,您实际的带宽不能高于指定带宽大小。 弹性公网IP保有费:按需计费的EIP,如果未绑定至实例,并且未释放的情况下,则会收取弹性公网IP保有费。 流量费:按照您指定的线路类型及实际流量使用量计费,华为云仅收取出网流量费用,不收取入网流量费用。 按流量计费的EIP,带宽作为限速使用,不收取费用。为了防止突然爆发的流量产生较高的费用,建议您购买EIP的时候指定带宽大小,设置出网带宽峰值。 弹性公网IP保有费:按需计费的EIP,如果未绑定至实例,并且未释放的情况下,则会收取弹性公网IP保有费。 按需计费的EIP选择加入共享带宽时,有以下两个计费项: 带宽费:此处带宽费为共享带宽的费用,共享带宽中可同时加入多个EIP,这些EIP使用期间的带宽和流量均不再单独计费,以共享带宽的费用为准。 弹性公网IP保有费:按需计费的EIP,如果未绑定至实例,并且未释放的情况下,则会收取弹性公网IP保有费。 变更计费模式 支持变更为按需计费(按带宽计费)模式。 具体请参见:包年/包月转按需计费 支持变更为包年/包月计费模式。 变更操作成功后,新的计费方式将立即生效。 具体请参见:按需计费转包年/包月 按需计费(按流量计费)EIP不支持直接转为包年/包月EIP。需要先将按需计费(按流量计费)转为按需计费(按带宽计费),再将按需计费(按带宽计费)转为包年/包月计费。 变更操作成功后,新的计费方式将立即生效。 具体请参见:按需计费转包年/包月 不支持变更计费模式。 变更规格 支持升高/降低带宽大小。 支持升高/降低带宽大小。 支持升高/降低带宽大小。 按流量计费的EIP,带宽仅作为限速使用,带宽大小不影响实际费用。 支持升高/降低带宽大小。 云监控服务 可以监控您的带宽和流量等网络指标,通过带宽使用率可以对比按带宽计费和按流量计费哪种方式更划算。按照以往的经验,为您提供如下建议供参考: 带宽小于5 Mbit/s时,建议您选择按按需计费(按带宽计费),或者根据使用时长选择包年/包月计费。 带宽大于5 Mbit/s,并且带宽使用率大于20%时,一般选择按带宽计费会更划算。 带宽等于5 Mbit/s时,不同的计费方式没有太大差异。 监控指标的查看方法请参见查看监控指标。 父主题: 计费模式
  • 手工创建测试工程 登录性能测试服务控制台,在左侧导航栏中选择“PerfTest测试工程”,单击“创建测试工程”。 参照表1设置基本信息。 表1 创建测试工程 参数 参数说明 工程名称 新建测试工程的名称。 说明: 工程名称只能以汉字、字母、数字、中划线(-)、下划线(_)、斜线(/)和点(.)组成,最长128个字节。 类型 高性能:高效利用计算资源,提供海量并发,性价比高。 可扩展:支持自定义脚本功能,具有较高的灵活性,满足客户定制化的需求。 说明: 测试工程创建后,工程类型不允许修改。 可扩展测试工程功能为白名单特性,需要联系后台管理人员申请开通,审批同意后方可使用。 描述 新建测试工程的描述信息。 配置完成后,单击“确定”。 测试工程创建成功后,即可为测试工程添加测试用例,详细操作请参见PerfTest测试用例管理。
  • 使用模板创建测试工程 登录性能测试服务控制台,在左侧导航栏中选择“总览”,进入总览页。 PerfTest定义了如下模板: 选择一网通办系统场景,一网通办系统测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择流媒体场景,流媒体测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择秒杀场景,秒杀测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择电商场景,电商测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择极速创建场景,极速创建测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 可根据实际业务需求修改测试用例,详细操作请参见PerfTest测试用例管理。
  • 创建JMeter测试工程 登录性能测试服务控制台,在左侧导航栏中选择“JMeter测试工程”,单击“创建JMeter测试工程”。 参照表1设置基本信息。 表1 创建JMeter测试工程 参数 参数说明 工程名称 新建测试工程的名称。 说明: 工程名称只能以汉字、字母、数字、中划线(-)、下划线(_)、斜线(/)和点(.)组成,最长128个字节。 描述 新建测试工程的描述信息。 配置完成后,单击“确定”。 JMeter测试工程创建成功后,即可为测试工程添加测试计划,详细操作请参见管理JMeter测试计划。
  • 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“PerfTest测试工程”。 在待编辑PerfTest测试工程所在行,单击工程名称进入测试工程详情页面。 选择“测试用例”页签,在左侧“用例列表”下选择待配置的测试用例。 选择页面右侧的“压力配置”,参照表1 添加阶段设置阶段参数。 一个用例最多添加1000个阶段。 表1 添加阶段 参数 参数说明 阶段名称 自定义阶段名称,用于区分不同的阶段,比如首页测试。 压力模式 压力模式目前支持以下几种模式: 并发模式:用例按照固定或者梯度递增的并发用户数进行压测。 TPS模式:用例按照每秒指定的事务数进行压测。TPS模式中,一个虚拟用户执行一次测试用例为一个事务。实际压测时,能否达到指定的事务数取决于最大并发数和事务平均响应时延。 摸高模式:用例按照指定的爬坡时间由最小并发用户数线性递增到最大用户并发数后保持在峰值并发用户数进行压测。 浪涌模式:用例按照周期性变化的并发用户数进行压测,每个周期先按照最小并发用户数压测,再按照最大并发用户数压测。按最大并发用户数压测时长可自定义,周期数为设定的浪涌次数。 震荡模式:用例按照周期性波动的并发用户数进行压测,每个周期用户数在最小并发数和最大并发数之间波动。周期数为设定的震荡次数。 智能摸高:用例按照指定的单步执行时长由最小并发用户数按递增并发数逐步到最大用户并发数后保持在峰值并发用户数进行压测。 说明: 执行器按设定的梯度逐步增加并发数进行压测,压测时,后台会为每个并发梯度生成一个“阶段数据”,当某个阶段的数据相比前一个阶段有发生明显的性能拐点时,系统判定到达性能峰值。其中性能拐点通过以下场景定义:成功率小于阈值(默认100%)、RPS曲线下降、rt/tp90/tp99曲线出现较大的斜率变化。 执行策略 执行策略目前支持按时长和按次数。 按时长:按照设定的持续时间进行压测,不限定次数。 按次数:按照设定的发送总次数进行压测。 说明: 当前仅并发模式和TPS模式涉及该参数。 调压模式 在压测过程中调整压力,目前支持自动调压和手动调压。 自动调压:自动调压的并发上限为所有阶段中最高的并发用户数。 手动调压:手动调压的并发上限为最大并发数。手动调压后原有多阶段压力配置失效。 说明: 当前仅并发模式和TPS模式且执行策略为按时长时涉及该参数。 当“压力模式”为“并发模式”、“执行策略”为“按时长”,“调压模式”为“自动调压”时,需要配置以下参数: 并发数 并发数指在同一时刻内,对系统进行业务操作的用户数量。 在性能测试中为用户在定义测试任务阶段设置的虚拟用户数。 起始并发数 执行测试用例的起始虚拟用户数。 爬坡时间(秒) 从起始并发数加压到最大并发数所需要的时间。 压测时长(分钟) 本阶段压测执行的时间。 当“压力模式”为“并发模式”、“执行策略”为“按时长”,“调压模式”为“手动调压”时,需要配置以下参数: 最大并发数 执行测试用例的最大虚拟用户数。 起始并发数 执行测试用例的起始虚拟用户数。 压测时长(分钟) 本阶段压测执行的时间。 当“压力模式”为“并发模式”、“执行策略”为“按次数”,需要配置以下参数: 说明: 只能添加单阶段。 并发数 并发用户数指在同一时刻内,对系统进行业务操作的用户数量。 在性能测试服务中为用户在定义测试任务阶段设置的虚拟用户数。 发送总次数 该用例在一次任务的运行中,将按照运行次数计算,到达设定数值,该任务下此用例的性能测试将终止。 说明: 发送总次数不小于并发用户数。 当“压力模式”为“TPS模式”、“执行策略”为“按时长”且“调压模式”为“自动调压”,需要配置以下参数: 最大并发数 执行测试用例的最大虚拟用户数。 TPS值 设定每秒执行事务的数量。 压测时长(分钟) 本阶段压测执行的时间。 当“压力模式”为“TPS模式”、“执行策略”为“按时长”且“调压模式”为“手动调压”,需要配置以下参数: 最大并发数 执行测试用例的最大虚拟用户数。 起始并发数 执行测试用例的起始虚拟用户数。 TPS值 设定每秒执行事务的数量。 压测时长(分钟) 本阶段压测执行的时间。 当“压力模式”为“TPS模式”、“执行策略”为“按次数”,需要配置以下参数: 说明: 只能添加单阶段。 最大并发数 执行测试用例的最大虚拟用户数。 TPS值 设定每秒执行事务的数量。 发送总次数(次) 该用例在一次任务的运行中,将按照运行次数计算,到达设定数值,该任务下此用例的性能测试将终止。 说明: 发送总次数不小于并发用户数。 当“压力模式”为“摸高模式”,需要配置以下参数: 起始并发数 执行测试用例的起始虚拟用户数。 最大并发数 执行测试用例的最大虚拟用户数。 爬坡时间(秒) 虚拟用户数从起始并发数线性递增到最大并发数的时长。 说明: 建议爬坡时间小于持续时间。爬坡时间与持续时间相同且并发量较大的情况下,采样到的最大并发可能会略小于设置的最大并发数。 压测时长(分钟) 压测执行的时间。 摸高期望指标 响应时间:最大值为60000ms。 成功率:最小值为0。 摸高模式下,期望被测系统的请求响应时间小于等于输入值,请求成功率大于等于输入值,摸高分析规则为其中一个指标首次出现连续6秒未达标的情况时(比如响应时间连续6s大于期望值),摸高分析完成后,取其中第一秒的数据为摸高结果。 说明: 当用例执行达到探底期望指标后,任务不会停止,会继续执行。 当“压力模式”为“浪涌模式”,需要配置以下参数: 压测时长(分钟) 压测执行的时间。 最大并发 执行测试用例的最大虚拟用户数,也是虚拟用户数变化过程峰值。 最小并发 执行测试用例的最小虚拟用户数,也是虚拟用户数变化过程的最小值。 浪涌次数 在持续时间内,虚拟用户数变化的周期数。 峰值持续时间(秒) 一个周期内,按最大并发虚拟用户数压测的持续时间。 当“压力模式”为“震荡模式”,需要配置以下参数: 压测时长(分钟) 压测执行的时间。 最大并发 执行测试用例的最大虚拟用户数,也是虚拟用户数波动过程的波峰值。 最小并发 执行测试用例的最小虚拟用户数,也是虚拟用户数波动过程的波谷值。 震荡次数 在持续时间内,虚拟用户数波动变化的周期数。 当“压力模式”为“智能摸高模式”,需要配置以下参数: 起始并发数 执行测试用例的起始虚拟用户数。 递增并发数 每步增加的虚拟用户数。 说明: 递增并发数非线性增长,执行时会指数增加。 单步执行时长(秒) 每步执行的时间,建议配置至少20秒以上。 压测时长(分钟) 压测执行的时间,建议配置30分钟以内。 说明: 当成功率小于阈值(默认100%)、RPS曲线下降、rt/tp90/tp99曲线出现较大的斜率变化,任务会停止压测。 配置完成后,单击“保存”
  • IResultV1接口实现 package main import ( "fmt" "time" ) const ( InnerVarName = "__name" InnerVarGoroutineId = "__goroutine_id" InnerVarExecutorIndex = "__executor_index" InnerVarExecutorCount = "__executor_count" ) type IResultV1 interface { GetName() string GetUrl() string GetMethod() string GetRequestHeader() map[string]string GetRequestBody() string GetSentBytes() int GetResponseCode() int GetResponseHeader() map[string]string GetResponseBody() string GetReceivedBytes() int GetFailureMessage() string IsSuccess() bool GetBeginTime() int64 GetEndTime() int64 GetSubResults() []interface{} } //acquireResult generates root result. //just call one time on the main func and generate sub result using parent.addSub() func acquireResult(name string) *Result { result := &Result{} result.Name = name result.RequestHeader = map[string]string{} result.ResponseHeader = map[string]string{} result.ResponseCode = 200 result.Success = true result.BeginTime = time.Now().UnixMilli() result.EndTime = time.Now().UnixMilli() return result } type Result struct { Name string Url string Method string RequestHeader map[string]string RequestBody string SentBytes int ResponseCode int ResponseHeader map[string]string ResponseBody string ReceivedBytes int FailureMessage string Success bool BeginTime int64 EndTime int64 SubResults []interface{} SubIndex int } func (r *Result) GetName() string { return r.Name } func (r *Result) GetUrl() string { return r.Url } func (r *Result) GetMethod() string { return r.Method } func (r *Result) GetRequestHeader() map[string]string { return r.RequestHeader } func (r *Result) GetRequestBody() string { return r.RequestBody } func (r *Result) GetSentBytes() int { return r.SentBytes } func (r *Result) GetResponseCode() int { return r.ResponseCode } func (r *Result) GetResponseHeader() map[string]string { return r.ResponseHeader } func (r *Result) GetResponseBody() string { return r.ResponseBody } func (r *Result) GetReceivedBytes() int { return r.ReceivedBytes } func (r *Result) GetFailureMessage() string { return r.FailureMessage } func (r *Result) IsSuccess() bool { return r.Success } func (r *Result) GetBeginTime() int64 { return r.BeginTime } func (r *Result) GetEndTime() int64 { return r.EndTime } func (r *Result) GetSubResults() []interface{} { return r.SubResults } //begin records begin time, do not forget call this function to update func (r *Result) begin() { r.BeginTime = time.Now().UnixMilli() } //end records end time, do not forget call this function to update func (r *Result) end() { r.EndTime = time.Now().UnixMilli() } //addSub adds sub result to parent, call this function adding sub result always. //if name is not empty, renaming will be disabled func (r *Result) addSub(name string) *Result { if name == "" { name = fmt.Sprintf("%s-%d", r.Name, r.SubIndex) r.SubIndex++ } else { name = fmt.Sprintf("%s-%s", r.Name, name) } sub := acquireResult(name) r.SubResults = append(r.SubResults, sub) return sub } 表2 IResultV1接口结构说明表 名称 含义 补充说明 Name 请求名称 根result需使用内置参数__name设置。 Url 请求地址 - Method 方法 用于HTTP的POST,GET等。 RequestHeader 请求头 用于HTTP。 RequestBody 请求数据 建议不要记录请求较大的数据,例如上传文件,仅记录摘要即可。 SentBytes 发送字节数 - ResponseCode 响应码 记录响应状态,可以用于HTTP状态码或者自定义状态码,用于报告统计响应状态数量用于分析。 响应码范围:[100,599] ResponseHeader 响应头 用于HTTP。 ResponseBody 响应数据 建议不要记录响应较大的数据,例如下载文件,仅记录摘要即可。 ReceivedBytes 接收字节数 - FailureMessage 失败信息 - Success 是否成功 - BeginTime 请求开始时间 单位:毫秒 EndTime 请求结束时间 单位:毫秒 SubResults 子请求 当自定义请求需要多个子请求共同完成,需要使用该字段记录各个子请求执行情况。 SubIndex 子请求索引 当使用父Result的addSub方法生成子Result时,如果不为子Result自定义名称,将使用该字段自增产生索引用于生成子Result名称。
  • 请求签名 func(map[string]string) interface{} 入参:性能测试服务内置参数以及自定义参数。 出参:interface需实现IResultV1接口,如有必要,请使用性能测试服务提供的IResultV1接口实现。 表1 性能测试服务内置参数 名称 含义 补充说明 __name 请求名称 - __goroutine_id 协程id - __executor_index 执行机索引 序号从0开始。 __executor_count 执行机总数 -
  • 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“PerfTest测试工程”。 在待编辑PerfTest测试工程所在行,单击工程名称进入测试工程详情页面。 选择“测试用例”页签,在左侧“用例列表”下选择待配置的测试用例。 选择页面右侧的“用例详情”进入用例详情页面,输入测试用例描述、前置条件、测试步骤,依照表1设置用例基本信息。 表1 用例基本信息 参数 参数说明 状态 描述测试用例当前处于哪种状态,如新建、设计中、测试中、完成。 用例ID 用例ID信息。 用例等级 Level 0:最基本的功能验证,用例不宜过多,各模块尽量保证在10-20个,占比5%左右。 1级:基本功能验证,可用于继承特性的基本功能验证、迭代验收前的基本功能验证等,占比20%左右。 2级:重要特性验证,可用于测试版本(非回归版本)中手工测试,占比60%左右。 3级:一般功能/非重要功能验证,包括对基本/重要功能的异常测试,占比10%~15%左右。 4级:非常特殊输入、场景、阈值条件的用例,该级别用例不宜过多,占比0%~5%左右。 标签 用例自定义标签,用于标识用例。 输入标签:单击标签输入框,输入标签后,用空格或回车键生成标签,每个用例限制10个标签。 删除标签:单击标签输入框,单击已生成标签后的删除该标签。 创建时间 测试用例的创建时间,用例保存后自动生成。 修改时间 测试用例的最新修改时间,用例保存后自动生成。 用例详情信息设置完成后,单击“保存”。
  • 测试用例简介 PerfTest测试工程主要由测试用例、测试任务和性能报告组成。事务库和智能分析属于增强能力。 测试用例、测试任务、性能报告分别对应了性能测试活动的三个主要环节。 图1 性能测试活动流程 其中测试用例是基于某个性能压测场景建立的测试模型。测试任务是基于已定义的(若干个)测试模型发起一次性能测试的活动。性能报告是测试任务执行的结果,呈现的是被测系统在高并发场景下的性能指标。 图2 测试用例、测试任务和性能报告之间的关系 父主题: 测试用例说明
  • 插入变量 添加请求信息时,在输入框内输入“$”,支持插入变量。 “变量类型”为“自定义变量”时,需要设置如下参数: 变量范围:选择变量范围。 变量名称:自定义变量名称。自定义变量名称为添加变量时为变量取的名称。 “变量类型”为“系统变量”时,需要选择函数名称: 身份证号:随机生成一个身份证号。 手机号:随机生成一个手机号。 区间随机数:根据用户输入区间,随机生成区间内的任一整数。 随机字符串:根据用户输入的位数(1-32),随机生成小写字母和数字混合的字符串。 时间戳:根据用户选择(秒(s)/毫秒(ms)),生成执行时当前时间戳(秒(s)对应10位,毫秒(ms)对应13位)。 时间格式化:根据指定格式输出当前时间,支持时间偏移(单位为秒)。 时间格式化格式说明如下: "yyyy":表示四位数的年份,例如2024年:2024 "yy":表示两位数的年份,例如2024年:24 "MM":表示两位数的月份,例如1月:01 "M":表示前不补零的月份,例如1月:1 "dd":表示两位数的日期,例如3日:03 "d":表示前不补零的日期,例如3日:3 "HH":表示24小时制的小时数,例如下午1点:13 "H":同HH "hh":表示12小时制的小时数,例如1点:01 "h":表示前不补零的24小时制小时数,例如1点:1 "mm":表示分钟数,例如4分:04 "m":表示前不补零的分钟数,例如4分:4 "ss":表示秒数,例如5秒:05 "s":表示前不补零的秒数,例如5秒:5 "SSS":表示毫秒数,例如98毫秒:098 UUID:随机生成一个32位的字符串。 “变量类型”为“加密函数”时,需要选择加密类型和变量插入的位置,加密类型如下: MD5:对val数据进行md5加密,返回加密后的数据字符串。 MD5-BASE64:对val数据进行MD5-BASE64编码,返回编码后的数据字符串。 SHA-1:对输入的数据进行SHA-1加密,返回加密后的数据字符串。 SHA-224:对输入的数据进行SHA-224加密,返回加密后的数据字符串。 SHA-256:对输入的数据进行SHA-256加密,返回加密后的数据字符串。 SHA-384:对输入的数据进行SHA-384加密,返回加密后的数据字符串。 SHA-512:对输入的数据进行SHA-512加密,返回加密后的数据字符串。 BASE64编码:对输入的数据进行BASE64编码,返回编码后的数据字符串。 BASE64解码:对输入的数据进行BASE64解码,返回解码后的数据字符串。 父主题: 设置全局变量(高性能测试工程)
  • 调试测试计划 新增或修改测试计划后,可通过调试快速发现语法或配置错误,确保该模型在任务中可用。 登录性能测试服务控制台,在左侧导航栏中选择“JMeter测试工程”。单击待调试测试计划所在工程后的。 在“测试计划”页签中,单击待调试的任务名称,进入“计划详情”页,单击页面上方。 在调试页面中选择已创建的私有资源组作为执行器,单击“启动”,启动调试,此时可以在调试页面看到调试进展。 调试完成后,如果调试结果报错,可根据异常信息,修改用例后重新调试。导入方法请参见管理测试计划中的修改测试计划部分。 单击“查看日志”查看测试计划调试的具体内容。 在“调试记录”页签,查看调试的历史操作记录。
  • 启动测试计划 测试计划指通过在不同压测点执行一系列测试,持续对系统发起压力测试,通过测试获取并分析系统运行的性能数据。 您可以在一个测试工程中添加多个测试计划。 前提条件 确保资源组状态为“运行中”。 确保资源组的调试节点上的32001和32003端口在安全组被开启。 确保资源组的执行节点和被压测的应用之间网络互通。 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“JMeter测试工程”,单击待操作工程后的。 创建测试计划,具体操作请参见创建测试计划。 创建完成后,单击任务操作栏的。 在“启动测试任务”对话框中,选择对应的资源组。JMeter任务执行所需的资源组类型仅支持“私有资源组”。 单击“启动”,启动测试任务。然后可以单击“查看报告”来查看实时性能报告。 压测时长建议至少300s,并发数请根据被压测应用的实际情况填写。通过多次调整压测数据进行反复测试,得到应用所能承受的最大值,进行持续优化和验证。
  • 压力配置 创建测试计划后,可根据业务需求修改每个阶段的各项参数。 登录性能测试服务控制台,在左侧导航栏中选择“JMeter测试工程”。单击待操作测试计划所在工程后的。 在“测试计划”页签中,单击待压力配置的“任务名称”,进入“计划详情”页,可看到当前线程组下的各个阶段,参照表1设置基本信息。 表1 压力配置 参数 参数说明 执行策略 执行策略目前支持按时长和按次数。 按时长:按照设定的持续时间进行压测。 按次数:按照设定的发送总次数进行压测。 线程数 当前并发操作的虚拟用户数量。 预热时间 对应JMeter脚本里的Ramp-Up字段,指并发用户数从0提升到设置的并发数值所需的时间。 说明: 仅“阶段1”涉及修改该参数。 循环次数 每个虚拟用户执行的次数。 说明: 仅当“执行策略”为“按次数”时涉及修改该参数。 时间控制 用于控制是否配置“最大时长”和“启动延迟”两个参数, 说明: 仅当“执行策略”为“按次数”时涉及该参数。 最大时长 如果实际压测时长达到最大时长时,执行次数尚未达到循环次数,则线程组结束执行。 说明: 仅当“执行策略”为“按次数”时,开启“时间控制”才可修改该参数。 持续时间 任务实际执行的时间,持续时间建议至少300s。 说明: 仅当“执行策略”为“按时长”时,涉及该参数。 启动延迟 虚拟用户在等待设置启动延迟的时间后,再开始执行任务。 说明: 当“执行策略”为“按次数”时,开启“时间控制”可修改该参数。 当“执行策略”为“按时长”时,可以在“阶段1”修改该参数。 单击“确定”保存更新的配置信息。
  • 创建测试计划 测试计划是指基于已定义的JMeter文件和依赖的jar包和变量文件发起一次性能测试的活动。 登录性能测试服务控制台,在左侧导航栏中选择“JMeter测试工程”,单击待操作工程后的。 在“测试计划”页签中,单击“创建测试计划”。 在弹出的窗口中单击“添加文件”,选择格式为*.jmx的文件,单击“上传文件”,导入成功后将自动关闭窗口并返回“测试计划”页签,可以看到已添加的测试计划。 jmx文件的名称长度上限为64字节(含后缀),文件大小限制为10M。 当前支持基本的JMeter脚本,包括线程组,HTTP请求,HTTP信息头管理器,请求参数,超时时间,BeanShell等。建议您使用5.2.1以上版本的脚本进行导入,以免出现脚本解析错误。 在“测试计划”页签中,单击“第三方jar包”,在弹出的窗口中单击“添加文件”,选择测试计划所依赖的jar包并导入,导入成功后关闭窗口。 jar包名称长度上限为64字节(含后缀),大小上限专业版为10M,企业版为80M。 在“测试计划”页签中,可以查看新添加的测试计划。
  • 使用限制 单账号跟踪的事件可以通过 云审计 控制台查询。多账号的事件只能在账号自己的事件列表页面去查看,或者到组织追踪器配置的OBS桶中查看,也可以到组织追踪器配置的 CTS /system日志流下面去查看。 用户通过云审计控制台只能查询最近7天的操作记录。如果需要查询超过7天的操作记录,您必须配置转储到 对象存储服务 (OBS),才可在OBS桶里面查看历史文件。否则,您将无法追溯7天以前的操作记录。 云上操作后,1分钟内可以通过云审计控制台查询管理类事件操作记录,5分钟后才可通过云审计控制台查询数据类事件操作记录。
  • 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“PerfTest测试工程”。 在待编辑PerfTest测试工程所在行,单击工程名称进入测试工程详情页面。 选择“测试用例”页签,可以在页面左侧查看当前已创建的用例目录结构。可以通过以下两种方式创建用例: 在当前目录下创建用例:直接单击“创建用例”。 图1 在当前目录下创建用例 在指定目录下创建用例:将鼠标光标放置在指定目录上,单击,在下拉框中选择“创建用例”。 图2 在指定目录下创建用例 单击“保存”。
  • 操作步骤 首次创建测试资源,需父账号授权,自动创建委托使性能测试服务可以操作用户CCE。 需要使用性能测试服务的用户,需要CodeArts PerfTest Administrator或CodeArts PerfTest Developer权限(仅能查看自己创建的工程)。 需要管理私有资源组的用户,需要CodeArts PerfTest Administrator或CodeArts PerfTest Developer+CodeArts PerfTest Resource Administrator权限。 需要使用私有资源组的用户,需要CodeArts PerfTest Administrator或CodeArts PerfTest Developer+CodeArts PerfTest Resource Developer权限。 使用性能测试服务依赖的权限及具体使用场景,详见使用性能测试服务需要哪些权限。 登录性能测试服务控制台,在左侧导航栏中选择“测试资源”,单击“创建私有资源组”。 (可选)首次使用时,请根据提示信息,授权性能测试服务创建私有资源组。 进入创建资源组页面后,如果是首次使用没有云容器引擎服务CCE集群,需要先执行4创建集群然后再创建资源组。如果已有可用的云容器引擎服务CCE集群,直接执行5创建资源组。 创建集群。 单击页面上方的“创建集群”,进入购买CCE集群页面。创建集群操作请参考购买CCE集群,设置集群参数。 集群管理规模选择与执行节点个数相关,请根据需要压测的并发用户数,创建对应规格的节点。例如,需要20个执行节点,那么创建集群时集群规模选择50节点即可满足业务需求。 CCE集群的网络模型建议选择“容器隧道网络”,容器网段和服务网段需要与被测对象保持一致。 单击“下一步:插件配置”,默认选择即可。 单击“下一步:规格确认”,确认集群配置信息无误后,勾选已阅读使用说明,单击“提交”等待集群创建,集群创建预计需要6-10分钟。 集群创建成功后,返回集群管理页面,单击“创建节点”,进入创建节点页面。创建节点操作请参考创建节点,设置节点参数。 节点规格至少为vCPU为4核,内存8GB。 操作系统需选择欧拉EulerOS。 创建的节点数量至少需要2台(1台调试节点、1台执行节点),具体数量由压测对象要求规格决定。例如,压测10万并发用户数,vCPU为4核,内存8GB的资源需要21个执行节点(1个调试节点,20个执行节点)。 当CCE集群节点与被测应用不在同一VPC网络时,建议CCE集群节点绑定弹性IP。可使用已有的弹性IP,如果没有弹性IP也可以选择自动创建。自动创建弹性IP时,计费方式推荐按流量计费,带宽设置尽可能选择较大值,否则可能影响压测效果。系统根据您的配置创建弹性IP,并自动为每个节点进行分配。当创建的弹性IP数量小于节点个数时,会将弹性IP随机绑定到节点上。 单击“下一步:规格确认”,确认节点配置信息无误后,勾选已阅读使用说明,单击“提交”等待节点创建。节点创建成功后,返回性能测试服务控制台。 创建资源组。 在左侧导航栏中选择“测试资源”,单击“创建私有资源组”。 参照表1设置基本信息。 表1 创建私有资源组 参数 参数说明 资源组名称 新建私有资源组的名称,可自定义。 节点集群 在下拉框选择已创建的CCE集群。 高级配置 可选项,配置项详见高级配置。 说明: 该功能为白名单特性,需要联系后台管理人员申请开通,审批同意后方可使用。 修改高级配置参数,可能导致任务无法正常执行,请谨慎修改。 调试节点 执行压测的调试机。 调试节点在资源组创建成功后不可修改。 执行节点 执行压测的执行机,即在压测过程中能够提供自身性能数据的施压目标机器。 单击“创建”。
  • 正则表达式响应提取示例 示例一 例如,前一个报文响应的报文内容如下所示: "baseInfo" : { "mobilephone":"xxxxxxxxxxx", "Telephone":"xxxxxxxxxxx", "unitGuid":"xx", "unitMame":null, "address":"xxx", "sex" : 0, "imageUr1" :nul1 }, "UserNotices":null }, "msgId'" : "64xxxxxxxxxxxxxxxxxxxxxxxf5", "isUsed" :"1" "token":"eyxxxxxxxxxxxJ9.eyJzdW1101JYZMiLCJcUbdGUkIJezMT!!zz#z!20TxxxxxxxxxxxxxxxxxS1611dYQISHTFKifVOsImd1aWQi0ilOODkiLCJleHAiOjEiMzIizNzY1MjZ9.myU5idiASM-11@EP7YQTfTsR_8zsq7?sbYJYoxfRsuf6OZhGL-XWmjnvdaviGauhSdw16ImWOFEvbA CS HMXGT1U0ijS5z6ezX@sZePruzFnvcIMgShF8xNPN6zVokQp-uwbyS3W6NpZpDuwsjuiZ7DZTNpKoqCkGHwvPJrHBOrWFR_u6-FBbTiFiqdhQb95U-1gLiLvoZHY_rguzwyrZ-leGRdCG_ZASreoWC-uH)HnqltpgItrChWQToHQyxOABdMSbBSHhNctBBZHgQPMESqQQQTbBiPGvbQDprB7ZBFMUB_ShynS_evtyfEladGEddhOBn-fxxxxxxxxxxx" }, 如果想要获取token值的,可通过正则表达式"token"\s*:\s*"(.*?)"提取,响应提取的设置如下图所示。 示例二 例如,前一个报文响应的报文内容为: javawind:9javawind:12 javawind:16javawind:17 javawind:46javawind:22 如果想要提取数值16,响应提取的设置如下图所示。 通过正则表达式javawind:(.*)javawind:(.*),提取数据如下: 9 12 16 17 46 22 通过第2个匹配项,提取数据如下: 16 17 通过第1个表达式,提取数据如下: 16 示例三 例如,报文内容为:ababdacac。 如果响应提取设置如下图所示: 正则表达式(ab|ac)+,表示由多个ab或者ac匹配。 第几个匹配项:1,表示由ab匹配到的,也可以输入2,表示由ac匹配到的。使用1可以得到abab及子串ab,使用2可以得到acac及子串ac。 表达式取值:0,表示使用最大匹配串abab或者acac,1表示使用子串ab或者ac。 示例四 例如,被提取内容为:HTTP响应头的Content-Type。 正则表达式Content-Type: (.*)\r\n,注意冒号后面有一个空格,结尾有\r\n,是HTTP规范产生的。 第几个匹配项:1,因为只有一个(.*)。 表达式取值:1,取到希望得到的值。
共100000条