testng 生成html乱码,测试工具之testng生成自定义html报告

本文详细介绍了如何使用TestNG生成自定义HTML测试报告,包括定义DataBean来收集测试数据,如测试状态、方法名称等,并重点讲解了如何处理特殊报告元素如测试周期和通过率的计算。适合测试工具学习者参考。
摘要由CSDN通过智能技术生成

本文将带你了解测试工具testng生成自定义html报告,希望本文对大家学测试工具有所帮助。

testng原生的或reportng的报告总有些不符合需要,尝试生成自定义测试报告,

用到的依赖包:testng-6.9.9.jar,velocity-1.7.jar

1.定义一个DataBean,保存需要收集的数据

只定义部分数据,比如suite、testname、groups等好多数据还没,需要用到的时候再加了

1   package   com.reporter.main;

2

3 import   java.util.Collection;

4   import java.util.List;

5

6   import org.testng.ITestNGMethod;

7

8   public class DataBean {

9       private int excludeTestsSize;   //未执行的test数量

10       private int passedTestsSize;   //测试通过的数量

11     private   int failedTestsSize; //测试失败的数量

12       private int skippedTestsSize;   //测试跳过的数量

13     private   int allTestsSize; //全部执行的测试的数量

14       private ITestNGMethod[] allTestsMethod;   //全部执行的测试方法

15     private   Collection excludeTestsMethod;   //未执行的测试方法

16     private   String testsTime; //测试耗时

17       private String passPercent; //测试通过率

18       private String testName;   //测试方法名

19     private   String className; //测试类名

20       private String duration; //单个测试周期

21       private String params;   //测试用参数

22     private   String description; //测试描述

23       private List output; //Reporter   Output

24     private   String dependMethod; //测试依赖方法

25       private Throwable throwable; //测试异常原因

26       private StackTraceElement[] stackTrace; //   异常堆栈信息

27

28       public int getExcludeTestsSize()   {

29           return excludeTestsSize;

30         }

31

32       public void setExcludeTestsSize(int excludeTestsSize)   {

33           this.excludeTestsSize =   excludeTestsSize;

34       }

35

36       public int getPassedTestsSize()   {

37           return passedTestsSize;

38       }

39

40       public void setPassedTestsSize(int passedTestsSize)   {

41           this.passedTestsSize = passedTestsSize;

42         }

43

44       public int getFailedTestsSize()   {

45           return failedTestsSize;

46         }

47

48       public void setFailedTestsSize(int failedTestsSize)   {

49           this.failedTestsSize =   failedTestsSize;

50       }

51

52       public int getSkippedTestsSize() {

53           return   skippedTestsSize;

54       }

55

56       public void setSkippedTestsSize(int skippedTestsSize)   {

57           this.skippedTestsSize =   skippedTestsSize;

58       }

59

60       public int getAllTestsSize()   {

61           return allTestsSize;

62       }

63

64       public void setAllTestsSize(int allTestsSize)   {

65           this.allTestsSize = allTestsSize;

66         }

67

68       public String getPassPercent()   {

69         return   passPercent;

70       }

71

72       public void setPassPercent(String passPercent)   {

73           this.passPercent =   passPercent;

74       }

75

76       public String getTestName() {

77           return   testName;

78       }

79

80       public void setTestName(String testName)   {

81           this.testName = testName;

82       }

83

84       public String getClassName()   {

85           return className;

86       }

87

88       public void setClassName(String className)   {

89           this.className = className;

90       }

91

92       public String getDuration()   {

93           return duration;

94       }

95

96       public void setDuration(String duration)   {

97           this.duration = duration;

98         }

99

100       public String getParams()   {

101           return params;

102       }

103

104       public void setParams(String params)   {

105           this.params = params;

106         }

107

108       public String getDescription() {

109           return   description;

110       }

111

112       public void setDescription(String description)   {

113           this.description =   description;

114       }

115

116       public List getOutput()   {

117           return output;

118       }

119

120       public void setOutput(List output)   {

121           this.output = output;

122         }

123

124       public String getDependMethod()   {

125           return dependMethod;

126         }

127

128       public void setDependMethod(String dependMethod)   {

129           this.dependMethod =   dependMethod;

130       }

131

132       public Throwable getThrowable()   {

133           return throwable;

134       }

135

136       public void setThrowable(Throwable throwable2)   {

137           this.throwable = throwable2;

138       }

139

140       public StackTraceElement[] getStackTrace()   {

141           return stackTrace;

142       }

143

144       public void setStackTrace(StackTraceElement[]   stackTrace) {

145           this.stackTrace =   stackTrace;

146       }

147

148       public void setTestsTime(String testsTime)   {

149           this.testsTime = testsTime;

150         }

151

152       public String getTestsTime() {

153           return   testsTime;

154       }

155

156       public void setAllTestsMethod(ITestNGMethod[]   allTestsMethod) {

157           this.allTestsMethod =   allTestsMethod;

158       }

159

160       public ITestNGMethod[] getAllTestsMethod()   {

161           return allTestsMethod;

162         }

163

164       public void   setExcludeTestsMethod(Collection   excludeTestsMethod) {

165           this.excludeTestsMethod =   excludeTestsMethod;

166       }

167

168       public Collection   getExcludeTestsMethod() {

169           return   excludeTestsMethod;

170       }

171

172   }

2.对需要特别处理的报告元素,比如测试周期、通过率

1   package   com.reporter.main;

2

3 import   java.text.DecimalFormat;

4 import   java.text.NumberFormat;

5 import   java.util.ArrayList;

6 import   java.util.Arrays;

7 import   java.util.Collection;

8 import   java.util.Iterator;

9 import java.util.List;

10   import org.testng.ITestContext;

11 import   org.testng.ITestResult;

12 import   org.testng.Reporter;

13

14   public class ReportUnits {

15       private static final NumberFormat DURATION_FORMAT = new   DecimalFormat("#0.000");

16       private static final NumberFormat PERCENTAGE_FORMAT =   new DecimalFormat("#0.00%");

17       /**

18        *测试消耗时长

19        *return 秒,保留3位小数

20        */

21     public String   getTestDuration(ITestContext context){

22           long   duration;

23             duration=context.getEndDate().getTime()-context.getStartDate().getTime();

24           return   formatDuration(duration);

25       }

26

27       public String formatDuration(long   elapsed)

28       {

29           double seconds = (double) elapsed /   1000;

30           return DURATION_FORMAT.format(seconds);

31       }

32       /**

33        *测试通过率

34      *return   2.22%,保留2位小数

35        */

36     public String   formatPercentage(int numerator, int   denominator)

37       {

38           return PERCENTAGE_FORMAT.format(numerator / (double)   denominator);

39       }

40

41       /**

42        * 获取方法参数,以逗号分隔

43        * @param result

44        * @return

45        */

46       public String getParams(ITestResult   result){

47           Object[] params =   result.getParameters();

48           List list = new   ArrayList(params.length);

49           for (Object   o:params){

50                 list.add(renderArgument(o));

51             }

52           return    commaSeparate(list);

53       }

54       /**

55      *   获取依赖的方法

56      * @param   result

57      *   @return

58        */

59     public String   getDependMethods(ITestResult result){

60           String[] methods=result.getMethod().getMethodsDependedUpon();

61           return   commaSeparate(Arrays.asList(methods));

62       }

63       /**

64      *   堆栈轨迹,暂不确定怎么做,放着先

65      *   @param throwable

66      *   @return

67        */

68     public String   getCause(Throwable throwable){

69           StackTraceElement[]   stackTrace=throwable.getStackTrace();   //堆栈轨迹

70           List list = new   ArrayList(stackTrace.length);

71           for (Object   o:stackTrace){

72                 list.add(renderArgument(o));

73             }

74           return    commaSeparate(list);

75       }

76       /**

77      *   获取全部日志输出信息

78      *   @return

79        */

80     public   List   getAllOutput(){

81           return   Reporter.getOutput();

82     }

83

84       /**

85        * 按testresult获取日志输出信息

86        * @param result

87        * @return

88        */

89       public List getTestOutput(ITestResult result){

90           return   Reporter.getOutput(result);

91       }

92

93

94       /*将object   转换为String*/

95     private   String renderArgument(Object argument)

96       {

97           if (argument ==   null)

98           {

99               return   "null";

100           }

101           else if (argument instanceof   String)

102           {

103               return   "\"" + argument +   "\"";

104           }

105           else if (argument instanceof   Character)

106           {

107               return "\'" +   argument + "\'";

108           }

109             else

110           {

111               return   argument.toString();

112           }

113       }

114       /*将集合转换为以逗号分隔的字符串*/

115       private String   commaSeparate(Collection   strings)

116       {

117           StringBuilder buffer = new   StringBuilder();

118           Iterator iterator =   strings.iterator();

119           while   (iterator.hasNext())

120           {

121               String   string = iterator.next();

122                 buffer.append(string);

123               if   (iterator.hasNext())

124                 {

125                     buffer.append(",   ");

126                 }

127           }

128           return   buffer.toString();

129       }

130   }

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试工具频道!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值