【问题标题】:Is there any way to merge and remove duplicate test case from cucmber jvm report?有没有办法从黄瓜 jvm 报告中合并和删除重复的测试用例?
【发布时间】:2020-09-01 11:19:28
【问题描述】:

我的自动化项目中有两个跑步者,如下所示:

主运行器 - 执行所有带有 @ui-test 标记的测试用例,如果场景失败,则 target/rerun.txt 将填充场景位置(例如 features/Dummy.feature:22):

@CucumberOptions(
    features = "classpath:features",
    plugin = {"pretty", "html:target/cucumber-html-report", "json:target/cucumber.json", "rerun:target/rerun.txt"},
    tags = {"@ui-test", "~@ignore"}
)

Secondary runner - 从 target/rerun.txt 重新执行场景:

@CucumberOptions(
    features = "@target/rerun.txt",
    plugin = {"pretty", "html:target/cucumber-html-report-rerun", "json:target/cucumber_rerun.json"}
)

执行时会创建两个结果 json 文件:

黄瓜.json cucumber_rerun.json

Maven Cucumber Reporting 插件将收集结果并创建一个组合报告。

问题是,即使第二次运行所有的target/rerun.txt测试都通过了,由于cucumber.json的原因,报告状态会一直保持失败。

有没有办法(设置 Cucumber-JVM Reports 插件或修改上面显示的运行器)用 cucumber_rerun.json 的结果覆盖 cucumber.json 并仅发布修改后的 cucumber.json?

【问题讨论】:

    标签: java selenium cucumber testng cucumber-jvm


    【解决方案1】:
    As given in link-
    https://stackoverflow.com/questions/39742420/combine-multiple-json-results-in-one-updated-cucumber-jvm-report?rq=1
    
    I wrote the logic to perform following steps in second runner-
    
    1- Deserialize the cucumber.json data into POJO.
    2- Remove the testcases data which got failed from POJO as these cases will be rerun.
    3- Serialize the POJO objects into json and overwrite the cucumber.json file
    
    Below is the logic for same-
    @BeforeClass
    public static void readjson() {
    try{
    
    File jsonFile = new File("./target/cucumber.json");
    String cucumberJsondata=new String(Files.readAllBytes(Paths.get(jsonFile.toURI())));
    ObjectMapper om = new ObjectMapper();
              //Root is the POJO Class 
              List<Root> listRoot = om.readValue(cucumberJsondata, new TypeReference<List<Root>>(){});
              //Root root = om.readValue(cucumberJsondata, Root.class);
              boolean removeflag=false;
              
              int[][]FeatureScn = new int[listRoot.size()][];
              //ArrayList<ArrayList<Integer>> FeatureScn = new ArrayList<ArrayList<Integer>>();
              int featurecount=0;
              for(Root root:listRoot)
              {       
                      List<Element> ele=root.elements;
                      int scncount=0;
                      ArrayList<Integer> removeEleIndex = new ArrayList<Integer>();
                      FeatureScn[featurecount] = new int[root.elements.size()];
                      for(Element e:root.elements)//scenario counter
                      {
                          if(e.type.equalsIgnoreCase("scenario"))
                          {   
                              removeflag=false;
                              for(Step s:e.steps)
                              {
                                  if(s.result.status.equals("failed"))
                                  {
                                      removeflag=true;
                                      break;
                                  }
                                  
                              }
                             
                              if(removeflag)
                                     FeatureScn[featurecount][scncount]= scncount;   
                              else
                                  FeatureScn[featurecount][scncount]= -1;  
                          }    
                          
                          scncount++;
                      }
                      featurecount++;
                      
              }
              for(int i =0;i<listRoot.size();i++)
              {
                  for(int j=0;j<FeatureScn[i].length;j++)
                      if(FeatureScn[i][j]!=-1)
                          listRoot.get(i).getElements().remove(FeatureScn[i][j]);
              }
              ObjectMapper objectMapper = new ObjectMapper();
              FileOutputStream fos = null;
              File file = new File("target/cucumber.json");
                if (file.exists()) {
                    fos = new FileOutputStream(file, false);
                    objectMapper.writeValue(fos, listRoot);
                    fos.close();
                }
    
              
        } catch (FileNotFoundException e) {
         System.out.println("An error occurred.");
         e.printStackTrace();
        } catch (IOException e) {
    
            e.printStackTrace();
        }
    

    【讨论】:

    • 您好 Juhi,您能否添加此实现所需的导入语句和依赖项?
    猜你喜欢
    • 1970-01-01
    • 2022-01-27
    • 2021-05-28
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多