Где результат теста на андроид?

Мне удалось получить gradle cC для работы. Мой тест только распечатывает и записывает одну строку текста.

grep -r text * fails.

где system.out и logging вывод?

спасибо

edit: я нашел результат для модульных тестов (это в... /app/build/test -results/). но до сих пор не повезло с другим.

Есть ли способ сохранить выход из инструментальных тестов каким-то образом?

Ответ 1

Запуск gradlew connectedCheck приведет к генерации результатов теста в каталоге сборки, см.

\build\reports\androidTests\connected\
  and
\build\outputs\androidTest-results\connected\

Эти контрольно-измерительные тесты также будут записывать свой результат в LogCat вместе с любыми операторами Log.d. Использование System.out.print в ваших тестовых случаях приведет к следующему выводу:

01-27 18: 05: 30.445 32664-32677/your.packagename I/System.out: тестовый выход

Если вам нужно также сохранить вывод, вы, вероятно, могли бы написать задачу gradle, выполняющую adb logcat, и вытащить журналы с устройства.

Ответ 2

Генерация отчета для контрольно-измерительных случаев для некоторых тестов " TestExecutionOrder " и проекта " com.example "

adb shell am instrument -w -r -e log true -e class 
'com.example.TestExecutionOrder' 
com.example.test/android.support.test.runner.AndroidJUnitRunner > 
/home/user/Downloads/raw-tests.txt

Это создает файл необработанных тестов, который содержит примеры успешных и неудачных тестов. Успешные тестовые случаи не имеют поля стека, но неудачные тестовые случаи имеют.

Разбор этого текстового файла с использованием простого анализатора Java.

import java.io.*;

public class ReportScript {
    public static void main(String[] args) {
    File file = new File("/home/user/Downloads/raw-tests.txt");
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
        byte[] data = new byte[(int) file.length()];
        fis.read(data);
        fis.close();

        String inputStream = new String(data, "UTF-8");
        String[] tests = inputStream.split("INSTRUMENTATION_RESULT: ");
        String[] testCases = tests[0].split("NSTRUMENTATION_STATUS_CODE: -2|INSTRUMENTATION_STATUS_CODE: -1|INSTRUMENTATION_STATUS_CODE: 0|INSTRUMENTATION_STATUS_CODE: 1|INSTRUMENTATION_STATUS_CODE: 2");
        //Don't take last one since blank string
        String cases="";
        int failed = 0;
        for(int i = 1 ; i < testCases.length-1 ; i+=2){
            String[] result = testCases[i].split("INSTRUMENTATION_STATUS: ");
            String test  = " ", classname  = " ", time = " " , stack = " ";
            if(result.length == 7){
                for(int j =1 ; j<=6 ; j++){
                    String[] map = result[j].split("=");
                    String key  = map[0];
                    String value = map[1];
                    if("test".equalsIgnoreCase(key)){
                        test = value;
                    }else if ("class".equalsIgnoreCase(key)){
                        classname = value;
                    }else if ("time".equalsIgnoreCase(key)){
                        time = value;
                    }
                }
                cases += makePassXml(test,classname,time);
            }else{
                for(int j =1 ; j<=6 ; j++){
                    String[] map = result[j].split("=");
                    String key  = map[0];
                    String value = map[1];
                    if("test".equalsIgnoreCase(key)){
                        test = value;
                    }else if ("class".equalsIgnoreCase(key)){
                        classname = value;
                    }else if ("time".equalsIgnoreCase(key)){
                        time = value;
                    }else if ("stack".equalsIgnoreCase(key)){
                        stack = value;
                    }
                }
                cases += makeFailXml(test,classname,stack,time);
                failed++;
            }
        }
        String xml = makeTestSuiteXml(cases,"TestExecutorOrder",(testCases.length-1)/2 + "" ,failed + "");
        FileWriter writer = new FileWriter("/home/user/Downloads/junit_report.xml");
        writer.write(xml);
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    }

    public static String makePassXml(String test, String classname, String time){
    return "<testcase name=\""+ test +"\" classname=\""+classname+"\" time=\"0.0\"/>\n";
    }

    public static String makeFailXml(String test, String classname, String stack,String time){
    return "<testcase name=\""+ test +"\" classname=\""+ classname +"\" time=\"0.0\">\n" +
            "\t\t<failure message=\"java.lang.AssertionError: test failed \" type=\"java.lang.AssertionError\">" +  stack.replaceAll("\\<","") +
            "</failure>\n" +
            "\t</testcase>\n";
    }

    public static String makeTestSuiteXml(String cases, String testSuite, String total , String failed){
    String top  = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<testsuite name=\""+testSuite+"\" tests=\""+total+"\" skipped=\"0\" failures=\""+failed+"\" errors=\"0\" timestamp=\"2019-01-08T18:36:58\" hostname=\"jenkins-android-testing\" time=\"0.000\">\n" +
            "\t<properties/>\n";

    String bottom = "<system-out>\n" +
            "\t\t<![CDATA[]]>\n" +
            "\t</system-out>\n" +
            "\t<system-err>\n" +
            "\t\t<![CDATA[]]>\n" +
            "\t</system-err>\n" +
            "</testsuite>";

    return top + cases + bottom;
    }

}

Выход :

junit_report.xml будет отчетом JUnit, который можно визуализировать с помощью плагина отчетов Jenkins Junit.