【问题标题】:Cucumber reports are getting generated but deleted when the app is uninstalled after the test测试后卸载应用程序时生成黄瓜报告但删除
【发布时间】:2019-08-11 19:31:54
【问题描述】:

我正在 Android 中运行黄瓜测试并尝试将报告存储在外部目录中,该目录似乎是 /storage/emulated/0/Android/data/<package-name>/files

在测试执行期间,我可以看到生成的报告。但是当应用程序被卸载时,报告会被删除。我正在使用以下 Gradle 任务来复制不起作用的报告。

gradle.taskGraph.afterTask { task, state ->
    if ((task == connectedAndroidTest) || (task == connectedCheck)) {
    enter code here    def reportDir = new File(project.buildDir, "cucumber-reports")
        if (!reportDir.exists()) {
            reportDir.mkdirs()
        }
        println 'Retrieving Cucumber test report to ' + project.buildDir
        def processBuilder = new ProcessBuilder(
                ['adb', 'pull', '/storage/emulated/0/Android/data/<package-name>/files/reports/', reportDir.getAbsolutePath()])
        processBuilder.start()
    }
}

谁能帮我在报告被删除之前将它们复制到桌面上。

我已尝试将报告存储在其他几个位置,例如 /sdcard/mnt/sdcard/storage/emulated/0。我对这些都没有运气。我得到 IOException。我似乎没有权限写入这些位置。

【问题讨论】:

    标签: android reporting bdd cucumber-jvm


    【解决方案1】:

    因为数据是应用数据,所有应用数据都会在应用卸载过程中被删除。您需要在本地存储中写入的权限。

    private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 123;
    
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 
        {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
        } 
        else 
        {
            // You have permissions
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) 
    {
       if((requestCode == PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE) && (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)) 
        {
            // You have permissions
        }
    }
    

    您必须将权限请求添加到您的AndroidManifest.xml

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    如果你有权限,你可以写内部存储。

    File file = new File(<SomePath>, <SomeName>);
    try (FileOutputStream fos = new FileOutputStream(file)) 
    {
        // Save data
    } 
    catch (IOException e) 
    {
        // Error
    }
    

    【讨论】:

    • 感谢@kampi 的回复。但这是测试自动化,我正在使用黄瓜。而且我真的没有尝试在设备上存储某些内容的活动,在这种情况下,上面的代码是有意义的。我如何在测试自动化中使用它。
    猜你喜欢
    • 2021-04-17
    • 2022-01-27
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多