为运行spark的python文件获取覆盖率xml

pobjuy32  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(290)

我有一个python文件( myfile.py )我通常通过运行以下命令来运行

spark2-submit --master yarn --deploy-mode client myfile.py arg1 arg2

我需要得到这个文件的报道,我一直在尝试

coverage run myfile.py arg1 arg2
coverage xml -o coverage-myfile.xml

这可以很好地工作,并为我提供了覆盖率xml,但是行不能正常工作,因为它需要使用 spark-submit ,不简单 python . 因此,我的保险范围比我想要的要低一点。
除了使用spark,还有其他方法吗?

uxh89sit

uxh89sit1#

在一个测试环境中(所以它不是完全一对一的,但应该是类似的),我通过实现一个会话范围的fixture来实现这一点,该fixture构建一个 SparkSession . 比如:

@pytest.fixture(scope="session")
def spark():
    spark = (
        # In place for Spark 3.x to work.
        SparkSession.builder.config(
            "spark.driver.extraJavaOptions",
            "-Dio.netty.tryReflectionSetAccessible=true",
        )
        .config(
            "spark.executor.extraJavaOptions",
            "-Dio.netty.tryReflectionSetAccessible=true",
        )
        .appName("pytest-provider-test")
        .master("local[2]")
        .getOrCreate()
    )
    return spark

然后,对于我需要测试的所有函数(以及覆盖范围),使用 spark 固定装置。
在您的情况下,您可能需要一个特定于测试/覆盖范围的模块调用中的相关启动函数 myfile.py 用一个 SparkSession 对象,并将其传递给您的代码库。对于这些函数和任何子模块,您的覆盖范围仍然是准确的。
然后可以将其作为常规python模块运行。

相关问题