前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >压力测试中的子服务mock

压力测试中的子服务mock

作者头像
用户5521279
发布2019-06-03 15:06:53
2.9K0
发布2019-06-03 15:06:53
举报
文章被收录于专栏:搜狗测试搜狗测试

问题

做压力测试有很多让人头疼的问题,例如:数据构造、机器准备、发压机性能差、带宽不够等;目前越来越多的服务引入的子服务、微服务的概念,这给性能测试增加了另一个问题——子服务mock,今天来分享一个解决方案;

目标

1、子服务不能是限制被测服务最大并发数的影响因素;2、子服务尽可能的返回真实数据;

解决方案

第一种 直接使用线上的后端服务进行压测

  • 优点:近线上状态;代价极小;
  • 缺点:上子服务的稳定性、数据统计、引入脏数据等;

第二种 部署完整的后端测试环境

  • 优点:与线上隔离;测试结果基本与线上环境一致,测试结果相对准确;
  • 缺点:部署成本极高;要保证子服务性能的话会造成资源浪费;

第三种 部署部分子服务

  • 优点:与线上隔离;部署成本相对较小;
  • 缺点:测试结果有出入,后端性能可能是瓶颈;

第四种 使用测试平台mock后端接口数据

  • 优点:与线上隔离;
  • 缺点:mock平台一般性能较弱,测试结果有出入;mock平台的逻辑规则会有一定的学习成本;

以上是一般的解决方案,下面说一种个人觉得是性价比最高的解决方案;

第五种 使用nginx cache mock子服务返回内容;

  • 优点:与线上隔离;子服务返回内容与线上一致;可保证后端性能不是瓶颈;
  • 缺点:必须使用固定的一组请求(请求数量在几万的量级应该没问题);

配置方法

第一步 配置proxy规则

  • 就像配置nginxlog规则一样,在nginx.conf中添加proxy_cache_path
代码语言:javascript
复制
proxy_cache_path /search/nginx/cache/ levels=1:2 keys_zone=ldd-test-cache:154m max_size=3g inactive=24h ;
  • /search/nginx/cache/存放缓存文件的位置
  • levels将缓存文件存到2级目录
  • keys_zone这条缓存配置名及可以储存多少个key(1m可以存储8000个key)
  • max_size最大缓存空间,达到最大值时会删除最少使用的key
  • inactive未被访问多久就清除key

第二步 添加具体缓存location

  • 在conf里添加需要添加cache规则的location块儿
代码语言:javascript
复制
server
{
    listen *:80;
    root html;
    server_name mock.ldd.com;
    access_log /search/odin/nginx/logs/${server_name}_access_log main;
    location / {
        proxy_pass http://test.ldd.com;
        proxy_cache ldd-test-cache;
        proxy_cache_key $uri;
        proxy_cache_valid any 1m;
    }
}
  • proxy_pass将通过请求test.ldd.com的相同地址获得key value
  • proxy_cache使用的cache规则
  • proxy_cache_key使用请求的哪部分作为key
  • proxy_cache_valid此处是对所有返回码缓存1分钟

压测结果

非cache(后端是django写的mock服务)

代码语言:javascript
复制
Running 10s test @ http://XXX.XXX.XXX/test
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   204.41ms  258.53ms   1.79s    90.69%
    Req/Sec    33.00     20.35   111.00     59.69%
  2846 requests in 10.01s, 0.92MB read
  Socket errors: connect 0, read 0, write 0, timeout 18
Requests/sec:    284.33

cache

代码语言:javascript
复制
Running 10s test @ http://XXX.XXX.XXX/test
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    24.92ms  141.65ms   1.89s    97.72%
    Req/Sec    13.11k     6.64k   46.53k    70.50%
  1159141 requests in 10.10s, 459.63MB read
  Socket errors: connect 0, read 0, write 0, timeout 48
Requests/sec: 114765.82
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 目标
  • 解决方案
  • 配置方法
  • 压测结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档