scala单元测试,包括功能测试和性能测试
十分简单的scala单元测试
在编写性能要求高的模块的时候,单元测试是有必要的,通过搜索,我找到了一套提供单元功能测试和性能测试的可行方案,该方案简单好用,推荐给大家。
测试工具
首先找到适用于scala的好的测试工具是有必要的,通过搜索我找到了以下两个:
- scalaCheck:提供单元功能测试功能。
- 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时候的别扭。如果有其他更好的工具欢迎留言。
scala单元测试,包括功能测试和性能测试的更多相关文章
- Go 功能测试与性能测试
1.功能测试 calcTriangle.go // 需要被测试的函数 func calcTriangle(a, b int) int { return int(math.Sqrt(float64(a* ...
- Android-jacoco代码覆盖率:单元测试覆盖率+功能测试覆盖率
参考:https://docs.gradle.org/current/dsl/org.gradle.testing.jacoco.tasks.JacocoCoverageVerification.ht ...
- Python3的单元测试模块Mock与性能测试模块CProfile
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_92 我们知道写完了代码需要自己跑一跑进行测试,一个写好的程序如果连测试都没有就上到生产环境是不敢想象的,这么做的人不是太自信就是太 ...
- [Go] 单元测试/性能测试 (go test)
特征 Golang 单元测试对文件名和方法名,参数都有很严格的要求.例如: 1.文件名必须以 _test.go 结尾 2.方法名必须是 Test 开头 3.方法参数必须是 t *testing.T 或 ...
- Web应用程序整体测试基础——单元测试
近年来,随着基于B/S结构的大型应用越来越多,Web应用程序测试问题也在逐步完善中.但Web应用程序测试既可以在系统开发中实施,也可以独立于系统单独完成,这取决于Web应用程序的复杂性和多样性.同时程 ...
- 《精通移动app测试实战:技术、工具和案例》新书上市
本书是测试专家.性能测试专家.专业畅销书作者--于涌,多年实战经验的总结,涵盖主流的测试工具,包括众多的测试实例,涵盖单元测试.功能测试.性能测试.UI测试.手游测试.自动化测试.测试用例管理.持续集 ...
- 我们需要专职的QA吗?
[ 引用评论里的一句话:hurt but true 抛开作者某些偏激的想法外,作者暴露出来的问题还是需要测试思考的: 1.TestCase,TestData,TestConfiguration 没有 ...
- Android(Java)利用findbugs进行代码静态检查
主要介绍利用java静态代码检查工具findbugs进行代码检查,包括其作用.安装.使用.高级功能(远程review和bug同步). 虽然Android提供了Test Project工程以及instr ...
- 【Android 应用开发】GitHub 优秀的 Android 开源项目
原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...
随机推荐
- Eclipse 工程使用相对路径导入Jar包设置
环境:MyEclipse 6.5 问题:MyEclipse 工程使用相对路径导入Jar包 我们在导入工程时,往往添加Jar都是使用的绝对路径,但这带来了一个问题,不同的用户使用工程都得重新配置Buil ...
- NTP时间服务器搭建
系统时区设置::: 查看当前时区# date -R修改系统时区# timeconfig 或# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtim ...
- 【342】Linear Regression by Python
Reference: 用scikit-learn和pandas学习线性回归 首先获取数据存储在 pandas.DataFrame 中,获取途径(CSV 文件.Numpy 创建) 将数据分成 X 和 y ...
- 移去OleContainer的黑边框
//禁止双击打开word编辑 olecontainer1.AutoActivate := aaManual; //禁止右键菜单 olecontainer1.AutoVerbMenu := False; ...
- bat cmd dos 通过拖拽参数 上传 截取拖拽上传文件名
echo off setlocal enabledelayedexpansion :: L 小写 for /l %%i in (1,1,10000) do ( :con set /p a= selec ...
- 部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930;
描述:部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930: 原因:所有物料规划PR时对舍入值的先后考虑逻辑影响到回写出来的temp ...
- 每月IT摘录201805
摘录自互联网的前辈心得: 一.技术:0.精通一个淘汰的技术对你没有任何价值.学习的精力有限,更应该花在值得学的技术上.比如网络.操作系统.数据结构.算法1.工作要有定力,更多的应该是关心问题如何更有效 ...
- valgrind: failed to start tool 'memcheck' for platform 'amd64-linux': No such file or directory
这是没有配置lib环境变量的缘故. 注意要把lib配置放到path配置前面. 导出VALGRIND_LIB路径,用法如下(假设valgrind已经被安装到/home/test/valgrind目录): ...
- 清明梦超能力者黄YY(idx数组)
清明梦超能力者黄YY https://www.nowcoder.com/acm/contest/206/I 题目描述 黄YY是一个清明梦超能力者,同时也是一个记忆大师.他能够轻松控制自己在梦中的一切, ...
- IO模型与select,poll,epoll
五种:阻塞,非阻塞,IO复印,信号驱动,异步. select,poll,epoll select: 典型用32个32位的整数表示1024个描述符,并发的局限. poll:功能同上,但数据结构不一样(链 ...