如何做支付服务器的性能测试
JeffChen移动支付网2017/6/15 18:32:20

本文简单介绍如何做支付服务器的性能测试,用什么方法,有什么流程,有什么注意点,用哪些用具等等。

01测试目的

在测试之前,首先要搞明白这次测试的目的和对象,不能一句模糊的”服务器性能是否满足要求”。这里有几个问题需要搞清楚:

a. 当前期望的微信支付交易笔数是多少(根据实际情况估算,一般来说不会超过商户大盘交易笔数的50%)?

b. 当前期望的并发交易量多大(微信支付交易量,企业付款,现金红包,代金券等)?

c. 当前服务器的硬件配置是怎么样的?几台服务器器,服务器的硬件配置是怎么样的?

d. 当前软件架构是怎么样的?每个服务器有几个进程?有几个线程?数据库有几台等。

02测试方法

一般来说,商户的支付服务器是如下这样的简单架构,虚线框里便是我们要测试的支付服务器,这里不讨论这里服务器是有几台物理机,有几个进程,有几个数据库,这里把他作为一个整体讨论。

在实际测试过程中,并不是用真实的交易数据,向微信支付服务器发送请求(所以也就不存在,没有足够多用户合法刷卡条码的问题)。性能测试的时候,应该把发给微信支付的消息,都发给一个“模拟微信支付服务器”的系统,如下图:

这个系统用于模拟微信支付服务器,实际的业务逻辑是,收到商户支付服务器发来的消息后,在延迟合理的时间(这里可以探讨,比如延迟500ms,如果模拟微信支付服务器是在另一台物理机上,那么和商户支付服务器之间的网络延迟也要考虑进去),根据微信支付的接口文档,回复合理的消息给商户支付服务器。

这里模拟微信支付服务器不仅可以回复成功的请求,也应该能模拟失败的情况。

03测试用例

性能测试的关键是,把性能测试需要测试的情况都列出来。常见的性能测试用例举例如下:

a. 1000人同时刷卡支付

b. 一分钟企业付款500笔

c. 微信支付同时有500笔订单报错

d. 同时有1000人领取代金券

e. 稳定性测试(例如持续并发测试24小时)

以上仅仅是举例子,实际情况,需要研发根据商户的支付情况,发现高峰值可能有性能问题的case,在性能测试中测试。

04数据和工具

在性能测试过程中需要收集相关的数据,以便后续继续分析。性能测试中,主要采集以下的数据:

进程的CPU占用率

内存占用

磁盘读写

函数热点信息

为了抓取这些数据,可以利用这些常见的工具:Vtune,Perf, valgrind, nmon等,有时候为了达到测试目的,研发还需要开发自己的测试配套工具和脚本,例如上图的“模拟微信支付服务器”模块,其实也算是测试工具的一部分。

05分析和定位问题

收集到性能数据以后,就需要分析问题。

比如CPU高,那么可以通过nmon或者perf抓到的热点函数,找到是哪几个函数特别占CPU。

找到对应函数以后,分析是为什么这个函数占用的CPU高? 是因为应该异步处理的事情没有适当处理?是因为这个函数的实现做的并不好?是因为这个函数被调用的次数太多(然而没必要)?CPU高的时候I/O是否高,磁盘读写是否多?

如果内存太高了,就要分析内存是稳定在这么高?还是持续上升到这么高?是因为有内存申请好没有释放?还是因为每次消息申请了太大的内存(其实没必要)?

06自动化性能测试

当上面的这些步骤,做几次测试熟练以后,那就可以把整个流程自动化了。

自动化性能测试需要你用脚本语言把整个流程自动化,包括运行性能测试,监控性能测试,自动收集数据,生成性能测试数据图表等等。

一个脚本,一个命令,一个回车,就可以把性能测试自动跑一遍。喝完一杯咖啡之后,一份格式化的性能测试报告,应该自动发送到你的邮箱(纯属YY,毕竟自动跑的时候,作为程序员还要写其他代码)。

以上是个人对支付服务器性能测试的看法,欢迎探讨。最后IOS用户别忘记你们另类的打赏方式,2333333。

本文仅代表个人观点。

本文为作者授权发布,不代表移动支付网立场,转载请注明作者及来源,未按照规范转载者,移动支付网保留追究相应责任的权利。

展开全文
相关阅读
资讯查询取消