最近喜欢上阅读源码来佐证之前的学到的知识,之前读完了Caffeine源码了解到了Caffeine在部分高并发场景可能存在瓶颈的3个点之后。今天又对Java-MySQL的JDBC产生兴趣。 起源于两个问题: 当一个 ResulSet 被执行方法返回,如果不使用 close() 方法,会怎么样? Statement支持不支持并发调用? ResulSet资源释放 在 close() 方法注释中,我们
今天在写脚本的时候发现一个奇怪的错误。经过猜想验证,发现原来Groovy过于灵活了,算是重复踩了之前的坑。Groovy特性描述如下: 当Groovy脚本调用getFun()和setFun()方法时,会默认给这个类有一个FunTester的属性。反过来,如果这个类有Fun这个属性,那么get和set方法是不用显式写出来的。 本来这是个好事情,一方面其实可以免去多余代码,一方面更容易收拢入口方法(因为
在进行WebSocket协议连接或者WebSocket接口测试的时候,一旦遇到超大连接数量的场景中时,之前使用过的实现 Java-WebSocket 以及 Netty-WebSocket 两种实现就会显示出巨大的性能差距。当然 Netty-WebSocket 就是为了解决性能问题而来的。 so,今天我就来展示一下两个 WebSocket 实现在使用中具体的差异,本文集中在资源占用上,特别是线程占用
之前写了文章介绍Groovy关键字as,我个人是十分推荐使用,特别在基础类型数据转换场景下,as关键字能够随心所欲将数据转换成我们需要的类型。但在实际使用过程中,由于没看到具体实现,也难以对as关键字的性能有个了解。所以今天准备测试几种我经常使用的场景进行as关键字的性能测试。 这次我准备使用Java微基准测试神器JMH初探来进行基准测试,自从用上了JMH,就再也没有自己写过基准测试用例了。十分推
当一个软件测试工程师刚刚进入行业一到三年的时间,他们通常需要掌握一些基本技能和知识,并且需要学习一些新的技术和工具,以便更好地完成自己的测试工作。以下是一些建议,帮助测试工程师在这个阶段提升自己的技能。 掌握基本的测试技能 在软件测试领域,有一些基本的技能和知识是必须掌握的。这些技能包括如何编写测试用例、如何执行测试用例、如何记录测试结果等等。测试工程师需要在这些基本技能上建立起扎实的基础,以便更
通常情况下,为了提升服务性能,使用缓存框架是一个非常常见的选择。在Java语境下,经过我查阅,Caffeine被称作地标最强Java本地缓存框架。Caffeine是站在巨人(Guava Cache)的肩膀上,优化了算法发展而来。 在之前的性能测试框架开发中,通常用的缓存的时候都直接用java.util.concurrent.ConcurrentHashMap,但一涉及到过期策略就有点难以为继,搞不
当我们编写一段Java代码之后,如果想知道代码性能如何,就需要进行一些快速的性能测试。 当我们实现一个需求,面临2种及以上的方案,选择一种性能更好的方案时,也需要进行一些快速的性能测试。 在之前的实践中,我一开始的测试代码通常是这样的: public static void main(String[] args) { long start = System.currentT
在很早之前的文章服务端性能优化之异步查询转同步(https://mp.weixin.qq.com/s/okYP2aOPfkWj2FjZcAtQNA)介绍了一种常用到,服务端开发常用到的多个异步查询转同步的方法,本质上就是利用了java.util.concurrent.CountDownLatch的功能特性,将几个异步查询任务都设置一个java.util.concurrent.CountDownLa
测试是软件开发生命周期(SDLC)的重要组成部分。SDLC的每个阶段都应包含测试,以获得更快的反馈并提高产品质量。我们来聊聊持续测相关话题,如何从持续测试中获得更大的收益。何谓持续测试持续测试有助于在软件开发生命周期(SDLC)的所有阶段提供更快的质量反馈。在软件开发声明周期中大多数情况下,如果在核心功能逻辑越少做单元测试和自动化测试,那么测试金字塔顶层执行手动探索性测试的压力会非常大,尝尝容易出
最近在工作中协助研发进行了ES优化,效果还是非常明显的,几乎翻倍。除了通过各种业务接口测试ES性能以外,还可以直接请求ES接口,绕过服务,这样应该数据回更加准确。所以,ESClient学起来。准备工作首先,先准备了一个ES服务,这里就不多赘述了,大家自己在尝试的时候一定主意好ESServer和ESClient的版本要一致。其次,新建项目,添加依赖。学习资料搜一下,能搜到很多的ES学习资料,建议先去
我们生活在一个每天创建超过50万个网站的时代。截至今天,世界上有近400万个网站,其中只有150万个处于活动状态。剩下的呢?根据记录,90%的Web应用程序因浏览器兼容性问题而无法运行,而62%的移动应用程序卸载是由于移动崩溃引起的。这些发人深省的统计数据充分说明了跨浏览器测试对于开发功能完备的Web或移动应用程序的重要性。来自不同组织的QA和开发人员确实定期努力使跨浏览器测试达到标准,合适的策略
在软件测试领域,QA管理者和高阶的测试人员必须实施不同的测试管理方法,例如测试监控和控制,以确保测试活动按照计划顺利执行。管理人员需要这些基本的管理策略来跟踪和调整测试进度,以获得最佳的工程效能。什么是测试监控测试监控是一个测试执行过程,其中所有测试活动和工作都被评估为:跟踪当前进度,查找和跟踪可观测测试指标根据测试数据评估下一步计划向相关团队和利益相关者提供有关测试过程进度的反馈可以手动或自动收
早就听过CPU火焰图的强大功能,也听过几个火焰图工具,今天终于开始尝试使用CPU火焰图生成工具。奈何由于各种原因,Intellij自带的火焰图插件并不能用,着实让人不快。故而找到一个asyncprofiler分析工具作为替代品。当时正在测试随机数性能的,所以就用了一个动态QPS模型的Case,学习了asyncprofiler的使用。很意外地发现了一个性能可以优化的地方。经过尝试,CPU使用率降低了
在之前的文章中我分享了三种从一个数组中随机取一个值的方法,分别是:使用随机数、使用int递增,使用atomicinteger递增。其中后两者都是循序取,并非真的随机。从上次的测试结果中,随机数方案相对后两者性能差异比较大。但是当时多线程的测试都是在达到了CPU性能瓶颈的情况下测得,旧闻如下:性能测试中的随机数性能问题探索(https://mp.weixin.qq.com/s/8PvGeULtgqp
免费的开源框架和工具由于其开源特性,现在逐渐成为自动化测试的首选解决方案。区别在于,你是喜欢使用类库编写一个全新的自动化测试框架,或者喜欢使用一个现成的工具。本文帮忙你快速了解10大免费和开源测试工具、框架。KatalonStudio!KatalonStudio(https://s2.51cto.com/images/blog/202212/07220901_63909e7dac26276789.
本文介绍并分析了100道常见SQL面试题,主要分为三个模块:SQL初级查询、SQL高级查询以及数据库设计与开发。本文主要使用三个示例表:员工表(employee)、部门表(department)和职位表(job)。下面是这些示例表的结构:部门表(department),包含部门编号(dept_id)和部门名称(dept_name)字段,主键为部门编号。职位表(job),包含职位编号(job_id)
前几天分享过固定QPS异步任务功能初探(https://mp.weixin.qq.com/s/T7XGKaUOUJD49Csa1EuWg)使用了缓存线程池,利用java.util.concurrent.Semaphore实现了固定QPS的异步任务。昨天录制视频的时候,谈到第二种放弃的实现思路,就是通过将任务丢到一个队列中,然后通过一个线程从线程池取任务,丢到线程池里面执行。今天早上仔细想了想还是很
最早提到接口测试的优点时,有一个就是执行效率提升,可能是UI层面执行的N倍。但是今天我要分享的这个案例这个优点的升级版本。某个接口参数倒是不多,但是每个参数的范围略大,最大的将近500个枚举范围,小的也是20个。如果把所有参数组合穷举完,粗略估计可能10亿级别的。需求就是要把这部分所有参数组合都遍历进行测试,然后我就开始了踩坑了。初版方案一开始的想法就是多个循环嵌套,然后并发发起请求,实现起来非常
这是一篇有关GroovyShell的帖子,以及它如何在日常工作中为您提供帮助(只要您是软件开发人员)。无论您使用哪种编程语言或技术,都可以从GroovyShell中受益。唯一真正的要求是您能够编写(和阅读)小段Groovy代码。入门我认为Groovyshell的目的最好由官方文档来描述:GroovyShell,又名。groovysh是一个命令行应用程序,可轻松访问以评估Groovy表达式,定义类并
在之前文章Java自定义异步功能实践(https://mp.weixin.qq.com/s/Dw4Gtwuivid0bm61pFwEiQ)中,我仿造Go语言中的go定义了fun作为Groovy/Java异步执行的关键字。通过一个定长的线程池执行异步任务。经过一段时间的使用,效果非常好,既能满足当下的需求,在实现的过程中也锻炼了自己对线程池的理解。通常的使用场景分为:异步上报数据、大量任务需要多线程
在批量使用测试账号的时候,需要对账号进行标记,一般用username字段,之前的策略是统一的名称+用户编号(测试用户的编号,非用户id),由于需求变更,用户username不允许使用数字了,所以需要把数字转成汉字来进行标记。下面分享集中方法:privatestaticStringchange1(intn){//数字转换成汉字表示Stringc={"零","壹","贰","叁","肆","伍","陆
在很早之前我就有个想法,如果有一个服务能把我的请求放大N倍发送给服务端,那就可以更加灵活地将接口的功能测试用例和性能测试用例结合在一起。只需要设置一些参数,就可以在本地控制请求QPS,比如每秒100次,然后通过服务器放大100倍,那么请求到被测服务的QPS就是10000倍了。但是由于当时技术水平比较菜,主要考虑到:1、当时面临被测服务的QPS有限,不需要这个功能;2、为了这个需求写个用不到的服务,
随着软件需求的变化比以往任何时候都更快更频繁,越来越多的团队正在采用敏捷方法来实现更短的开发周期和更快的迭代时间。在这个瞬息万变的IT环境中,应用程序的软件质量比以往任何时候都更加重要,手动测试似乎很耗时、重复并且容易出现人为错误。从手动测试转向自动化测试的必要性非常适合快速变化的技术环境。与手动测试相比,自动化测试在很大程度上可归因于更高的测试覆盖率以及更早期发现和解决问题的灵活性。虽说如此,手
我在项目里面都是Java和Groovy混这写,之前逻辑是框架和工具类用Java,脚本用Groovy。但是随着时间推移,Groovy相对Java的优势过于明显,搞得自己把自己搞混乱了。其中遇到了一些兼容性问题,典型的就是Java的function和Groovyclosure之间的兼容性问题。Javafunction包里面很非常多实现类,其中主要区分的返回和参数个数,然后有很多具体返回和参数类型的实现
队列通常是软件设计模式中的基本组件。但是如果每秒接收到数百万条消息,改如何处理?如果多个消费者都需要能够读取所有消息,又改如何处理?难道需要把所有消息的数据都放在内存中吗?这样JVMGC又表现如何?之前我写过几个流量回放模型:基于时间戳的日志回放引擎(https://mp.weixin.qq.com/s/cdvlYc5W0sI72VTqlRtIjA)20220822千万级日志回放引擎设计稿(htt
今天分享Java对象序列化的不同方法,并对不同序列化方式的性能进行基准测试。关于持久队列来讲,必须将Java堆内存的对象转换成文件中的二进制数据,对象序列化的性能将显著影响整体的性能表现。相当多的高性能框架都会在序列化和反序列化上下功夫优化性能。本文使用了开源框架ChronicleQueue提供的能力进行序列化和反序列化对比测试。数据传输对象在本文中,我用一个对象类FunData,作为DataTr
JUnit是一个基于Java的开源框架,可帮助测试人员执行单元测试。JUnit主要用于测试应用程序的每个单元或组件,例如类和方法。它有助于编写和运行可重复的自动化测试,以确保项目代码按预期运行。还可以使用JUnit执行Selenium自动化测试用例,以测试Web应用程序或网站。在我们开始讨论Selenium中的JUnit注解之前,让我们快速回顾一下JUnit在测试人员社区中流行的原因。为什么JUn
Groovy中的Map,不仅兼容了JavaAPI提供的各种功能,还拓展了许多特殊语法和功能方便测试人员在使用的过程中提高效率,更快地构建测试脚本。下面我就从几个方面分享一下GroovyMap的神奇之处。创建Java中通常创建一个Map的常用语法Map<Integer,Integermap=newHashMap();。而在Groovy中,我们可以使用语法k:v来创建Map。相当于给Map对象初始化赋
动态接口比例性能测试实践
在互联网行业中,永无止境的讨论主题之一是:敏捷与DevOps。对于这两个概念来说,过程彼此不同;但是它们仍然有一些相似之处。敏捷敏捷方法论是一种实践,它促进整个项目的SDLC(软件开发生命周期)的开发和测试的持续迭代。在敏捷方法中,开发和测试活动是同时进行的,这涉及到SDLC过程中开发和测试的持续迭代。敏捷宣言强调的敏捷软件开发的四个核心价值是:个体和互动高于流程和工具工作的软件高于详尽的文档客户
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号