Java 是否有任何方法可以合并并从CuCumber jvm报告中删除重复的测试用例?
在我的自动化项目中,我有两位负责人,如下所示: 主运行程序-执行所有@ui测试标记的测试用例,如果场景失败,target/rerun.txt将填充场景位置(例如features/Dummy.feature:22): 辅助运行程序-从target/rerun.txt重新执行场景:Java 是否有任何方法可以合并并从CuCumber jvm报告中删除重复的测试用例?,java,selenium,cucumber,testng,cucumber-jvm,Java,Selenium,Cucumber,Testng,Cucumber Jvm,在我的自动化项目中,我有两位负责人,如下所示: 主运行程序-执行所有@ui测试标记的测试用例,如果场景失败,target/rerun.txt将填充场景位置(例如features/Dummy.feature:22): 辅助运行程序-从target/rerun.txt重新执行场景: @CucumberOptions( features = "@target/rerun.txt", plugin = {"pretty", "html:t
@CucumberOptions(
features = "@target/rerun.txt",
plugin = {"pretty", "html:target/cucumber-html-report-rerun", "json:target/cucumber_rerun.json"}
)
执行执行时,将创建两个结果json文件:
cucumber.json
cucumber_rerun.json
Maven Cucumber报告插件将收集结果并创建一个组合报告
问题是,即使在第二次运行中通过了所有target/rerun.txt测试,由于cucumber.json错误,报告状态仍将保持失败
有没有办法(设置Cucumber JVM Reports插件或修改上面显示的运行程序)用Cucumber_rerun.json的结果覆盖Cucumber.json,并只发布修改后的cucucumber.json?,如链接中所示-
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();
}
https://stackoverflow.com/questions/39742420/combine-multiple-json-results-in-one-updated-cucumber-jvm-report?rq=1
我编写了在second runner中执行以下步骤的逻辑-
1-将cumber.json数据反序列化为POJO。
2-从POJO中删除失败的测试用例数据,因为这些用例将重新运行。
3-将POJO对象序列化为json并覆盖cucumber.json文件
下面是相同的逻辑-
@课前
公共静态void readjson(){
试一试{
File jsonFile=新文件(“./target/cucumber.json”);
String cucumberJsondata=新字符串(Files.readAllBytes(path.get(jsonFile.toURI()));
ObjectMapper om=新的ObjectMapper();
//Root是POJO类
List listRoot=om.readValue(cucumberJsondata,new TypeReference(){});
//Root=om.readValue(cucumberJsondata,Root.class);
布尔removeflag=false;
int[]FeatureScn=newint[listRoot.size()];
//ArrayList FeatureScn=新的ArrayList();
int featurecount=0;
for(根:listRoot)
{
列表元素=根元素;
int scncount=0;
ArrayList removeEleIndex=新的ArrayList();
FeatureScn[featurecount]=new int[root.elements.size()];
for(Element e:root.elements)//场景计数器
{
如果(例如,类型等信号情况(“场景”))
{
removeflag=false;
对于(步骤s:e.步骤)
{
如果(s.result.status.equals(“失败”))
{
removeflag=true;
打破
}
}
如果(removeflag)
FeatureScn[featurecount][scncount]=scncount;
其他的
FeatureScn[featurecount][scncount]=-1;
}
scncount++;
}
featurecount++;
}
对于(int i=0;i
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();
}