序
2018年,我开始专职做接口测试,当时对于使用的工具和框架有着几种不同的选择:1. Postman;2.JMeter;3.SoapUI;4.编程语言。在学习前两个选项的基本使用,了解了企业落地方案之后,我不禁问自己一个问题:有没有哪种技术路径可以一直贯穿整个测试初、中、高级测试职业生涯的?因为在这之前我一直都在用做UI自动化相关工作,使用的框架是UiAutomator、Selenium和Appium,转到接口测试又要学习新工具以及相关技能。这让我对职业的未来产生迷茫。
后来我终于想明白,编程语言就是我所苦苦寻找的银弹。我选择了Java和HttpClient,这期间也走了一些弯路,大概半年左右时间,工作终于走上正轨,编程语言的效用也开始逐渐超越工具。然后我接触了性能测试,又面临Java和JMeter二选一的问题,有了前面接口测试中打下坚实的Java基础,我很快就成功将JMeter核心的线程池、task管理部分代码抄了一遍。通过对代码的简化,结合业务需求,使用Java进行了第一次性能测试。至今我依然记得那是个直播间发言场景,最终达到了发送1万TPS、接收100万TPS的场景需求。这次经历极大鼓励了我,也验证了编程为先这一思路的有效性。
到现在,我从事性能测试已有4年时光,这期间我着重锻炼了自己的“抄”能力。从刚开始JMeter开始,到ngrinder,又到goreplay,再通过自我探索,自研了动态TPS压测框架。一开始直接复制JMeter代码,慢慢开始看更多源码;当我一点点理解“架构”这个词汇,继续抄了ngrinder的脚本化设计方案;紧接着抄了goreplay的QPS模型的并发设计,终于给漫长的抄一抄之路画上句号。有了这些积累,很自然发现若是能在测试过程当中,随时修改QPS/TPS岂不是有事半功倍的效果?从设想到实现,大概用了半个月时间,取得效果也是显而易见的,成为工作的一大亮点。
性能测试的特点是越深入越专业,就是说越深入的性能测试,越需要对测试场景的精细化模拟,伴随而来的就是对测试用例灵活性的要求。而这些恰恰是工具所欠缺的,即使强如JMeter,也需要JMeter API和脚本引擎来解决这些问题。那为什么我们不直接一步到位,从Java开始进行性能测试呢?
要想用Java进行性能测试,除了Java基础以外,其他所有的内容基本都包含在package java.util.concurrent里面。仅就测试而言,掌握其中的1/4到1/3就足以解决遇到的绝大部分问题。接下来就是在性能测试工作中实战,磨练自己的掌握程度,最终实现举一反三、灵活运用这些Java类进行各种性能测试。
Java本身是一门编译型语言,在进行性能测试过程中,难以针对性能场景的不断变化而及时修改用例。这一点不足可以通过基于JVM的脚本语言弥补,我选择了Groovy语言,原因是Groovy与Java的语法兼容性非常高,甚至把后缀“.java”直接改成“.groovy”直接就可以运行。这样的好处就是切换成本非常低,可以在日常工作中慢慢学习Groovy这门语言的优秀之处。
总结起来,这些年在Java的技术路线上,一直在努力前行,积跬步而致千里,也算取得一些成果。中途多次想过改换门庭,选择其他工具路线,最终还是坚持下来,熬过黑暗的前期,迎来黎明的曙光。我觉得有两点经验非常值得借鉴:实践出真知和实事求是。
特点
这是一本从从理论到代码、从知识到实战、从基础到进阶的书。总结起来有以下特点:
(1)重代码。本书第一部分(第1~3章)以Java为基础,围绕多线程编程主题,对于Java并发、线程池、线程同步等内容加以讲解。对于Java技术栈的测试工程师来说,可以无缝接入Java基础,通过学习掌握多线程编程基础,进而掌握使用Java进行性能测试的基础和性能测试框架设计能力。本书不会大谈特谈性能测试理论,而是以代码为核心,向读者娓娓道来,展示Java代码视角下的性能测试。
(2)重实战。在掌握Java多线程的基础上,本书第二部分(第4~9章)内容着力将性能测试最常用的测试对象、通信协议进行挨个讲解,并与性能测试框架结合,最后在模拟的测试场景中应用。以实际性能测试需求,来实战第一部分学到的Java多线程基础,练习学到的技能,以实现融会贯通。
(3)重拓展。掌握前两部分Java技能之后,自然就可以应对性能测试工作里面绝大部分的使用场景,基本做到“兵来将挡,水来土掩”,在性能测试领域遨游。但这还不是终点,针对Java性能测试拓展,本书第10章还将分享高性能池化框架和Java微基准测试框架JMH,更好地应对其他高性能场景需要,提升测试工程师技术视角,在更广阔的天地探索自己的职业上限。
建议
对于初学者来说,我有以下3点建议:
坚持写代码。在学习Java和相关测试框架的话,一定要坚持不断练习代码。就我自身经验,学习完某个知识点之后,1周不写代码,就会感觉到陌生;1个月不写代码,重新再看就会觉得吃力;3个月不写代码,基本相当于没有学习。我想说写代码是将知识和技能内化成自己的能力必不可少的路径。 坚持学习不放弃。对于初学者来讲,学习一门新语言会比较吃力,特别是没有其他编程语言的情况下。这时候就需要通过个人意志力克服畏难情绪,保证Java学习能够迈过初学者门槛。可以休息但是不能放弃,我经常那这句话自勉,在此也送给大家。 加强交流。如果你能把学到的技能在当前工作中应用,那么恭喜你,这样可以经常跟对接的研发沟通技术的细节;如果不能,也不用沮丧,互联网找到很多乐于助人的技术爱好者。我在Java学习中,大约一半的知识都是跟同事学的,通常他们会提供跟书本上不同的视角,多多交流也能拓展知识范围。
书的名字:从 Java 开始做性能测试 。
如果本书内容对你有所帮助,希望各位多多赞赏,让我可以贴补家用。赞赏两位数可以提前阅读未公开章节。我也会尝试制作本书的视频教程,包括必要的答疑。
FunTester 原创精华