「All right reserved, any unauthorized reproduction or transfer is prohibitted」
在服务端性能优化的时候,有一种方案叫 “异步写入”。就是把本来要写入数据库的功能放到异步来做,跟异步查询转同步的区别在于,异步查询是要等结果的,而异步写入则可以不等返回结果,甚至直接把写入任务丢到一个专门的任务队列中。
在对于实时性要求并不高的业务来讲,这是一个非常值得推荐的方法,比如用户消费了一笔金额场景中,对于用户消费信息的记录以及消费带来的积分提升、会员等级提升都可以异步来实现。日常接触最多的异步应该是日志和打点系统,几乎没有见过非异步实现的方案。
异步写入带来的另外一个问题就是 “延迟”,一般开发会给出一些延迟的参数值,但是在性能测试过程中这个值可能会非常大,甚至超出用户的可接受范围。这个时候就需要测试 延迟在不用压力情况下的数值大小,以便给出最好的服务负载数据。
下面分享一个检测用户更改个人信息的接口的延迟测试方案:
package com.okayqa.teacherpad
import com.fun.utils.RString
import com.okayqa.teacherpad.base.OkayBase
import com.okayqa.teacherpad.function.UserInfo
class T extends OkayBase {
public static void main(String[] args) {
def base = getBase()
def info = new UserInfo(base)
def total = []
def diff = []
100.times {
def uname = RString.getString(5)
def result = info.updateInfo(1, uname)
int i;
if (isRight(result)) {
def mark0 = getNanoMark()
while (true) {
def mark00 = getNanoMark()
def userinfo = info.getUserInfo()
def mark01 = getNanoMark()
diff << mark01 - mark00
if (userinfo.getUserInfo().getString("uname") == uname) break;
if (i++ > 5) break
}
def mark1 = getNanoMark()
total << mark1 - mark0
} else {
fail()
}
}
//求平均值的两种方法
def var = diff.sum() / diff.size()
def average = total.stream().mapToInt().average();
output "单次修改信息延迟约${average - var / 2}"
}
}
上面的参数可以根据实际大小来调整,一边压测一边另起进程测试写入接口的延迟情况。
- 郑重声明:文章首发于公众号 “FunTester”,禁止第三方(腾讯云除外)转载、发表。
技术类文章精选
- Linux 性能监控软件 netdata 中文汉化版
- 性能测试框架第三版
- 如何在 Linux 命令行界面愉快进行性能测试
- 图解 HTTP 脑图
- 将 swagger 文档自动变成测试代码
- Selenium 4.0 Alpha 更新日志
- Selenium 4.0 Alpha 更新实践
- 如何统一接口测试的功能、自动化和性能测试用例
非技术文章精选
- 写给所有人的编程思维
- 成为自动化测试的 7 种技能
- Web 端自动化测试失败原因汇总
- 测试人员常用借口
- API 测试基础
- API 自动化测试指南
- 未来的 QA 测试工程师
- JSON 基础
- 2020 年 Tester 自我提升
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「All right reserved, any unauthorized reproduction or transfer is prohibitted」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.