FunTester 利用微基准测试修正压测结果

FunTester · 2020年04月01日 · 982 次阅读

前段时间做了一次参数需要签名的接口性能测试,有文为证:线程安全类在性能测试中应用。在处理测试结果时候遇到一个问题:因为本机签名耗时较多,10ms 级别,并发情况能达到 100ms 级别。所以进行数据校验尤为重要。自研的性能测试框架:性能测试框架第三版

在两次请求间歇,本地只是做了测试结果的收集,测试数据的生成和签名,其中签名是最耗时的。这个时候在收集完测试数据之后,就需要进行一轮甚至几轮的微基准测试。

微基准测试用来测量微小代码单元的性能,包括调用同步方法的用时与非同步方法的用时比较,创建线程的代价与使用线程池的代价,执行某种算法的耗时与其替代实现的耗时,等等。

下面是我组装参数和参数签名方法,注释掉请求和处理相应的方法之后:

        @Override
        protected void doing() throws Exception {
            String url = com.okayqa.studentapd.base.OkayBase.HOST + "/api/member/createOrRenewMember"
            Map<String, String> p = new HashMap<>();
            p.put("days", "1");
            p.put("memberId", "208");
            p.put("orderNo", "F" + RString.getString(4) + i.getAndAdd(1));
            p.put("orderPaySystemId", "85123213");
            p.put("orderPayTime", "2020-02-09 10:00:00");
            p.put("payMoney", "30");
            p.put("recordSources", "3");
            p.put("renewal", "false");
            def user = Users.getStuUser(i.getAndAdd(1) % 1000)
//            output(user)
            p.put("systemId", user);
            String sign = RSAUtilLJT.sign(p, RSAUtilLJT.getPrivateKey(RSAUtilLJT.RSA_PRIVATE_KEY));
            p.put("sign", sign);
            HttpPost post = getHttpPost(url, JSON.toJSONString(p));
            def s = "F" + getNanoMark()
//            post.addHeader(getHeader("requestid", s));
//
//            def simlple = FanLibrary.excuteSimlple(post)
//            if (!simlple.contains("success")) {
//                logger.warn(s + OR + user + simlple.toString())
//                fail()
//            }
        }
        ```

        这样再运行接口压测脚本:


```Groovy
public static void main(String[] args) {
        def argsUtil = new ArgsUtil(args)
        def thread = argsUtil.getIntOrdefault(0, 1)
        def times = argsUtil.getIntOrdefault(1, 100)
        def reqs = []

        thread.times {
//            def mark = new HeaderMark("requestid")
            reqs << new Thr(times)
        }

        new Concurrent(reqs, "会员支付和续费接口").start()
        testOver()
    }

用同样的线程和次数来测试非请求消耗的时间,然后再从接口性能测试时间中减去这块时间就好了。这样做还有一个问题:经过数据校准后的吞吐量应该是高于实际值的,因为本机请求间隙相当于进行了等待,实际服务器承受的压测并不是修正后的数据。关于这一点,我将在下一期文章分享如何减少本机误差。


  • 郑重声明:文章首发于公众号 “FunTester”,禁止第三方(腾讯云除外)转载、发表。

技术类文章精选

非技术文章精选

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册