ReportNG测试报告模板定制

时间:2023-03-09 08:50:12
ReportNG测试报告模板定制

 

部分参考:http://tech.it168.com/a2013/0906/1530/000001530755_3.shtml

ReportNG提供了简单的方式来查看测试结果,并能对结果进行着色,还可以通过修改模板定制化内容,修改CSS来替换默认的输出样式等。为了使用ReportNG,首先我们要引入reportng-1.1.4.jar和velocity-dep-1.4.jar,或者直接导入其源代码,进行定制化。

一.增加项目名称、Android设备信息等数据。

  在ReportMetadata.java文件增加以下内容(获得Android设备id和名称):

     /**
* get Device UDID
*/
public String getDeviceUdid() {
List<String> list = getDeviceInfo();
String[] split = {"", "", ""};
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i).contains("model:")) {
split = list.get(i).split(" ");
}
} return split[0];
} /**
* get Device Name
*/
public String getDeviceName() {
List<String> list = getDeviceInfo();
int index = 0;
String[] split = {"", "", ""}; for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i).contains("model:")) {
index = list.get(i).indexOf("model:");
split = list.get(i).substring(index + 6).split(" ");
}
} return split[0];
} public List<String> getDeviceInfo() {
List<String> list = new LinkedList<String>();
String line = "";
String command = "cmd /c adb devices -l";
try {
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = reader.readLine()) != null) {
list.add(line.toString());
}
process.waitFor(); } catch (IOException | InterruptedException e) {
e.getMessage();
} return list;
}

  项目名称和服务器信息存储到xml文件中,这里继续在ReportMetadata.java文件读取xml:

    /**
* 读取xml文件
* @param regInfoPath string 文件路径
*/
private static Map<String, String> parserXml(String regInfoPath) {
Map<String, String> temp = new LinkedHashMap<String, String>();
String path = System.getProperty("user.dir");
path += regInfoPath;
File inputXml = new File(path);
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(inputXml); //把文件读入到文档
Element employees = document.getRootElement(); //获取文档根节点
for(Iterator<?> i = employees.elementIterator(); i.hasNext();) {
Element employee = (Element) i.next();
for(Iterator<?> j = employee.elementIterator(); j.hasNext();) {
Element node = (Element) j.next();
String key = node.getName();
String value = node.getText();
temp.put(key, value);
}
}
} catch (DocumentException e) {
System.out.println(e.getMessage());
}
return temp;
} /**
* 返回节点value
* @param key
* @return
*/
public static String getXmlValue(String key) {
Map<String, String> init = parserXml("\\data\\init.xml");
return init.get(key);
} public static String getServer() {
return getXmlValue("project");
} public static String getXmlSetting() {
String temp = "";
if (getXmlValue("switch").equals("1")) {
return "线上环境";
} else if (getXmlValue("switch").equals("2")) {
return "测试环境";
} return temp;
}

  到模板属性文件reportng.properties里添加模板属性:

project=Project:
setting=Server:
deviceUdid=Device Udid:
deviceName=Device Name:
createTime=Create Time:

  然后到模板输出文件overview.html.vm里修改显示内容,meta为类对象,后面为调用方法:

 <table id="info" align="right">
<tr>
<td><b>$messages.getString("project")</b> $meta.server</td>
</tr>
<tr>
<td><b>$messages.getString("setting")</b> $meta.xmlSetting</td>
</tr>
<tr>
<td><b>$messages.getString("deviceName")</b> $meta.deviceName</td>
</tr>
<tr>
<td><b>$messages.getString("deviceUdid")</b> $meta.deviceUdid </td>
</tr>
<tr>
<td><b>$messages.getString("createTime")</b> $meta.reportDate $meta.reportTime</td>
</tr>
</table>

二.修改模板中执行方法排序问题

  模板中的方法排序是以字母顺序排序的,这里想要改成以方法的执行顺序排序,到TestResultComparator.java文件中修改以下位置:

  

     public int compare(ITestResult result1, ITestResult result2)
{
int longresult2 = 0;
if (result1.getStartMillis() < result2.getStartMillis()) {
longresult2 = -1;
} else {
longresult2 = 1;
} return longresult2;
// return result1.getName().compareTo(result2.getName());
}

三.模板中增加Case异常截图,暂未研究。。

ReportNG测试报告修改后如图:

ReportNG测试报告模板定制