public void dump() {
		endTime = System.currentTimeMillis();
		
		final NumberFormat formatter = new DecimalFormat("000");
		
		initReportWriter();
		try {
			reportWriter.writeStartDocument();
			reportWriter.writeStartElement("testsuite");
			reportWriter.writeAttribute("errors", String.valueOf(countCall(Status.ERROR)));
			reportWriter.writeAttribute("failures", String.valueOf(countCall(Status.FAILURE)));
			reportWriter.writeAttribute("hostname", this.hostname);
			reportWriter.writeAttribute("name", this.name);
			reportWriter.writeAttribute("tests", String.valueOf(callReports.size()));
			reportWriter.writeAttribute("time", String.valueOf(getTime()) );
			reportWriter.writeAttribute("timestamp", getTimestamp());
		
			if(!getVariables().isEmpty()) {
				reportWriter.writeStartElement("properties");
				for (final String variableId : getVariables().keySet()) {
					reportWriter.writeStartElement("property");
					reportWriter.writeAttribute("name", variableId);
					reportWriter.writeAttribute("value", getVariables().get(variableId));
					reportWriter.writeEndElement();
				}
				reportWriter.writeEndElement();
			}
			
			for (int i=0; i<callReports.size(); i++) {
				final CallReport callReport = callReports.get(i);
				final String callName = (callReport.getName()==null)? "call_" + String.valueOf(i):callReport.getName();
				
				reportWriter.writeStartElement("testcase");
				reportWriter.writeAttribute("time", String.valueOf(callReport.getTime()));
				reportWriter.writeAttribute("classname", this.name + "." +  formatter.format(i) + "_" + callName);
				reportWriter.writeAttribute("name", callReport.getUrl());
				long callStartTime = callReport.getStartTime() - getStartTime();
				long callEndTime = callStartTime + (callReport.getEndTime() - callReport.getStartTime());
				
				// Azot custom attributes
				reportWriter.writeAttribute("callStartTime", String.valueOf(callStartTime));
				reportWriter.writeAttribute("callEndTime", String.valueOf(callEndTime));
				reportWriter.writeAttribute("callName", callName);
				
				switch (callReport.getStatus()) {
					case ERROR:
						reportWriter.writeStartElement("error");
						reportWriter.writeAttribute("type", callReport.getType());
						reportWriter.writeCharacters(callReport.getMessage());
						reportWriter.writeEndElement();
						break;
					case FAILURE:
						reportWriter.writeStartElement("failure");
						reportWriter.writeAttribute("type", callReport.getType());
						reportWriter.writeAttribute("message", callReport.getMessage());
						reportWriter.writeCharacters(callReport.getMessage());
						reportWriter.writeEndElement();					
						break;
					default:
						break;
				}
				reportWriter.writeEndElement();
			}

			reportWriter.writeEndElement();
			reportWriter.writeEndDocument();
			reportWriter.close();
		} catch (final XMLStreamException e) {
			e.printStackTrace();
		}
	}