AWS Device Farm. Как я могу сохранить пользовательский отчет, сгенерированный после контрольного примера, в моем локальном пространстве? - PullRequest
0 голосов
/ 18 мая 2018

Я работаю с фермой устройств AWS. Мой тестовый скрипт при запуске на моей локальной системе работает должным образом и создает отчет в моей локальной системе по указанному пути. Теперь, когда я запускаю код в ферме устройств, отчет не получаетГенерирование. Я что-то пропустил?

Это мой тестовый код для записи тестовых случаев в HTML-отчет.

package testOutput;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import net.dongliu.apk.parser.ApkFile;
import net.dongliu.apk.parser.bean.ApkMeta;
import report.TestReportSteps;

public class TestResultHtml {
    public static void WriteResultToHtml(List<TestReportSteps> items, String getCurrentDateTime, String getCurrentTime) {
        try {String filePath="C:\\\\Appium\\\\app-qc-debug.apk";
     ApkFile apkFile = new ApkFile(new File(filePath));
        ApkMeta apkMeta = apkFile.getApkMeta();

        String Version=apkMeta.getVersionName();
            DateFormat df = new SimpleDateFormat("dd/MM/yy, HH:mm:ss");
            Date dateobj = new Date();
            String currentDateTime = df.format(dateobj);

            StringBuilder color = new StringBuilder();
            StringBuilder status = new StringBuilder();
            // define a HTML String Builder
            StringBuilder actualResult = new StringBuilder();
            StringBuilder htmlStringBuilder = new StringBuilder();
            // append html header and title
            htmlStringBuilder.append(
                    "<html><head><link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css\" integrity=\"sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm\" crossorigin=\"anonymous\">\r\n"
                            + "<script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js\" integrity=\"sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl\" crossorigin=\"anonymous\"></script><title>Appium Test </title></head>");
            // append body
            htmlStringBuilder.append("<body>");
            // append table
            //if (count == 0) 
            {
                htmlStringBuilder.append("<table class=\"table table-striped table-bordered\">");
                htmlStringBuilder.append("<tr><th style=\"background-color:#a6a6a6\">Date Time</th><td>"
                        + currentDateTime
                        + "</td><th style=\"background-color:#a6a6a6\">Environment Tested</th><td>QC</td></tr>"
                        + "<tr><th style=\"background-color:#a6a6a6\">OS</th><td>Android</td><th style=\"background-color:#a6a6a6\">Application</th><td>app-qc-debug.apk</td></tr>"
                        + "<tr><th style=\"background-color:#a6a6a6\">Script Name</th><td colspan=\""
                        + 3
                        + "\">Cityvan Workflow</td>"
                        + "<th style=\"background-color:#a6a6a6\">Build Version</th><td>"+Version+"</td></tr><tr><th style=\"background-color:#a6a6a6\">Objective</th><td colspan=\""
                        + 3 + "\">To verify that cityvan app is working as expected</td><tr><tr></table>");
            }
            // append row
            htmlStringBuilder.append("<table class=\"table table-striped\">");
            htmlStringBuilder.append(
                    "<thead style=\"background-color:#007acc\"><tr><th><b>TestObjective</b></th><th><b>StepName</b></th><th><b>StepDescription</b></th><th><b>ExpectedResult</b></th><th><b>ActualResult</b></th><th><b>Status</b></th><th><b>Screenshot</b></th></tr></thead><tbody>");
            // append row
            for (TestReportSteps a : items) {

                if (!a.getActualResultFail().isEmpty()) {
                    status.append("Fail");
                    color.append("red");
                    actualResult.append(a.getActualResultFail());
                } else {
                    status.append("Pass");
                    color.append("green");
                    actualResult.append(a.getActualResultPass());
                }
                if (a.getScreenshotPath()!=null) 
                {
                    htmlStringBuilder.append("<tr><td>" + a.getTestObjective() + "</td><td>" + a.getStepName()
                            + "</td><td>" + a.getStepDescription() + "</td><td>" + a.getExpectedResult() + "</td><td>"
                            + actualResult + "</td><td style=\"color:" + color + ";font-weight:bolder;\">" + status
                            + "</td><td><a href=\"" + a.getScreenshotPath() + "\">Click here</a></td></tr>");
                }
                else 
                {
                    htmlStringBuilder.append("<tr><td style=\"font-weight:bold\">" + a.getTestObjective() + "</td><td>"
                            + a.getStepName() + "</td><td>" + a.getStepDescription() + "</td><td>"
                            + a.getExpectedResult() + "</td><td>" + actualResult + "</td><td style=\"color:" + color
                            + ";font-weight:bolder;\">" + status + "</td><td></td></tr>");
                }
                actualResult.delete(0, actualResult.length());
                color.delete(0, color.length());
                status.delete(0, status.length());
            }
            // close html file
            htmlStringBuilder.append("</tbody></table></body></html>");

            // write html string content to a file
            String htmlFilepath = "";

            htmlFilepath = "D:\\FinalAppiumWorkspace\\AppiumMavenProject2\\src\\test\\java\\testOutput\\HtmlReport\\" + getCurrentDateTime + "\\testfile"
                    + getCurrentTime + "\\testfile.html";

            WriteToFile(htmlStringBuilder.toString(), htmlFilepath);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void WriteToFile(String fileContent, String fileName) throws IOException, FileNotFoundException {

        File file = new File(fileName);
        file.getParentFile().mkdirs();

        PrintWriter out = null;
        if (file.exists() && !file.isDirectory()) 
        {
            out = new PrintWriter(new FileOutputStream(new File(fileName), true));
            out.append(fileContent);
            out.close();
        } else 
        {
            // write to file with OutputStreamWriter
            OutputStream outputStream = new FileOutputStream(file.getAbsoluteFile(), false);
            Writer writer = new OutputStreamWriter(outputStream);
            writer.write(fileContent);
            writer.close();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Для пользователей, которые получают исключение java.io.FileNotFoundException:(Permission denied) при попытке сохранить журналы испытаний / отчеты в $WORKING_DIRECTORY или любом другом пути.Вы можете использовать $DEVICEFARM_LOG_DIR для сохранения своих артефактов, это работает для меня.

String artifactsDir = System.getenv("DEVICEFARM_LOG_DIR");

Используйте этот каталог для хранения любых артефактов.

0 голосов
/ 19 мая 2018

Путь, на который ссылается код, не существует на хосте устройства для фермы.Хост устройства для тестов Android - это компьютер с Linux, и, по моему опыту, у нас есть доступ к каталогу tmp.Это возможно благодаря использованию пользовательских артефактов в Device Farm и каталоге tmp.Попробуйте изменить путь к html-файлу:

htmlFilepath = "/tmp/reports/testfile.html";

Затем, используя веб-консоль, явно пометьте этот каталог для экспорта.

specify device state page

Как только яички закончатся, вы должны увидеть ссылку для customer artifacts.

enter image description here

Кроме того, вас могут заинтересовать другие варианты отчетов об испытаниях, например

вместо того, чтобы писать свои собственные с нуля.

HTH

-James

...