AWS Device Farm。如何将测试用例后生成的自定义报告保存到本地空间

2024-01-07

我正在使用 AWS 设备场。我的测试脚本在本地系统上运行时按预期工作,并在本地系统中的指定路径生成报告。现在,当我在设备场中运行代码时,不会生成报告。Am我错过了什么?

这是我的测试代码,用于将测试用例写入 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();
        }
    }
}


代码引用的路径在场的设备主机中不存在。用于 android 测试的设备主机是一台 Linux 机器,根据我的经验,我们可以访问tmp目录。通过使用定制工件 https://aws.amazon.com/blogs/mobile/custom-artifacts-on-aws-device-farm/Device Farm 和 tmp 目录的功能这应该是可能的。尝试将 html 文件的路径更改为:

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

然后,使用 Web 控制台明确标记要导出的目录。

睾丸完成后,您应该会看到一个链接customer artifacts.

此外,您可能对测试报告的其他选项感兴趣,例如

  • 范围报告 http://extentreports.com/
  • 倾城报道 http://allure.qatools.ru/

而不是从头开始编写自己的。

HTH

-James

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Device Farm。如何将测试用例后生成的自定义报告保存到本地空间 的相关文章

随机推荐

  • 从 NSURLConnection 的响应头中读取数据

    如何从服务器响应中发送的标头中读取数据 我正在使用 NSURLConnection 发送请求 如果 URL 是 HTTP URL 则NSURLResponse您在连接的委托中收到的 connection didReceiveResponse
  • xampp mysql 和 phpmyadmin 不起作用

    昨天我使用 xampp 并使用 apache 和 mysql 服务 今天想启动mysql服务 没成功 我尝试在论坛上搜索解决方案 但找不到任何内容 所以我问你 在 mysql 停止工作后 我在日志文件中找到此消息 2015 10 29 12
  • ASP.NET MVC 将数据从视图传递到控制器

    我有一个带有网格的视图 其中包含添加到工作站的项目 用户可以从下拉列表中选择一个项目 然后单击一个操作链接 该链接调用控制器将该项目添加到工作站 我可以通过读取控制器的 Post 操作中的 FormCollection 对象来使其工作 p
  • 如何在 AWS 负载均衡器响应中禁用 Apache HTTP 标头信息?

    我在 Apache 服务器上使用 AWS Elastic Beanstalk 部署了一个 node js 环境 我对环境运行了 PCI 扫描 但出现了 2 次失败 Apache ServerTokens 信息披露 Web服务器HTTP头信息
  • 从逗号分隔字段中选择

    说我有一个subscribers表 每个用户都有一行 如下所示 id name subscribers 1 user1 user2 user3 user4 2 user2 user4 user5 user3 3 user3 user1 us
  • Apache Spark:核心数量与执行器数量

    我试图了解在 YARN 上运行 Spark 作业时核心数量和执行器数量的关系 测试环境如下 数据节点数量 3 Data node machine spec CPU Core i7 4790 核心数 4 线程数 8 内存 32GB 8GB x
  • Firebase 功能 HTTPS 403 禁止

    我使用 Node 和 Express 构建了 Firebase HTTP 事件函数 该函数正在工作 但是当我在客户端调用该函数时 我得到403 Forbidden 第一次调用该功能时 我被要求使用 Google 帐户登录 我使用与 Fire
  • Python xml - 处理未封闭的令牌

    我正在读取数百个 XML 文件并使用 xml etree ElementTree 解析它们 快速背景 这些 XML 文件在某一时刻是完全有效的 但不知何故 在历史上处理它们时 我复制 粘贴它们的过程可能已损坏它们 事实证明 这是一个冲洗问题
  • 防止更改 String.Empty 的值

    部分是出于好奇的破坏事物的角度 部分是出于防范潜在问题的目的 想象一下通过调用以下内容 或类似的内容 但是string Empty是一个很好的例子 typeof String GetField Empty BindingFlags Publ
  • Gradle 不包括已发布的 pom.xml 中的依赖项

    我有一个 Gradle 项目 我正在使用Maven 发布者用于将我的 Android 库安装到 Maven 本地和 Maven 存储库的插件 这可行 但生成的 pom xml 不包含任何依赖项信息 是否有解决方法来包含该信息 或者我是否被迫
  • 通过从当前日期减去秒来获取日期时间

    我想从日期中减去秒 例如 假设我有 1300 秒的无符号整数 我想获取当前日期和时间 从中减去 1 300 秒 最后得到 01 13 2012 2 15 PM 格式并不重要 我确实尝试过 DateTime dt new DateTime d
  • 为什么我无法截取 MPMoviePlayerController 的屏幕截图?

    我需要捕获在 mpmovieplayer 控制器中播放的视频的屏幕截图 但我得到的只是一个红色屏幕 我用红色背景和 0 5 alpha 制作了 coverView 这是代码 NSArray windows UIApplication sha
  • 使用 Groovy(Grails) 写入文件的某些行失败(断行)

    我正在使用 Groovy 在 csv 文件中进行大量写入 更具体地说 我有一个正在运行的 Quartz 作业 它创建一些发送到 RabbitMQ 队列的 Map 消息 该队列正在被 10 个消费者使用 并导致生成一些字符串列表 对于列表中的
  • 如何解决私有字节(本机内存)泄漏?

    我正在开发一个 C 应用程序 该应用程序似乎存在泄漏 我使用过内存分析器并发现我的 私有字节继续增加但是所有堆中的字节数不 这意味着可能是本机内存泄漏 现在我陷入困境 如何找到本机代码中的内存泄漏 首先 如果您有泄漏进程的转储 您可以在 W
  • 如何在按钮单击时使用 TypeScript

    我正在尝试在我的应用程序中使用打字稿 同样 我正在做一个 POC 在 POC 中我想在单击按钮时调用 TypeScript 类中定义的函数 可以调用函数吗 如果是的话怎么办 到目前为止 我已经看到了仅在页面加载时调用函数的示例 我需要在某些
  • 如何在 django 中构建 json REST API(没有 Django REST 框架)

    Preface 我有一个 Django 项目 我已经将它连接起来 以便它为一堆模型提供一堆视图 现在我想添加一个端点 它将数据库的很大一部分转储为 json 我假设您执行此操作的方法是将 URL 添加到视图类 方法 该视图类 方法返回充满
  • Transfuse 与 Dagger 相比如何?

    我正在尝试决定是使用 Transfuse 还是 Dagger 进行 Android 依赖注入 我从未使用过 Transfuse 并且对 Dagger 有基本了解 非常感谢 首先 我是输血 http androidtransfuse org因
  • 如何按特定文件类型过滤输入类型=“文件”对话框?

    当我单击浏览器的浏览按钮时 我想将浏览器限制为 JPG 文件
  • WCF 跨域使用 Jsonp 错误未捕获 SyntaxError:意外的标记:

    我正在尝试使用 jQuery 跨域调用 Web 服务 这是我调用服务的代码 document ready function ajax type GET async false contentType application json url
  • AWS Device Farm。如何将测试用例后生成的自定义报告保存到本地空间

    我正在使用 AWS 设备场 我的测试脚本在本地系统上运行时按预期工作 并在本地系统中的指定路径生成报告 现在 当我在设备场中运行代码时 不会生成报告 Am我错过了什么 这是我的测试代码 用于将测试用例写入 html 报告 package t