华为云用户手册

  • 计费模式概述 弹性公网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定义了如下模板: 选择一网通办系统场景,一网通办系统测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择流媒体场景,流媒体测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择秒杀场景,秒杀测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择电商场景,电商测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 选择极速创建场景,极速创建测试工程即创建成功。测试工程创建成功后,测试用例已按模板创建成功。 可根据实际业务需求修改测试用例,详细操作请参见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曲线出现较大的斜率变化,任务会停止压测。 配置完成后,单击“保存”
  • 请求签名 func(map[string]string) interface{} 入参:性能测试服务内置参数以及自定义参数。 出参:interface需实现IResultV1接口,如有必要,请使用性能测试服务提供的IResultV1接口实现。 表1 性能测试服务内置参数 名称 含义 补充说明 __name 请求名称 - __goroutine_id 协程id - __executor_index 执行机索引 序号从0开始。 __executor_count 执行机总数 -
  • 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名称。
  • 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“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 测试用例、测试任务和性能报告之间的关系 父主题: 测试用例说明
  • 启动测试计划 测试计划指通过在不同压测点执行一系列测试,持续对系统发起压力测试,通过测试获取并分析系统运行的性能数据。 您可以在一个测试工程中添加多个测试计划。 前提条件 确保资源组状态为“运行中”。 确保资源组的调试节点上的32001和32003端口在安全组被开启。 确保资源组的执行节点和被压测的应用之间网络互通。 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“JMeter测试工程”,单击待操作工程后的。 创建测试计划,具体操作请参见创建测试计划。 创建完成后,单击任务操作栏的。 在“启动测试任务”对话框中,选择对应的资源组。JMeter任务执行所需的资源组类型仅支持“私有资源组”。 单击“启动”,启动测试任务。然后可以单击“查看报告”来查看实时性能报告。 压测时长建议至少300s,并发数请根据被压测应用的实际情况填写。通过多次调整压测数据进行反复测试,得到应用所能承受的最大值,进行持续优化和验证。
  • 调试测试计划 新增或修改测试计划后,可通过调试快速发现语法或配置错误,确保该模型在任务中可用。 登录性能测试服务控制台,在左侧导航栏中选择“JMeter测试工程”。单击待调试测试计划所在工程后的。 在“测试计划”页签中,单击待调试的任务名称,进入“计划详情”页,单击页面上方。 在调试页面中选择已创建的私有资源组作为执行器,单击“启动”,启动调试,此时可以在调试页面看到调试进展。 调试完成后,如果调试结果报错,可根据异常信息,修改用例后重新调试。导入方法请参见管理测试计划中的修改测试计划部分。 单击“查看日志”查看测试计划调试的具体内容。 在“调试记录”页签,查看调试的历史操作记录。
  • 压力配置 创建测试计划后,可根据业务需求修改每个阶段的各项参数。 登录性能测试服务控制台,在左侧导航栏中选择“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。 在“测试计划”页签中,可以查看新添加的测试计划。
  • 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“PerfTest测试工程”。 在待编辑PerfTest测试工程所在行,单击工程名称进入测试工程详情页面。 选择“测试用例”页签,可以在页面左侧查看当前已创建的用例目录结构。可以通过以下两种方式创建用例: 在当前目录下创建用例:直接单击“创建用例”。 图1 在当前目录下创建用例 在指定目录下创建用例:将鼠标光标放置在指定目录上,单击,在下拉框中选择“创建用例”。 图2 在指定目录下创建用例 单击“保存”。
  • 操作步骤 登录性能测试服务控制台,在左侧导航栏中选择“PerfTest测试工程”。 在待编辑PerfTest测试工程所在行,单击工程名称进入测试工程详情页面。 选择“测试任务”页签,单击“创建任务”。 输入测试“任务名”,选择执行策略。 执行策略分为串行和并行: 串行:每个测试任务下的用例按顺序串行执行。 并行:每个测试任务下的用例并行执行。 单击“添加用例”,在弹出的对话框中选择已创建好的用例。 一个测试用例可以被多个测试任务选择添加。 配置完成后,单击“保存”。
  • 复杂场景支持 生产环境往往是复杂多变的,如一个用户访问可能包含多个请求,不同的用户在进行不同的事务操作,用户访问呈现明显的波峰波谷,瞬时并发用户多等状况,因此需要对服务开展性能测试,提前识别性能瓶颈。 优势 模型灵活定制:支持多事务组合测试,可模拟多用户多个操作的组合场景。 突发流量支持:支持针对每个事务指定时间段定义并发用户数,模拟突发业务流量。 结果校验:支持多种表达式的自定义结果比对,定制您的事务成功标准。 图3 复杂场景支持
  • 应用性能调优 定义性能测试模型,通过性能测试服务的执行机给被测应用发送模拟流量,利用服务报告查看被测应用的资源监控、调用链情况,了解应用对事物的并发处理能力,方便进行性能优化。 优势: 灵活扩展:执行机集群按需扩展,支持不同规模的性能测试。 一站式解决方案:通过专业的报告提供应用并发能力、响应时延、应用CPU/内存占用、应用的内部各微服务处理时延等关键指标。 按需收费:根据性能测试持续时间、并发规模进行收费。
  • 电商抢购测试 电商抢购已成为当前互联网应用的普遍需求,有并发用户高、突发请求大、失败用户反复重试等特征,如何保证在高负载运行情况下网站的可用性已经成为运维保障的重点。 优势 真实场景模拟:秒级千万并发能力,瞬间发起大量并发压力,可在一个测试模型里面模拟全网站高负载。 专业测试报告:提供按时延响应区间的统计,客观反映用户体验。 失败用户重试:多种表达式的自定义结果比对,未正常进入网站的可以重试。 图1 电商抢购测试
  • 游戏高峰测试 游戏行业业务波峰波谷明显,具备弹性伸缩的能力,一方面需要验证弹性伸缩是否可以正常工作,另一方面需要验证在流量突发高峰场景下,时延等关键KPI是否达标。 优势 多场景组合模拟:通过多事务组合、事务元素多样性、报文自定义功能模拟真实场景。 波峰波谷模拟:针对每个单事务根据时间段定义压测曲线,模拟波峰波谷。 KPI度量:通过自定义响应超时时间,验证高峰场景游戏KPI满足度。 图2 游戏高峰测试
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 前提条件 已购买NAT网关:如果该网关对应的VPC未关联云资源(如云服务器),则可用于后续配置。 未购买NAT网关:需购买NAT网关,请参见购买公网NAT网关。关于NAT网关的收费,请参见计费说明(公网NAT网关)。 VPC-NAT关联NAT网关后,在默认路由表中默认添加一条路由(目的地址:0.0.0.0/0,“下一跳类型”为NAT网关),这个路由会将到达VPC-NAT的流量转向NAT网关,这条路由需注意不能删除。
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 什么是分布式消息服务RabbitMQ版 分布式消息服务RabbitMQ版完全兼容开源RabbitMQ,为您提供即开即用、消息特性丰富、灵活路由、高可用、监控和告警等特性,广泛应用于秒杀、流控、系统解耦等场景。 即开即用 分布式消息服务RabbitMQ版提供单机和集群的消息实例,拥有丰富内存规格,您可以通过控制台直接下单购买并创建,无需单独准备服务器资源。 消息特性丰富 支持AMQP协议,支持普通消息、广播消息、死信、延迟消息等特性。 灵活路由 在RabbitMQ中,生产者将消息发送到交换器,由交换器将消息路由到队列中。交换器支持Direct、Topic、Headers和Fanout四种路由方式,同时支持交换机组合和自定义。 高可用 RabbitMQ集群提供仲裁队列,在RabbitMQ节点间进行队列数据的复制,在一个节点宕机时,队列依旧可以正常运行。 监控和告警 支持对RabbitMQ实例状态进行监控,支持对集群每个代理的内存、CPU、网络流量等进行监控。如果集群或节点状态异常,将触发告警。
  • 与其他云服务的关系 弹性云服务器(Elastic Cloud Server) 弹性云服务器是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。RabbitMQ实例运行在弹性云服务器上,一个代理对应一台弹性云服务器。 云硬盘(Elastic Volume Service) 云硬盘为云服务器提供块存储服务,RabbitMQ的所有数据(如消息和日志等)都保存在云硬盘中。 云审计(Cloud Trace Service) 云审计为您提供云服务资源的操作记录,记录内容包括您从华为云管理控制台或者开放API发起的云服务资源操作请求以及每次请求的结果,供您查询、审计和回溯使用。 虚拟私有云 RabbitMQ实例运行于虚拟私有云,需要使用虚拟私有云创建的IP和带宽。通过虚拟私有云安全组的功能可以增强访问RabbitMQ实例的安全性。 云监控(Cloud Eye) 云监控是一个开放性的监控平台,提供资源的实时监控、告警、通知等服务。 RabbitMQ实例向CloudEye上报监控数据的更新周期为1分钟。 弹性公网IP(Elastic IP) 弹性公网IP提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。RabbitMQ实例绑定弹性公网IP后,可以通过公网访问RabbitMQ实例。 标签管理服务(Tag Management Service) 标签管理服务是一种快速便捷将标签集中管理的可视化服务,提供跨区域、跨服务的集中标签管理和资源分类功能。 为RabbitMQ实例添加标签,可以方便用户识别和管理拥有的实例资源。
  • DMS for RabbitMQ权限 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 DMS for RabbitMQ部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问DMS for RabbitMQ时,需要先切换至授权区域。 权限根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对DMS for RabbitMQ服务,管理员能够控制IAM用户仅能对实例进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,DMS for RabbitMQ服务支持的API授权项请参见细粒度策略支持的授权项。 DMS for RabbitMQ的权限与策略基于分布式消息服务DMS,因此在IAM服务中为RabbitMQ分配用户与权限时,请选择并使用“DMS”的权限与策略。 如表1所示,包括了DMS for RabbitMQ的所有系统权限。 表1 DMS for RabbitMQ系统权限 系统角色/策略名称 描述 类别 依赖关系 DMS FullAccess 分布式消息服务管理员权限,拥有该权限的用户可以操作所有分布式消息服务的功能。 系统策略 无 DMS UserAccess 分布式消息服务普通用户权限(没有实例创建、修改、删除、扩容)。 系统策略 无 DMS ReadOnlyAccess 分布式消息服务的只读权限,拥有该权限的用户仅能查看分布式消息服务数据。 系统策略 无 DMS VPCAccess 分布式消息服务租户委托时需要授权的VPC操作权限。 系统策略 无 DMS KMSAccess 分布式消息服务租户委托时需要授权的KMS操作权限。 系统策略 无 DMS Administrator 分布式消息服务的管理员权限。 系统角色 依赖Tenant Guest和VPC Administrator。 表2列出了DMS for RabbitMQ常用操作与系统策略的授权关系,您可以参照该表选择合适的系统策略。 表2 常用操作与系统策略的关系 操作 DMS FullAccess DMS UserAccess DMS ReadOnlyAccess DMS VPCAccess DMS KMSAccess 创建实例 √ × × × × 修改实例 √ × × × × 删除实例 √ × × × × 变更实例规格 √ × × × × 重启实例 √ √ × × × 查询实例信息 √ √ √ × ×
  • 开放API流程 作为API提供者开放API,您需要先后完成以下流程: 创建实例 使用API网关专享版,需要购买专享版实例。 创建API分组 API分组相当于API的集合,您在创建API前,需要先创建API分组。 绑定域名 开放API前,您需要为API分组绑定独立域名(即自定义域名),API调用者通过访问独立域名来调用您开放的API。 创建API 创建API包括定义API前后端的请求路径、参数、请求相关协议等。 调试API 提供调试功能,调试API接口,验证服务是否正常。 创建环境(可选) API可以同时提供给不同的场景调用,如生产环境(RELEASE)及其他自定义环境。RELEASE是默认存在的环境,无需创建。 发布API 只有在将API发布到环境后,API才支持被调用。 父主题: 开放API
  • 配置内网DNS 配置DNS需要配置“/etc”目录下的resolv.conf文件,指定DNS服务器的IP地址。 内网DNS服务器的IP地址与您所位于的区域相关,您可通过内网DNS地址表获取内网DNS服务器的IP地址。 新增内网DNS服务器有两种方法。 方法一:修改虚拟私有云的子网信息。 方法二:编辑“/etc/resolv.conf”文件。 方法二新增的内网DNS在弹性云服务器每次重启后会失效,需要重新进行配置。因此,建议使用方法一。
  • 修订记录 表1 文档修订记录 发布日期 修订记录 2024-03-07 新增查看实例特性修改历史接口。 2024-01-19 新增查询实例支持的特性列表接口。 新增设置调试域名是否可以访问接口。 新增异步任务管理接口。 2023-09-12 增加修改变量接口。 增加校验API定义接口。 创建专享版实例接口分为创建专享版实例(按需)接口和创建专享版实例(包周期)接口。 增加创建包周期规格变更订单接口。 增加按需规格变更接口。 增加查看实例约束信息接口。 增加查询凭据关联的凭据配额接口。 增加设置APP的访问控制接口。 增加查看APP的访问控制详情接口。 增加删除APP的访问控制接口。 增加凭据配额管理接口。 2022-12-13 增加查询项目下所有实例标签接口。 增加查询单个实例标签接口。 增加批量添加或删除单个实例的标签接口。 2022-12-02 增加批量修改后端服务器状态可用接口。 增加批量修改后端服务器状态不可用接口。 增加修改VPC通道健康检查接口。 增加添加或更新VPC通道后端服务器组接口。 增加查询VPC通道后端云服务组列表接口。 增加查看VPC通道后端服务器组详情接口。 增加删除VPC通道后端服务器组接口。 增加更新VPC通道后端服务器组接口。 2022-11-16 增加插件管理接口。 2022-11-01 增加微服务中心管理接口。 2022-11-09 增加SSL证书管理接口。 2020-08-18 上线专享版实例V2版本接口,原V1版本接口待下线。 2020-04-08 增加专享版实例相关接口。 2020-01-05 增加自定义认证、导入导出、ACL策略管理等接口。 2019-03-08 增加域名管理接口。 2018-08-31 增加VPC通道接口。 2018-07-16 第一次正式发布。
  • 响应参数 状态码: 200 表6 响应Body参数 参数 参数类型 描述 order_id String 订单编号 状态码: 401 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求示例 { "product_id" : "00301-35126-0--0", "charging_mode" : 1, "period_type" : 2, "period_num" : 1, "instance_info" : { "available_zone_ids" : [ "xx-xxx-7b", "xx-xxx-7a" ], "bandwidth_size" : 5, "description" : "test create instance", "eip_id" : "41f961ab-2bdd-4ca7-9b59-cfc4fcef10c9", "enterprise_project_id" : "0", "instance_name" : "apig-demo", "maintain_begin" : "22:00:00", "maintain_end" : "02:00:00", "security_group_id" : "36d0ec18-bd10-4da7-86f3-ad7a5ddc55d7", "spec_id" : "PROFESSIONAL", "subnet_id" : "a938121c-11c4-4c91-b983-bc9acd347bb5", "vpc_id" : "0957108c-257c-4ce0-9e93-527d279ce763" } }
  • 响应示例 状态码: 200 OK { "order_id" : "CS2306142249SHP53" } 状态码: 401 Unauthorized { "error_code" : "APIC.7102", "error_msg" : "Incorrect token or token resolution failed" } 状态码: 403 Forbidden { "error_code" : "APIC.7106", "error_msg" : "No permissions to request for the method" } 状态码: 500 Internal Server Error { "error_code" : "APIC.9000", "error_msg" : "Failed to request internal service" }
共100000条