gpt4 book ai didi

unit-testing - 测试 Spark : how to create a clean environment for each test

转载 作者:可可西里 更新时间:2023-11-01 16:34:59 25 4
gpt4 key购买 nike

在测试我的 Apache Spark 应用程序时,我想进行一些集成测试。出于这个原因,我创建了一个本地 spark 应用程序(启用了配置单元支持),在其中执行测试。

如何在每次测试后清除 derby Metastore,以便下一次测试再次拥有干净的环境。

我不想做的是在每次测试后重新启动 spark 应用程序。

是否有任何最佳实践可以实现我想要的?

最佳答案

我认为为集成测试引入一些应用程序级逻辑打破了集成测试的概念。

从我的角度来看,正确的方法是为每个测试重新启动应用程序。

无论如何,我相信另一种选择是为每个测试启动/停止 SparkContext。它应该清除任何相关的东西。

更新 - 回复评论

  1. 也许可以通过删除表/文件来进行清理?
  2. 我会问更笼统的问题 - 你想用你的测试测试什么?在软件开发中定义了单元测试和集成测试。两者之间没有任何关系。如果你想做一些既不是集成也不是单元测试的事情——那你就做错了。具体来说,通过您的测试,您尝试测试已经测试过的东西。

关于单元测试和集成测试的区别和总体思路,您可以阅读here .

我建议您重新考虑您的测试,并根据您想要测试的内容进行集成或单元测试。例如:

  1. 测试应用程序逻辑 - 单元测试
  2. 测试您的应用程序是否在环境中工作 - 集成测试。但是在这里你不应该测试 Hive 中存储的内容。只是存储的事实发生了,因为存储的东西要通过单元测试来测试。

所以。 结论:

我相信您需要集成测试来实现您的目标。最好的方法是为每个集成测试重新启动您的应用程序。因为:

  1. 在现实生活中,您的应用程序将启动和停止
  2. 除了您的 Spark 内容之外,您还需要确保代码中的所有对象都已正确删除/重新使用。单例、持久对象、配置.. - 所有这些都可能会干扰您的测试
  3. 最后,将执行集成测试的代码 - 在哪里保证它不会在某个时候破坏生产逻辑?

关于unit-testing - 测试 Spark : how to create a clean environment for each test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57140234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com