如何避免范围报告以不覆盖html文件名

时间:2018-07-26 18:20:56

标签: report extentreports extent

我正在使用带有testng的appium中的扩展报告,它对我来说很好。每当我完成测试运行后,扩展报告就会在我的项目文件夹中生成html文件,这就是预期的结果。

问题是,当我再次运行测试时,扩展报告将覆盖先前创建的html文件的名称,从而生成新的html报告文件。

每次运行测试时,我都希望范围报告生成具有唯一名称或以in为日期的名称的html文件

5 个答案:

答案 0 :(得分:0)

您可以将文件名创建为当前时间戳。这样,为您的报告文件取一个唯一的名称很容易-

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
extent = new ExtentReports (userDir +"\\test-output\\" + timeStamp + ".html", true);

答案 1 :(得分:0)

您可以通过设置唯一名称来实现:

String reportFile = resultDirectory + fileName + ".html";

比将报告保存到特定文件夹的方法:

public void saveReportFolder() throws IOException { 
     File srcDir = new 
     File(System.getProperty("user.home")+"/Automation/target"); 
     File destDir = new File(System.getProperty("user.home") + "/reports/"+ System.getProperty("user.name")+"/"+dateTimeGenerator()); 
     FileUtils.copyDirectory(srcDir, destDir); 
}

...以及用于设置dateTime的实用程序:

public static String dateTimeGenerate(){
    Format formatter = new SimpleDateFormat("YYYYMMdd_HHmmssSSS");
    Date date = new Date(System.currentTimeMillis());
   return formatter.format(date);
}

或者只是使用klov reports启动服务器并将所有内容都存储在数据库(MongoDb)中,这是一种更为优雅的方法。

希望这会有所帮助,

答案 2 :(得分:0)

我使用:

private static String timestamp = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()).replaceAll(":", "-");
public static String reportFullPath = getReportsPath() + "\\AutomationReport_" + timestamp + ".html";

答案 3 :(得分:0)

我做到了这一点,简洁明了。

String Outputfilename= ExecutionConfig.FileOutname;
        System.err.close(); // written to remove JAVA 9 incompatibility.. continued below
        System.setErr(System.out); // continue.. and remove the warnings
        extent = new ExtentReports(System.getProperty("user.dir") + "/test-output/"+Outputfilename+".html", true);

因此,这里从类ExecutionConfig中调用ExecutionConfig.FileOutname,其中我正在从config.properties文件中读取值。然后将其分配给输出文件。

它也对我有用。

答案 4 :(得分:0)

我也遇到过类似的问题。在现实世界中,我们也需要旧报告。以下是针对 Extent PDF 报告的 Java 解决方案

我添加了一个事件监听器方法。使用的事件 - TestRunStarted。我们还需要注册此活动。 HTML报表也可以解决。

public void setCustomReportName(TestRunStarted event) 
{
    final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
    Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    String currenttimestamp =sdf.format(timestamp);

    Properties prop=new Properties();
    //extent.reporter.pdf.out is the name of property which tell the report path
    prop.setProperty("extent.reporter.pdf.out", "test output/PdfReport/ExtentPdf_"+currenttimestamp+".pdf");
    ExtentService e1 =new ExtentService();

    //ExtentReportsLoader is the inner class of ExtentService and initPdf is its private method which takes the path for report 
    Class<?>[] a=e1.getClass().getDeclaredClasses();

    Method met;
    //Even there is exception test run wont fail and report will also be generated (ExtentPdf.pdf)
    try {
       met = a[0].getDeclaredMethod("initPdf", Properties.class);
       met.setAccessible(true);
       met.invoke(a[0], prop);
    } catch (NoSuchMethodException e) {
       System.out.println("There is no method with name initPdf");
    } catch (SecurityException e) {
       e.printStackTrace();
    } catch (IllegalAccessException e) {
       e.printStackTrace();
    } catch (IllegalArgumentException e) {
       System.out.println("Argument passed to method initPdf are not correct");
    } catch (InvocationTargetException e) {
       e.printStackTrace();
    }
}