因缘巧合下有了个研究测试Java系统的机会,花了一天空闲时间完成,记录下学习心得。

测试一个系统的几个维度

  1. 系统业务流程及功能
  2. 单元测试
    1. 测试用例设计;
    2. 测试类设计及运行(Junit)
    3. 覆盖率测试(Devpartner);
    4. 边界测试(Devpartner);
    5. 行代码运行效能测试(Devpartner)。
  3. 系统功能测试(QTP)
  4. 系统性能测试(LoadRunner)
  5. 实验截图及结果分析

关于JUnit

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。来自百度百科

目前最新的版本是JUnit 5,IDEA 2018里支持的是JUnit 3和JUnit 4. 我用的是4. 配置方法见《IDEA Junit4配置》,IDE可以很方便地生成一个类的测试类,然后就可以写单元测试用例了。

关于断言

  • JUnit为我们提供了一些辅助函数,他们用来帮助我们确定被测试的方法是否按照预期的效果正常工作,通常,把这些辅助函数称为断言。
  • 即:断言是代码帮我们判断是否符合预期,比如你有10000个功能,写了10000个junit测试函数,如果是人工测得执行10000遍并检查函数运行情况,而用junit的断言则会帮你判断哪些功能正常符合预期,节省工作量。简单讲就是一个判断语句。
  • 参考文章《JUnit的各种断言》

遇到的问题

  • 对于Java程序中,需要用户输入指令的函数,在JUnit里如何实现?
    1. 一开始用重定向数据流的方法,见《Java语言Junit单元测试断言控制台输出与模拟控制台输入》,但是这样试了之后并不能实现想要的效果--在程序运行后,模拟人类输入指令。
      计算机的输出是一个流,一般情况下是输出到标准输出流,即我们显示器看到的地方,这里为了断言该函数的输出是否满足预期,要把这个函数的输出放到另一个地方—一个变量里(而不是在屏幕上),这样才可以判断该变量里是否含有我们预期的文字,以此来判断函数是否正常运行。
    2. 和朋友交流,得到的解决方法是:修改函数。把需要用户输入的参数,提取为函数的接收参数中。
    3. 应该可以有更优雅的自动化方法,以后有空要深入了解。

关于DevPartner/QTP/LoadRunner

  • DevPartner是一款自動化軟體測試工具,可在第一時間確保您使用的程式碼正確與否,讓您快速解決問題。简单来说,这是一款功能强大、付费的测试工具,有C++\Java等各种版本,可以测试代码中的覆盖率、行效能,以及自定义边界测试。因为需要付费,且学习成本太大,就没深入研究。注册后可以用评估版,学习手册链接
    1. 代码覆盖率、边界、行代码效能测试产品
    2. 用IDEA自带的Debug with coverage测试了代码覆盖率
    3. 自己设计测试用例,手动测试边界
    4. 写时间戳代码,测试行代码运行时间(但是cpu占用之类的没测试到,理论上来说结合JProfiler是可以实现的)
  • QTP是Quick Test Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试哪些功能、操作步骤、输入数据和期望的输出数据等。
    1. 按照介绍,前面提到的JUnit测试系统功能的问题,可以用QTP解决。
    2. 惠普HP的产品
    3. 功能测试产品
    4. 因为要测试的功能少,且未来不需要重复,因此手动测试了
  • LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。
    1. 性能测试产品
    2. 使用JProfiler代替

适合Java用的系统性能测试工具JProfiler

本应该用LoadRunner,但因为学习成本太高,且要注册付费等很麻烦,遂改为JProfiler,JProfiler是一款有着友好交互、简洁易懂的UI的、可以让你观察程序运行性能、内存泄漏和线程相关等目的产品。
1. 结合IDEA详见《Intellij IDEA集成JProfiler性能分析神器》
2. 评估试用时长15天
3. 强烈推荐!!!

GC活动

  • GC活动指JVM的内存垃圾回收机制的活动,比如回收一些创建的无用的实例,以减少内存等资源占用。该时间点的GC活动为0,说明还未达到回收内存垃圾的条件(实例少/电脑内存多/运行时间不长等原因)

结尾

虽然表面上看,这次研究物质上基本没回报,但研究技术的过程是快乐的,精神上的愉悦千金难买。