zoukankan      html  css  js  c++  java
  • scala单元测试,包括功能测试和性能测试

    十分简单的scala单元测试

    在编写性能要求高的模块的时候,单元测试是有必要的,通过搜索,我找到了一套提供单元功能测试和性能测试的可行方案,该方案简单好用,推荐给大家。

    测试工具

    首先找到适用于scala的好的测试工具是有必要的,通过搜索我找到了以下两个:

    1. scalaCheck:提供单元功能测试功能。
    2. scalaMeter:提供单元性能测试功能,测试局部代码的性能并给出报告。

    这两个工具提供scala语言的api,集成和使用起来非常简单,下面就给出代码样例提供参考,首先找到需要的依赖包

    sbt依赖:

    "org.scalacheck" %% "scalacheck" % "1.14.0"% Test,
    "com.storm-enroute" %% "scalameter" % "0.8.2" % Test
    

      

    依赖包找到后根据官网提供的代码样例,我修改后用来测试不同序列化协议的序列化性能,这里主要测试json和protostuff。

    代码样例

    import java.sql.Timestamp
    
    import org.json4s.jackson.Serialization.write
    import org.scalameter.api._
    import util.json.KafkaJsonFormat
    import util.protostuff.ProtostuffUtil
    
    case class SerialTestCase(a: String, b: Timestamp)
    
    object TestPerf extends Bench.LocalTime {
      implicit val formats: KafkaJsonFormat.type = KafkaJsonFormat // Brings in default date formats etc.
      val y = "yisen"
      val sa = Array(SerialTestCase(y, new Timestamp(System.currentTimeMillis())),
        SerialTestCase(y, new Timestamp(System.currentTimeMillis())),
        SerialTestCase(y, new Timestamp(System.currentTimeMillis())),
        SerialTestCase(y, new Timestamp(System.currentTimeMillis())),
        SerialTestCase(y, new Timestamp(System.currentTimeMillis())))
      val indexes: Gen[Int] = Gen.range("model")(0, 4, 1)
      performance of "Range" in {
        measure method "json" in {
          using(indexes) in {
            r => {
              write(sa(r))
            }
          }
        }
      }
      performance of "Range" in {
        measure method "protostuff" in {
          using(indexes) in {
            r => {
              ProtostuffUtil.serialize(sa(r))
            }
          }
        }
      }
    }
    

      

    伴生类继承了Bench.LocalTime后就成为了可运行的scala类,直接运行,运行好后控制台会输出测试报告。

    测试报告

    ::Benchmark Range.json::
    cores: 4
    hostname: ***
    name: Java HotSpot(TM) 64-Bit Server VM
    osArch: amd64
    osName: Windows 7
    vendor: Oracle Corporation
    version: 25.121-b13
    Parameters(model -> 0): 0.081482
    Parameters(model -> 1): 0.073783
    Parameters(model -> 2): 0.069933
    Parameters(model -> 3): 0.070254
    Parameters(model -> 4): 0.065122
    
    ::Benchmark Range.protostuff::
    cores: 4
    hostname: ***
    name: Java HotSpot(TM) 64-Bit Server VM
    osArch: amd64
    osName: Windows 7
    vendor: Oracle Corporation
    version: 25.121-b13
    Parameters(model -> 0): 0.00385
    Parameters(model -> 1): 0.003528
    Parameters(model -> 2): 0.003529
    Parameters(model -> 3): 0.003528
    Parameters(model -> 4): 0.003528
    

      

    报告给出了机器cpu核心数量,操作系统信息,局部代码运行时间。

    通过对比发现protostuff比json的速度快20-30倍。

    scalameter和scalacheck提供了scala风格的api,写起来顺手,不会感觉到去调用java的api时候的别扭。如果有其他更好的工具欢迎留言。

  • 相关阅读:
    PAT Basic 1077 互评成绩计算 (20 分)
    PAT Basic 1055 集体照 (25 分)
    PAT Basic 1059 C语言竞赛 (20 分)
    PAT Basic 1072 开学寄语 (20 分)
    PAT Basic 1049 数列的片段和 (20 分)
    蓝桥杯BASIC-13 数列排序
    蓝桥杯入门——3.序列求和
    蓝桥杯入门——2.圆的面积
    蓝桥杯入门——1.Fibonacci数列
    树的总结(遍历,BST,AVL原型,堆,练习题)
  • 原文地址:https://www.cnblogs.com/yuanyifei1/p/9760241.html
Copyright © 2011-2022 走看看