1. 在进行压力测试前商家需将订单处理系统在聚石塔环境中部署一套测试环境,搭建所需ECS、RDS资源找支持同学申请(压测资源有效期14天,请尽量在14天内完成压测,否则资源会被释放,若特殊情况需要延期,请联系支持同学申请延期);
2. 压力测试是否通过评估指标包括两个方面:a)高压力情况下系统、机器负载情况;b)系统处理订单数据的回传效率,包括平均回传时间和回传比率。
登录淘宝开放平台(work.open.taobao.com), 进入控制台,进入菜单【开发 - 质量中心 - 性能压测】,选择“订单全链路性能压测”进入全链路测试。
点击【新建场景】按钮进行新建压测环境,选择好配置参数,点击【确定】按钮,填写相关信息即完成新建压测环境。
在“测试环境”列表中,找到新创建环境后,在”查看详情“中获取后分配的测试服务器帐号和密码,将需压测的应用服务部署在测试ECS,数据库迁移到测试RDS。
功能说明:
1)环境配置:查看申请测试环境的基本信息,支持对测试环境应用修改;
2)释放环境:释放当前所申请的测试环境(注意操作,释放后压测资源即释放,不能再压测);
3)管理镜像:已创建的环境支持手动生成镜像,便于版本更新后重新对业务系统进行压测,建议压测结束后对当前环境手工生成镜像;
4)查看详情:查看测试环境的基本信息,公有资源包含帐号和密码,同时支持创建业务db。
完成压测环境搭建后,根据业务类型选择订单处理/仓储管理类应用模式,测试业务包含ERP、订单管理、全渠道商品通、奇门(ERP&WMS)。
创建压测任务名称必须唯一性,选择可用压测环境后显示压测资源相关信息,建议创建压测任务时带上业务标签,比如压测的系统业务为商品通,创建任务名称时的规则为:商品通_xxx品牌商压测。
编辑压测任务注意,编辑后一定记得要保存。
业务流程时序:
注意:
a. 通过质量中心发起压力测试任务后,测试订单数据会根据任务配置情况写入指定RDS中。订单处理系统实时读取RDS的增量数据处理订单,并将处理结果回传;
b. 当订单在系统中到达已分单、已接单、已发货三个状态需立刻回传至质量中心指定统计接口(格式见下文)。三个状态的数据回传比率以及平均时间会体现在测试报告中,最终影响测试通过情况;
c. 在测试环境中订单处理系统可根据自身情况,对部分状态回传时间做定制。如已发货状态回传可以提前进行,而不必等到真发货后再做回传;
订单生产的商品信息支持用户自定义字段,若对商品属性内容有要求,可下载商品文件模块,按模块要求填写商品属性并上传.(注意:1.cid是数值型 2.num是商品的售卖数量不是库存数量 3 csv文件格式,小心乱码)
创建订单的店铺帐户最多为 64 个,商家帐号规则为 taobao_jst_xxx[001-064],例如 taobao_jst_easesou001.(门店的编号是:jst001~jst500之间,每次随机取一个)。
创建压测环境推送库,库名jst_info
推送库RDS表结构-MYSQL
CREATE TABLE jdp_tb_trade ( tid bigint(20) NOT NULL PRIMARY KEY, status varchar(64),type varchar(64), seller_nick varchar(32), buyer_nick varchar(32), created datetime, modified datetime, jdp_hashcode varchar(128), jdp_response mediumtext, jdp_created datetime, jdp_modified datetime )default charset utf8; CREATE INDEX ind_jdp_tb_trade_seller_nick_jdp_modified ON jdp_tb_trade (seller_nick,jdp_modified); CREATE INDEX ind_jdp_tb_trade_jdp_modified ON jdp_tb_trade (jdp_modified); CREATE INDEX ind_jdp_tb_trade_seller_nick_modified ON jdp_tb_trade (seller_nick,modified); CREATE INDEX ind_jdp_tb_trade_modified ON jdp_tb_trade (modified); CREATE TABLE jdp_tb_item ( num_iid bigint(20) NOT NULL PRIMARY KEY, nick varchar(32), approve_status varchar(32), has_showcase varchar(32), created datetime, modified datetime, cid varchar(256), has_discount varchar(32), jdp_hashcode varchar(128), jdp_response mediumtext, jdp_delete int(2), jdp_created datetime, jdp_modified datetime )default charset utf8; CREATE INDEX ind_jdp_tb_item_nick_jdp_modified ON jdp_tb_item (nick,jdp_modified); CREATE INDEX ind_jdp_tb_item_jdp_modified ON jdp_tb_item (jdp_modified); CREATE INDEX ind_jdp_tb_item_nick_modified ON jdp_tb_item (nick,modified); CREATE INDEX ind_jdp_tb_item_modified ON jdp_tb_item (modified);
推送库RDS表结构-SQLSERVER
CREATE TABLE jdp_tb_trade ( tid bigint NOT NULL PRIMARY KEY, status varchar(64), type varchar(64), seller_nick varchar(32), buyer_nick varchar(32), created datetime, modified datetime, jdp_hashcode varchar(128), jdp_response text, jdp_created datetime, jdp_modified datetime ); CREATE INDEX ind_jdp_tb_trade_seller_nick_jdp_modified ON jdp_tb_trade (seller_nick,jdp_modified); CREATE INDEX ind_jdp_tb_trade_jdp_modified ON jdp_tb_trade (jdp_modified); CREATE INDEX ind_jdp_tb_trade_seller_nick_modified ON jdp_tb_trade (seller_nick,modified); CREATE INDEX ind_jdp_tb_trade_modified ON jdp_tb_trade (modified);
压测过程中实时采集测试服务器的性能指标,需要服务商安装并开启性能采集器,根据不同的操作系统性能采集的安装包不同:
windows服务器性能采集器下载地址:点击下载 。
linux服务器性能采集器下载地址:点击下载 。
使用说明:
1)如果是windows用户,下载并解压后,双击“push-start.bat”文件,出现如下图,表明安装成功;
2)如果是linux,解压后执行 sh push-start.sh 命令,执行完成后,再执行 ps -aux | grep jst-agent 命令,若看到如下的进程,表明安装成功;
在创建任务时,设置启动压测的系统参数,保存后在压测任务中提交执行压测。
压测配置注意事项:
1)等待时间拉长些,压测停止后会拒绝接收订单,会报错找不到seller_nick类似问题。
2)大订单比例为0时,大订单个数一定是0,否则大订单比例默认20%。
3)全渠道订单比例一定要大于0.否则没有订单推送。
性能测试联调成功后,在测试任务中执行启动压测;
正式压测前注意事项:
1. rds未被锁定。【防止插入不了数据】
2. rds数据已清空。【防止压测时回流旧订单数据】
3. 确保服务器性能采集配置安装成功,否则无法采集性能信息。压测没有意义。
4. 提供线上正式机器的配置,给到技术小二将压测机器与线上机器配置保持一致。
5. 压测任务的配置参数根据isvname和appname存储,如果之前用其他的压测任务保存过,需重新保存。
压测结束,点击查看测试报告,若测试结果出现异常或者系统出现性能瓶颈,建议进行系统调优后重新压测,若测试结果满足预定业务规模,可设置成最优测试报告并提交业务方进行验收。
接口调用示例
Content内容:
{ "parent_order_code":"", "store_id":"", "status":"", "type":"", "operator":"operator", "action_time":"2016-01-01 01:00:00", "order_codes":[ "12345", "2323" ], "seller_nick":"test", "et_plate_number":"2323" }
对content的内容进行urlencode:
content=%7b%22parent_order_code%22%3a%22%22%2c%22store_id%22%3a%22%22%2c%22status%22%3a%22%22%2c%22type%22%3a%22%22%2c%22operator%22%3a%22operator%22%2c%22action_time%22%3a%222016-01-01+01%3a00%3a00%22%2c%22order_codes%22%3a%5b%2212345%22%2c%222323%22%5d%2c%22seller_nick%22%3a%22test%22%2c%22et_plate_number%22%3a%222323%22%7d http://121.41.173.218:8080/jst/dataflow?method=taobao.qimen.orderstatus.sync×tamp=2016-09-13 13:34:43&format=json&app_key=XXX&v=1.0&sign=31F20A098287408814C9691DAA524496&sign_method=md5&customerId=123456789&content=%7b%22parent_order_code%22%3a%22%22%2c%22store_id%22%3a%22%22%2c%22status%22%3a%22%22%2c%22type%22%3a%22%22%2c%22operator%22%3a%22operator%22%2c%22action_time%22%3a%222016-01-01+01%3a00%3a00%22%2c%22order_codes%22%3a%5b%2212345%22%2c%222323%22%5d%2c%22seller_nick%22%3a%22test%22%2c%22et_plate_number%22%3a%222323%22
压测回流注意事项:
1. 如果编码有问题加remark字段,如果没有就不要加。如果还有问题,请查看具体传的content内文字编码。
2. 人工mokcl的数据回流是不成功的,只有压测启动后,系统自动回流的才会成功。否则也会提示seller_nick找不到的错误。
3. 推送的订单,全渠道的订单是按配置的比例推送的,回流只需回流全渠道的订单,非全渠道的订单不需要回流。
?
接口简介 |
订单在达到已分单时立刻调用此接口回传数据 |
对应线上接口 |
taobao.qimen.orderstatus.sync(奇门) |
接口协议 |
TOP |
回传URL |
名称 |
类型 |
是否必填 |
示例值 |
描述 |
parent_order_code |
String |
必须 |
194111891685000 |
淘系主订单号 |
store_id |
String |
可选 |
34511224 |
目标门店的商户中心门店编码 |
status |
String |
必须 |
X_ALLOCATION_NOTIFIED(派单到门店或电商仓) |
订单状态 |
type |
String |
可选 |
FAHUO |
业务类型 |
operator |
String |
必须 |
xxx |
操作人 |
action_time |
Date |
必须 |
2016-05-17 12:00:10 |
事件发生时间 |
order_codes |
String[] |
必须 |
194111891685000,194111891685001 |
淘系子订单号列表 |
seller_nick |
String |
必须 |
湖畔网络 |
(压测特有)订单详情中的seller_nick字段 |
et_plate_number |
String |
必须 |
MTQ3MzIxNTU1NTAwMw== |
(压测特有)订单详情中的 et_plate_number字段 |
接口简介 |
订单在达到已接单时立刻调用此接口回传数据 |
对应线上接口 |
taobao.qimen.orderstatus.sync(奇门) |
接口协议 |
TOP |
回传URL |
名称 |
类型 |
是否必填 |
示例值 |
描述 |
parent_order_code |
String |
必须 |
194111891685000 |
淘系主订单号 |
store_id |
String |
可选 |
34511224 |
目标门店的商户中心门店编码 |
status |
String |
必须 |
X_SHOP_ALLOCATION(门店已接单) |
订单状态 |
type |
String |
可选 |
FAHUO |
业务类型 |
operator |
String |
必须 |
xxx |
操作人 |
action_time |
Date |
必须 |
2016-05-17 12:00:10 |
事件发生时间 |
order_codes |
String[] |
必须 |
194111891685000,194111891685001 |
淘系子订单号列表 |
seller_nick |
String |
必须 |
湖畔网络 |
(压测特有)订单详情中的seller_nick字段 |
et_plate_number |
String |
必须 |
MTQ3MzIxNTU1NTAwMw== |
(压测特有)订单详情中的 et_plate_number字段 |
接口简介 |
订单在达到已发货时立刻调用此接口回传数据 |
对应线上接口 |
taobao.qimen.orderstatus.sync(奇门) |
接口协议 |
TOP |
回传URL |
名称 |
类型 |
是否必填 |
示例值 |
描述 |
parent_order_code |
String |
必须 |
194111891685000 |
淘系主订单号 |
store_id |
String |
可选 |
34511224 |
目标门店的商户中心门店编码 |
status |
String |
必须 |
X_SHOP_HANDLED(门店/电商仓已发货) |
订单状态 |
type |
String |
可选 |
FAHUO |
业务类型 |
operator |
String |
必须 |
xxx |
操作人 |
action_time |
Date |
必须 |
2016-05-17 12:00:10 |
事件发生时间 |
order_codes |
String[] |
必须 |
194111891685000,194111891685001 |
淘系子订单号列表 |
seller_nick |
String |
必须 |
湖畔网络 |
(压测特有)订单详情中的seller_nick字段 |
et_plate_number |
String |
必须 |
MTQ3MzIxNTU1NTAwMw== |
(压测特有)订单详情中的 et_plate_number字段 |
创建压测任务的时候,在定义接口那里先选择一个空接口,启动压测。
参见推送表字段:数据推送服务表结构。
压测接口请求地址统一http://121.41.173.218:8080/jst/dataflow .需要sessionkey的接口,sessionkey可以随意填写,不会验证其合法性。appkey等填写正式环境的。
压测资源有效期14天,请尽量在14天内完成压测,否则资源会被释放,若特殊情况需要延期,请联系支持同学申请延期。
数据库连接配置里面:rm-XXX.XX.rds.aliyuncs.com,3306,rm-XXX.XX.rds.aliyuncs.com,3433 端口的地方是逗号。
压测任务选择全渠道压测,会将该字段推到订单属性里面。 这个字段是用来统计回传率的, 压测环境需要的。
推送会设置全渠道订单的比例,只需要回传全渠道的订单。
分单到电商仓:需要按接口回传两个状态: X_ALLOCATION_NOTIFIED(派单到门店/电商仓)和X_SHOP_HANDLED(门店已发货/电商仓)
分单到门店: 需要按接口回传三个状态: X_ALLOCATION_NOTIFIED(派单到门店/电商仓)、X_SHOP_ALLOCATION(门店已接单)和X_SHOP_HANDLED(门店已发货/电商仓)
等待时间指的是在持续时间后,还要等待多长时间关闭任务。因为全渠道压测后面有一个回传数据的步骤,任务还不能停止。
{"qimen_orderstatus_sync_response":{"message":"null","qimen_code":"NullPointerException"}} content加上编码问题,content内容里面加一个字段remark=utf8code。 { "parent_order_code":"", "store_id":"", "status":"", "type":"", "operator":"operator", "action_time":"2016-01-01 01:00:00", "order_codes":[ "12345", "2323" ], "seller_nick":"test", "et_plate_number":"2323", "remark":"utf8code" }
num 代表一个订单会减几个库存,如果这个值默认不填 ,代表是1个。
按下图操作,重置下相关参数。
测试参数设置时:将店铺设置为1,开始并发数设置为1,并发增幅设置为0即可。