如何对单行多次update接口进行压测
update某一个字段值和原来值相同时性能比不同时更高。
在对服务端进行测试的时候,经常会遇到这类情况:单个接口的功能就是修改数据库中某一条数据某个字段的值。在对这类接口进行压测的过程中,遇到一个难点,如何每次都设置不同的值,当然可以通过获取一类的随机数的形式规避掉重复的概率,但是在特定场景下依然无法解决,比如字段值范围偏小。
在工作中遇到一个典型的案例就是对于用户性别的修改,用户性别属性在数据库中以0-3的数字表示无,男,女,保密。在接口参数中也只有四个选择变量值。
这这种情况下,使用刚才的方案采取随机数的情况就难以实现,因为重复的概率很大。
下面是我当时采取的测试方案(仅供参考):
并发策略依然采用之前的方案:一个线程绑定一个用户,不断发起请求。
解决传参重复:每个线程绑定一个integer类对象,然后每次把对象的值当做性别的值放到请求参数里面去。完成请求之后,执行“++”操作,然后再执行对4取模然后赋值本身。伪代码如下:
1int i;
2//循环开始
3doRequest(i);
4i++;
5i=i%4;
6//循环结束
7//单线程执行完成
通过这样的方法即可解决请求参数可能跟原有值重复问题,如果还需要对每一次结果进行验证,可继续在接口方法中进行拓展。
下面是我用Java写的一个demo,如果是Groovy写脚本的话会更简单一些。
1package com.fun;
2
3import com.fun.base.constaint.ThreadBase;
4import com.fun.frame.SourceCode;
5import com.fun.frame.excute.Concurrent;
6import com.fun.frame.httpclient.FanLibrary;
7
8import java.util.ArrayList;
9import java.util.List;
10
11public class G extends SourceCode {
12
13 public static void main(String[] args) {
14 int threadNum = 100;
15 int times = 1000;
16 List<ThreadBase> threadTask = new ArrayList<>();
17 for (int i = 0; i < threadNum; i++) {
18 ThreadBase<Integer> threadBase = new ThreadBase<Integer>(i, times) {
19 User user;
20
21 @Override
22 protected void before() {
23 user = new User(t);
24 }
25
26 @Override
27 protected void doing() throws Exception {
28 user.doRequest(t++);
29// user.check();//校验
30 t = t % 4;
31 }
32
33 @Override
34 protected void after() {
35
36 }
37 };
38 threadTask.add(threadBase);
39 }
40 Concurrent concurrent = new Concurrent(threadTask);
41 concurrent.start();
42 FanLibrary.testOver();
43 }
44
45
46}
47
48class User {
49
50 public User(int i) {
51
52 }
53
54 public void doRequest(int i) {
55 System.out.println("完成!" + i);
56 }
57
58 public boolean check() {
59 return true;
60 }
61}
然后脚本写完之后还可以通过把线程数和请求数进行参数化来让使用更加灵活。
技术类文章精选
非技术文章精选
大咖风采
然后脚本写完之后还可以通过把线程数和请求数进行参数化来让使用更加灵活。
技术类文章精选
- java一行代码打印心形
- Linux性能监控软件netdata中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在Linux命令行界面愉快进行性能测试
- 图解HTTP脑图
- 将swagger文档自动变成测试代码
- 五行代码构建静态博客
- 基于java的直线型接口测试框架初探
非技术文章精选
- 为什么选择软件测试作为职业道路?
- 写给所有人的编程思维
- 自动化测试的问题所在
- 成为优秀自动化测试工程师的7个步骤
- 未来10年软件测试的新趋势-上
- 未来10年软件测试的新趋势-上
- 手动测试存在的重要原因
- 成为自动化测试的7种技能
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-10-26 MYSQL性能优化之Mysql数据库监控
2018-10-26 Linux定时清理30天前的Tomcat日志脚本
2018-10-26 使用shell巧妙高效的批量删除历史文件或目录
2018-10-26 linux shell 脚本 历史文件清理脚本,按天,按月,清理前N天的历史文件,删除指定大小历史文件,历史文件归档清理
2018-10-26 Linux打包压缩
2018-10-26 Linux文件查找