由于我们使用的是maven,所以我们主要来看看pom.xml的情况
org.apache.maven.plugins
maven-surefire-plugin
test
2.19
usedefaultlisteners
false
listener
org.uncommons.reportng.HTMLReporter,org.uncommons.reportng.JUnitXMLReporter
testSuits/seewotraining.xml
./target/${timestamp}
false
maven-surefire-plugin 这个插件主要是用于testng的。我们通过该插件,在对应的目录下./target/${timestamp}生成我们的测试报告目录。我们可以看到这个目录的结构。
这里实际上就是reportng的测试报告的生成路径。但是我们想要通过邮件发送会很难,因为html的内容需要加在额外的css,以及js文件。而邮件实际上是不支持外部的css以及js文件的。
html的生成
所以就需要我们自己想办法来,既然这样子那我们就自己写一个html就可以了。那么我们要怎么才能够知道测试结果的情况呢,我们可以从这个文件里面获取到TEST-TestSuit.xml 我们可以看看这个xml的内容
org.openqa.selenium.TimeoutException:
java.lang.NullPointerException
at com.seewo.training.TestSeewoTraining.login2(TestSeewoTraining.java:25)
以上的内容我删除掉了部分property的内容。从这里我们就可以通过
的标签来识别出是有一条测试用例,并且通过
是否存在来判断这条测试用例是成功还是失败的。
下来看看我们生成html的代码吧。
/**
* 判断字符串中是否包含数字
* @param content 查找的字符串
* @return 是否包含
*/
public static boolean hasDigit(String content) {
boolean flag = false;
Pattern p = Pattern.compile(".*\\d+.*");
Matcher m = p.matcher(content);
if (m.matches())
flag = true;
return flag;
}
/**
* 获取到最新的目录
* @return 返回目录的名称
*/
private static String getLastesFolder() {
File path=new File("./target/");
//列出该目录下所有文件和文件夹
File[] files = path.listFiles();
//按照文件最后修改日期倒序排序
Arrays.sort(files, new Comparator() {
@Override
public int compare(File file1, File file2) {
return (int)(file2.lastModified()-file1.lastModified());
}
});
//取出第一个(即最新修改的)文件,打印文件名
for (File file : files) {
System.out.println(file.getName());
if (hasDigit(file.getName())) {
return file.getName();
}
}
return files[0].getName();
}
/**
* 读取Suite.xml文件
* @return 对应的html内容
*/
public static String readSuitsXml() {
XmlParser xmlParser = new XmlParser("./target/"+getLastesFolder()+"/TEST-TestSuite.xml");
List elements = xmlParser.getElementsByTag(xmlParser.getRootElement(), "testcase");
int testCasePass = 0, testCaseFail = 0, testCaseSkip = 0;
for (Object element1 : elements) {
Element element = (Element) element1;
if (xmlParser.getElementByTag(element, "failure") == null) {
baseHtml += "" + xmlParser.
getElementByAttr(element, "name") + " \n";
testCasePass += 1;
}else {
baseHtml += "" + xmlParser.
getElementByAttr(element, "name") + " \n";
testCaseFail += 1;
}
}
baseHtml +="\n" +
"
\n" + "