片言社区 - 专注原创技术分享
话题文章招聘动态
登录/注册
  • 首页
  • FunTester
  • 文章列表
  • Redis API——Set功能实践与性能测试【Go版】

    之前说要写个 Go 语言版本的 Redis 操作 API 和性能测试的系列,没想到鸽了这么久才写了一半。实在实力不济,不仅需要多充充电,更需要结合实践,劳逸结合。首先来一个前文回顾: Go语言Redis API基本功能实践 2022-06-23 Redis API——List功能实践与性能测试【Go版】 2022-08-15 按照惯例,我们先介绍常用的 API及其封装,然后写个简单的测试用例,然后再进行性能测试。PS:由于不可描述的原因,本机的磁盘 IO 性能变差,测出的性能参考性较差。 常用...
    FunTester发布于 2022-09-21 18:20:45
    0  150  0  0 
  • 亿级日志队列回放性能测试初探

    队列通常是软件设计模式中的基本组件。但是如果每秒接收到数百万条消息,改如何处理?如果多个消费者都需要能够读取所有消息,又改如何处理?难道需要把所有消息的数据都放在内存中吗?这样 JVM GC 又表现如何? 之前我写过几个流量回放模型: 基于时间戳的日志回放引擎 2022-08-22 千万级日志回放引擎设计稿 2021-12-30 虽然方案 2 已经被更优秀的方案替代,但是思路相同,均是把日志进行格式转换之后存放(这一点跟 goreplay 略有相似),在千万日志级别,我是直接放在内存中。大约 ...
    FunTester发布于 2022-09-15 09:59:24
    0  127  0  0 
  • Java 序列化10倍性能优化对比测试

    今天分享 Java 对象序列化的不同方法,并对不同序列化方式的性能进行基准测试。 关于持久队列来讲,必须将 Java 堆内存的对象转换成文件中的二进制数据,对象序列化的性能将显著影响整体的性能表现。相当多的高性能框架都会在序列化和反序列化上下功夫优化性能。本文使用了开源框架 Chronicle Queue 提供的能力进行序列化和反序列化对比测试。 数据传输对象 在本文中,我用一个对象类FunData,作为 Data Transfer Object(以下简称 DTO)的数据传输对象 ,其中包含具有较多字...
    FunTester发布于 2022-09-09 14:06:28
    0  133  0  0 
  • i++需要多少QPS才能测出BUG

    前段时间我关注了一篇文章,分享如果使用并发压测发现 BUG。突然想起一个话题: 线程不安全需要多少 QPS 压测才能发现 BUG ? 我接触到的并发缺陷绝大部分是因为线程安全问题导致的,还有一些数据库锁的问题(这个不擅长)这里就不分享了。 关于 Java 的一些线程安全的问题,可以参考旧文: 操作的原子性与线程安全 2019-07-16 快看,i++真的不安全 2019-07-19 原子操作组合与线程安全 2019-07-22 线程安全集合类中的对象是安全的么? 2020-02-24 La...
    FunTester发布于 2022-09-05 10:21:15
    0  156  0  0 
  • Selenium 中的 JUnit 注解

    JUnit 是一个基于 Java 的开源框架,可帮助测试人员执行单元测试。JUnit 主要用于测试应用程序的每个单元或组件,例如类和方法。它有助于编写和运行可重复的自动化测试,以确保项目代码按预期运行。还可以使用 JUnit 执行 Selenium 自动化测试用例,以测试 Web 应用程序或网站。 在我们开始讨论 Selenium 中的 JUnit 注解之前,让我们快速回顾一下 JUnit 在测试人员社区中流行的原因。 为什么 JUnit 在测试人员中如此受欢迎 毫无疑问,JUnit 被认为是顶级 J...
    FunTester发布于 2022-08-31 09:35:53
    0  132  0  0 
  • 基于时间戳的日志回放引擎

    之前写过一个日志回放引擎的第一代千万级日志回放引擎设计稿,当时理解的日志回放就是把日志记录的请求重新发出去,这就是回放线上用户的流量了。可是在我最近看goreplay的过程中,重新刷新了我的认知。 查阅了一些资料,终于算是了解了一些基于时间戳的方案和思路。大体如下:通过工具把线上某段时间的流量记录下来,其中包含时间戳等信息,然后通过回放引擎把流量回放出去。 解决思路 目前流量回放集中于HTTP流量,所以之前写过的引擎的发压部分还是可以继续使用。所以我也有了自己的解决思路: 日志清洗,其实就是把规范...
    FunTester发布于 2022-08-22 21:40:52
    0  174  0  0 
  • 要相信自己可以解决问题

    最近在读《卓有成效的工程师》,其中在《精益求精,优化学习方式》这一章节小标题培养成长型思维模式的内容,让我突然多了一层感悟。 提起成长型思维,就不得不提另外一本书《终身成长》,作者卡罗尔·德维克。其中让我印象最深的就是:人的能力是可以改变的。 之所以想起来这个信念,是因为一个现象,总有人愿意把自己遇到问题,原封不到的丢到网上、社群里,请教各路大佬。 在学习的过程中,我有一个非常有用的经验,遇到问题,先看报错,再找日志,有条件就debug。 但是每每看到群里的问题我就很奇怪,为什么把原装的问题截图发出...
    FunTester发布于 2022-08-17 10:07:53
    0  293  0  0 
  • Groovy语境下的Map

    Groovy中的Map,不仅兼容了Java API提供的各种功能,还拓展了许多特殊语法和功能方便测试人员在使用的过程中提高效率,更快地构建测试脚本。 下面我就从几个方面分享一下Groovy Map的神奇之处。 创建 Java中通常创建一个Map的常用语法Map<Integer, Integer> map = new HashMap();。而在Groovy中,我们可以使用语法[k:v]来创建Map。相当于给Map对象初始化赋值了,而且语法简洁了许多。 Groovy创建Map语法def map = [:...
    FunTester发布于 2022-08-16 10:52:54
    0  148  0  0 
  • Redis API——List功能实践与性能测试【Go版】

    前文提到Go语言Redis API基本功能实践,以及后续的学习实践计划,由于总总原因耽搁了许久。终究是计划赶不上变化,学完Go语言操作Redis的常用功能之后,我打算把API实践、封装、简单性能测试场景放在一起写。 今天分享一下Redis list常用操作API的实践和性能测试,API的封装会放在文末。 常用API实践 LPush、LPush、LPush、LPush 关于API的功能,看名字就能够明白八九不离十。两组变量:左和右,推送和获取。 下面是我写了一个测试用例,均测试通过。 func T...
    FunTester发布于 2022-08-15 14:35:19
    0  148  0  0 
  • 视频是主动学习吗?

    相信大多数测试er在学习相关技术的时候,都看过对应的视频教程。无论是在线和离线视频都是一个非常好的学习提升自己的路径。 在前段时间的学习过程里,我不禁问了自己一个问题:视频学习是主动学习还是被动学习? 先让我们看一下两者的区别。 主动学习 主动学习是一种学习者重度参与的学习方式,是一种以学习者为中心的学习方式。学习者需要以探索者的角色进入学习状态,需要自己的思考、判断,方能融会贯通。 被动学习 被动学习是传统的学习方法,学生很少参与。环境通常以教授者为中心。学者需要通过被动地接受知识。 从...
    FunTester发布于 2022-08-09 18:04:59
    0  160  0  0 
  • 动态接口比例性能测试实践

    之前在性能测试中,我重新认识了随机数的功能性能测试中的随机数性能问题探索。但目前工作中接触到的都是静态的比例,即用例真正开始前,各个接口、场景的比例都是固定的。按照我的思路,旧会存在一个提前初始化完成的list,但是最近工作中遇到了需要在压测过程中(动态QPS模型),动态调整两个场景的比例值,计划是在某个范围内周期波动。 其实核心问题:如何在一个变动的list随机实践中,保证线程安全。 这里先分享一下从一个数组中随机取一个对象的思路,如下: /** * 随机选择某一个对象 ...
    FunTester发布于 2022-08-03 17:37:37
    0  186  0  0 
  • 动态模型中嵌入静态模型实践

    在之前的动态模型之动态增减【FunTester测试框架】中分享了动态的性能测试模型的实现,后面在实际工作中也是受益匪浅,有文为证动态压测模型让工作更轻松。 这里再重复一下思路,就是通过异步线程接收控制台输入信息,然后对线程池的增减管理或者对QPS管理器的QPS进行干预。 相对一段时间来说只有一些简单的功能: 设置步长 增减步长 终止测试 很长一段时间内都够用了,但是随着测试的深入,可能需要执行更多动态用例,如果靠人力一个个输入会比较麻烦。这个时候我又想起来了静态模型的好处来。就是过程不需要中途干...
    FunTester发布于 2022-08-01 14:06:26
    0  159  0  0 
  • 延迟队列DelayQueue性能测试

    在之前的性能测试中,用到了延迟队列java.util.concurrent.DelayQueue的功能下单延迟10s撤单性能测试,其实也是简单使用到了基本的API,演示如下DelayQueue基础功能演示。在对Java & Go各种队列做性能对比测试的规划里面也没法这个延迟队列算进来。当时感觉这个队列设计到很多排序,而且用的数组实现的队列,加上了java.util.concurrent.ArrayBlockingQueue队列的性能资料,所以以为延迟队列性能比较差,放弃了做对比测试。 最近在看了gorep...
    FunTester发布于 2022-07-27 11:56:58
    0  187  0  0 
  • 敏捷 ? DevOps ?

    在互联网行业中,永无止境的讨论主题之一是:敏捷与DevOps。对于这两个概念来说,过程彼此不同;但是它们仍然有一些相似之处。 敏捷 敏捷方法论是一种实践,它促进整个项目的 SDLC(软件开发生命周期)的开发和测试的持续迭代。在敏捷方法中,开发和测试活动是同时进行的,这涉及到 SDLC 过程中开发和测试的持续迭代。 敏捷宣言强调的敏捷软件开发的四个核心价值是: * 个体和互动高于流程和工具 * 工作的软件高于详尽的文档 * 客户合作高于合同谈判 * 响应变化高于遵循计划 敏捷是一个软件开发过程,它符合...
    FunTester发布于 2022-07-22 09:41:55
    0  166  0  0 
  • jdbc自带MySQL连接池实践

    在上期文章自定义MySQL连接池中,我提到了没找到一个特别合适的MySQL连接池实现,所以自己写了一个基于通用池化框架commons-pool2的MySQL连接池,并且模仿了Go语言的gorm框架设计思路,把借和还的操作不暴露给用户,只处理用户发来的SQL语句的思路,封装了一个com.funtester.db.mysql.MysqlPool。 可惜打脸的事情来的太快了,在录制视频的时候偶然发现了Intellij代码提示有个com.mysql.cj.jdbc.MysqlConnectionPoolDataS...
    FunTester发布于 2022-07-18 12:25:10
    0  160  0  0 
  • 性能测试中的随机数性能问题探索

    在软件测试中,经常会遇到随机数。我简单分成了两类: 简单取随机数; 从一个集合中随机取值。 其实第二个场景包含在第一个场景内。对于接口测试来说,通常我们直接使用第二种场景比较多,就是从某一个集合中随机取一个值。如果更复杂一些,每个值拥有不同的权重,其中这个也可以转化成第二个场景来说。 缘起 为什么要把第二个场景和第一个场景分开呢,这个问题源于之前写过的文章ConcurrentHashMap性能测试,当时发现自己封装的com.funtester.frame.SourceCode#random(ja...
    FunTester发布于 2022-07-12 15:24:51
    0  270  0  0 
  • gRPC三种Java客户端性能测试实践

    我之前分享了Java和Go语言版本的gRPC接口的服务端和客户端的开发,使用的基本都是基础的原声API,旧文如下: Grpc服务开发和接口测试初探【Java】 2022-04-20 gRPC服务开发和接口测试初探【Go】 2022-05-07 gRPC三种客户端类型实践【Java版】 2022-05-11 经过一段时间的摸索和尝试,我觉得又可以了,今天给大家分享一下三种Java客户端的性能测试实践,其中主要是com.funtester.fungrpc.HelloServiceGrpc#newB...
    FunTester发布于 2022-07-06 14:31:39
    0  198  0  0 
  • Jenkins抛弃Java 8拥抱Java 11

    官方文档链接:https://www.jenkins.io/blog/2022/06/28/require-java-11/。 介绍 Jenkins 项目致力于为最终用户和开发人员提供世界级的平台体验。这种体验的核心是Java,它是一种面向对象的编程语言,具有Java 虚拟机 (JVM)形式的跨平台运行时。自成立以来,Jenkins 项目一直是 Java 的主要消费者,向超过 300,000 个控制器的安装基础分发了 1,​​800 多个插件,并且 Jenkins 经常出现在有史以来顶级 Java 应...
    FunTester发布于 2022-07-03 10:58:27
    0  204  0  0 
  • 软件测试的三个沟通技巧

    成熟的沟通技巧对于软件测试工程师在竞争激烈的软件测试领域中发挥作用至关重要。虽然软件测试职业需要编程技术和业务能力等硬技能,但优秀的测试人员是全面的,并且掌握了人际沟通的艺术。能够有效在团队以及与外部进行交流的测试人员通常会让团队更容易成功。 沟通不畅可能导致缺陷与错误编码一样昂贵)。沟通不畅不仅会导致缺陷,还会导致相互指责、关系降低和项目延迟。要使软件测试人员取得成功,必须掌握沟通技巧,尤其是积极倾听、非语言沟通和压力管理。 积极倾听 人们无法沟通的原因有很多,但一个糟糕的倾听者是最令人沮丧的一种。...
    FunTester发布于 2022-06-28 17:34:35
    0  180  0  0 
  • 自定义MySQL连接池

    最近在学习了通用池化框架commons-pool2实践之后,再HTTP性能测试中进行了实践,结果出乎意料,对于性能提升没啥卵用。经过我自己的本地测试,性能也是足够好的。 后来我仔细想了想,原来是我用错地方了。本来想自己写一个Redis的连接池的没想到,jedis的连接池本身就是commons-pool2开发的,让我有点意外,看来想的是一样的。commons-pool2用来做连接池是非常不错的。 我仔细找了找,发现还缺一个本地的MySQL连接池,而不是springboot那样需要启动一个服务才行。当然应该...
    FunTester发布于 2022-06-27 21:27:27
    0  163  0  0 
上一页 下一页
  • 1
  • 2
  • 3
  • 4
  • 5
关于作者
FunTester
FunTester
公众号FunTester,Have Fun ~ Tester !
  • 383
    文章数
  • 5
    话题数
  • 25
    积分
  • 38
    注册排名
社区热文
  • Git: git pull/git push时提示 "error: update_ref failed for ref"、"cannot lock ref"等处理方法
  • 一步步玩转测试平台开发(七):巧用 Jenkins "Post Build Task”插件
  • vscode插件markdownlint markdown规范扫描时错误提示集锦
  • 一步步玩转测试平台开发(五):如何使用Keycloak进行Django身份验证(中)
  • Mockoon+LigntProxy 让测试更简单
热门标签查看全部
Django Cypress Mock Selenium Groovy 爬虫 Linux JMeter Python BUG Java
关于 标签 友链
© 2020 片言 · 京ICP备2020038583号