您可以在ScalaTest中多次运行测试套件吗?

时间:2020-04-06 18:05:20

标签: scala scalatest

我在Spark ETL过程中有很多步骤,并且创建了套件来测试每个步骤的功能,并且步骤的输出是下一步的输入。

但是,我想创建一个运行两次ETL过程的测试,例如:

原始数据>> ETL_Step_1 >> ETL_Step_2 >> ETL_Step_3 >>增量数据>> ETL_Step_1 >> ETL_Step_2 >> ETL_Step_3

我从Reporter中收到一个错误,因为它无法运行与之前运行的套件同名的套件(例如,我无法两次运行名为ETL_Step_1的套件)。如果重复套件并重命名重复项以执行以下操作,问题就消失了:

原始数据>> ETL_Step_1 >> ETL_Step_2 >> ETL_Step_3 >>增量数据>> ETL_Step_1_2 >> ETL_Step_2_2 >> ETL_Step_3_2

有没有更好的方法来运行我的测试而不重复和重命名测试套件?

1 个答案:

答案 0 :(得分:0)

您可以将所有ETL步骤放入“定义”(集合)中并运行

ifelse

另一个选项可能是scalatest中的import org.scalatest.FunSpec import com.github.mrpowers.spark.fast.tests.DataFrameComparer import com.github.mrpowers.spark.daria.sql.SparkSessionExt._ import org.apache.spark.sql.types.{IntegerType, StringType} describe("etl collection") { it("can run etls that are organized in a map") { val sourceDF = spark.createDF( List( ("bob", 14), ("liz", 20) ), List( ("name", StringType, true), ("age", IntegerType, true) ) ) val etlDefinition = new EtlDefinition( name = "example", sourceDF = sourceDF, // etl step 1 transform = someTransform(), // etl step 2 write = someWriter(), // etl step 3 hidden = false ) val etls = scala.collection.mutable.Map[String, EtlDefinition]("example" -> etlDefinition) etls += ("ex2" -> etlDefinition) etls("example").process() } } 。最终的一个小例子:

eventually

您可以调用某些方法来代替Post。

您可以在此处herescalatest

更新:

 Post("/something", body) ~> routes ~> check {
      response should be a pendingResponse

      eventually {
        Post("/something", body) ~> routes ~> check {
          response should be a expectedResponse
        }
      }
    }

您可以根据需要将其嵌套

相关问题