使用 Java 应用程序进行文本报告测试

Text report testing with Java application

我正在做一个项目,我必须检查系统生成的某些 (500) 份报告是否通过或失败。

我面临两个问题。

  1. 文本解析。每份报告都是独一无二的,并且具有不同的格式。

报告示例:

售票

电影Full_seats销量Empty_seats

电影 1 星期一 100 500 20

星期二 120 600 0

星期三 80 400 40

星期四 100 500 20

星期五 100 500 20

电影 2

星期一 100 500 20

星期二 120 600 0

星期三 80 400 40

星期四 100 500 20

星期五 100 500 20

等等...

报告结束。

我该怎么做才能映射报告中的值,并将它们保存到 java 集合中。有没有更聪明的方法来创建 500 种不同的解析方法?

  1. 将报告与应用程序中的信息进行比较。我想为每个报告都有一个配置文件,并在其中编写我需要从应用程序进行比较的内容。例如:

report.grossSales & sales.getDay(18_9_2016).grossSales();

以上将意味着自动化 运行:

if(report.grossSales != sales.getDay(18_9_2016).grossSales()){
  System.out.print("failed");
}

欢迎提出其他更聪明、更灵活的方法。 谢谢

如果我没理解错的话,你的任务是验证报告文件是否正确生成和保存。 在这种情况下,我不会让您的自动化应用复杂化。 您可能有权访问生成报告文件的 algorithm/templates。 因此可以在内存中生成报告,然后可以使用文件中的内容轻松验证其内容。

您可以为每种类型的工单创建不同的解析机制。例如,您可以有接口:

interface Ticket {
    void create(String rawTicket);
    Double getSales();
}

所有类型的门票都有不同的实施方式,例如:

class DayTicket implements Ticket{

    @Override
    public void create(String rawTicket) {
        //parse raw ticket, for example, "Monday 10 10 10"
    }

    @Override
    public Double getSales() {
        return null;
    }
}

然后在输入时,您可以为每种类型的票证提供正则表达式模式,并迭代所有这些模式以找到匹配的 Ticket 实现,然后可以获取原始文本并将其解析为有意义的对象:

//Matches Wednesday 80 400 40
Pattern DAY_TICKET = Pattern.compile("^\w+day\s\d+\s\d+(\s\d+)?$");

Ticket createTicket(String raw) {
    if (DAY_TICKET.matcher(raw).matches()) {
        Ticket dayTicket = new DayTicket();
        dayTicket.create(raw);
        return dayTicket;
    }
    //etc
}

关于你提到的 500 种不同的解析方法 - 你只需要有一种,例如,

Tuesday 120 600 0

Wednesday 80 400 40

星期四 100 500 20

星期五 100 500 20

并以同样的方式提取日期和金额

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReadFile {
  public static void main(String[]args) throws IOException{

      FileReader in = new FileReader("C:/test.txt");
      BufferedReader br = new BufferedReader(in);
      String line = "";
      String wholeReportText="";
      while ((line = br.readLine()) != null) {
         wholeReportText += line;
      }
      in.close();

           Pattern pattern = Pattern.compile("Movies(.*?)");
           Matcher matcher = pattern.matcher(wholeReportText);
           // check all occurance
           while (matcher.find()) {
                   System.out.println(matcher.group(1));
           }

      Pattern daypat = Pattern.compile("Tuesday (.*?)");
      Matcher daymat = daypat.matcher(wholeReportText);
      // check all occurance
      while (daymat.find()) {
            System.out.println(matcher.group(1));
      }


  }
}

你的问题需要像算法一样分解为子问题

Step 1) To list all the files which you need to parse (File API in java FileFilter in java NIO and Paths API in java7)

Step 2) Read and extract data from file one by one (sample code above)

Step 3) Store the extracted data in some HashMap or ArrayList

Step 4) Use collections as per your requirement