运行Apache Hadoop的单元测试
我整理了关于运行单元测试的选项。这是针对开发人员的。
普通地转动
$ mvn test -Pnative -Pshelltest
-Pnative: ネイティブライブラリをビルドし、それが必要なテストを実行する
-Pshelltest: シェルスクリプトのテストを実行する
当我们执行这个命令时,它会在所有的模块中运行测试,但是当测试失败的模块时,会停止运行,无法在所有模块中运行测试。在Apache Hadoop中,有一些偶尔会失败的测试,因为它们还没有完全修复,所以通常会在hadoop-hdfs模块中失败,之后的测试就不会执行。虽然可以进入每个模块的根目录进行测试,但因为模块很多,稍微有些麻烦。
用全模块进行测试。
我认为使用一个叫做qbt(质量构建工具)的工具可以方便地在整个模块上运行测试。这个工具在一个叫Apache Yetus的项目中被开发,并且已经包括在Apache Hadoop社区的每日构建中。
https://builds.apache.org/job/hadoop-qbt-trunk-java8-linux-x86/
この結果が毎日common-dev@hadoop.apache.orgに流れてくるので、そのメールを辿ることで、あるテストがいつから失敗しているのかがわかります
git bisectする際のヒントとして有用ですし、場合によってはわざわざgit bisectしなくても一発で原因がわかることもあります
また、時々失敗するテストを特定したい場合には、dev-support/determine-flaky-tests-hadoop.pyが有用です
当执行以下命令时,可以在本地进行测试。
$ dev-support/bin/qbt <path to the patch> --run-tests
如果核心数量充足的话,建议加上”–test-parallel=true”选项。
BINDIR=$(cd -P -- "$(dirname -- "${BASH_SOURCE-0}")" >/dev/null && pwd -P)
exec "${BINDIR}/yetus-wrapper" qbt --project=hadoop --skip-dir=dev-support "$@"
Apache Hadoop的dev-support/bin/qbt实际上只有这一个。在内部,yetus-wrapper会下载Apache Yetus,并执行其中的qbt。
由于Checkstyle等工具可以一起运行,作为开发人员来说非常方便。我已经将在本地运行时的执行日志粘贴到了gist上,可以试试看。
- https://gist.github.com/aajisaka/348cd569b49af98c76248bd1627608d8
关于运行所有模块的测试的必要性
在Apache Hadoop的Jenkins precommit job(提交补丁后自动运行的作业)中,仅执行已更改模块中包含的测试。通常情况下,这非常有用,可以通过跳过不必要的测试来节省作业时间。但是,如果某个模块的更改会影响其他模块,就会遇到无法执行所需测试的问题。例如,通过HADOOP-13514升级了maven-surefire-plugin的版本,导致大量单元测试失败。此外,经常会看到YARN的更改导致MapReduce的单元测试失败。因此,在提交可能影响其他模块的补丁之前,有必要预先执行所有的测试。
请注意,关于下面的内容
这些选项在此之后,我从未真正尝试过,所以解释也很少。
更快地进行测试
让我们使用dist_test。
-
- https://github.com/cloudera/dist_test
- https://blog.cloudera.com/blog/2016/05/quality-assurance-at-cloudera-distributed-unit-testing/
使用该工具可以大量启动GCE和EC2实例,并一次性运行测试。Apache Hadoop的测试共有1700多个,要全部运行需要超过8个小时。即使使用8个核心并行处理,简单计算也需要超过1个小时,但使用该工具可以在10分钟内完成。
运行S3客户端的测试
当然的,S3测试不会在默认情况下被执行。请阅读以下文档以了解如何进行设置。(投桃)
- https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html
关于Azure Storage和OpenStack Swift客户端的测试也是一样的。
-
- Azure Storage: https://hadoop.apache.org/docs/stable/hadoop-azure/index.html#Testing_the_hadoop-azure_Module
OpenStack Swift: https://hadoop.apache.org/docs/stable/hadoop-openstack/index.html#Testing_the_hadoop-openstack_module