前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何对单行多次update接口进行压测

如何对单行多次update接口进行压测

作者头像
FunTester
发布2019-10-29 16:34:16
4530
发布2019-10-29 16:34:16
举报
文章被收录于专栏:FunTesterFunTester

update某一个字段值和原来值相同时性能比不同时更高。

在对服务端进行测试的时候,经常会遇到这类情况:单个接口的功能就是修改数据库中某一条数据某个字段的值。在对这类接口进行压测的过程中,遇到一个难点,如何每次都设置不同的值,当然可以通过获取一类的随机数的形式规避掉重复的概率,但是在特定场景下依然无法解决,比如字段值范围偏小。

在工作中遇到一个典型的案例就是对于用户性别的修改,用户性别属性在数据库中以0-3的数字表示无,男,女,保密。在接口参数中也只有四个选择变量值。

这这种情况下,使用刚才的方案采取随机数的情况就难以实现,因为重复的概率很大。

下面是我当时采取的测试方案(仅供参考):

并发策略依然采用之前的方案:一个线程绑定一个用户,不断发起请求。

解决传参重复:每个线程绑定一个integer类对象,然后每次把对象的值当做性别的值放到请求参数里面去。完成请求之后,执行“++”操作,然后再执行对4取模然后赋值本身。伪代码如下:

代码语言:javascript
复制
int i;
//循环开始
doRequest(i);
i++;
i=i%4;
//循环结束
//单线程执行完成

通过这样的方法即可解决请求参数可能跟原有值重复问题,如果还需要对每一次结果进行验证,可继续在接口方法中进行拓展。 下面是我用Java写的一个demo,如果是Groovy写脚本的话会更简单一些。

代码语言:javascript
复制
package com.fun;

import com.fun.base.constaint.ThreadBase;
import com.fun.frame.SourceCode;
import com.fun.frame.excute.Concurrent;
import com.fun.frame.httpclient.FanLibrary;

import java.util.ArrayList;
import java.util.List;

public class G extends SourceCode {

    public static void main(String[] args) {
        int threadNum = 100;
        int times = 1000;
        List<ThreadBase> threadTask = new ArrayList<>();
        for (int i = 0; i < threadNum; i++) {
            ThreadBase<Integer> threadBase = new ThreadBase<Integer>(i, times) {
                User user;

                @Override
                protected void before() {
                    user = new User(t);
                }

                @Override
                protected void doing() throws Exception {
                    user.doRequest(t++);
//                    user.check();//校验
                    t = t % 4;
                }

                @Override
                protected void after() {

                }
            };
            threadTask.add(threadBase);
        }
        Concurrent concurrent = new Concurrent(threadTask);
        concurrent.start();
        FanLibrary.testOver();
    }


}

class User {

    public User(int i) {

    }

    public void doRequest(int i) {
        System.out.println("完成!" + i);
    }

    public boolean check() {
        return true;
    }
}

然后脚本写完之后还可以通过把线程数和请求数进行参数化来让使用更加灵活。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档