private static String GenerateFileName(TestItem testItem) { var parts = testItem.ContainerTypeName.Split(','); var id = (!String.IsNullOrEmpty(testItem.Id)) ? String.Concat("_", testItem.Id) : String.Empty; var mode = testItem.Mode.Equals("jit") ? "_J" : "_R"; return String.Concat(parts[0],id,mode,".png"); }
private static void CreatePlotAndSave(TestItem testItem) { // Create a Chart var chart = new Chart(); // Chart title var chartTitle = new Title(testItem.Label); chart.Titles.Add(chartTitle); // Create Chart Area ChartArea chartArea = new ChartArea(); chartArea.AxisX.Title = "Milestone title"; chartArea.AxisY.Title = "ms"; chartArea.AxisX.IsMarginVisible = false; for (int i = 0; i < testItem.MilestoneLabels.Length;i++) { chartArea.AxisX.CustomLabels.Add(i + 0.5, i + 1.5, testItem.MilestoneLabels[i]); } // Legend Legend legend = new Legend("default"); legend.Docking = Docking.Bottom; chart.Legends.Add(legend); // Add Chart Area to the Chart chart.ChartAreas.Add(chartArea); foreach (var line in testItem.Lines) { Series series = new Series(); series.Legend = "default"; series.LegendText = line.Label; series.ChartType = SeriesChartType.Line; series.MarkerStyle = MarkerStyle.Circle; series.BorderWidth = 2; series.MarkerSize = 5; for (int i = 0; i < line.Points.Length; i++) { series.Points.Add(line.Points[i].GetMinTime()); } chart.Series.Add(series); } // Set chart control location chart.Location = new System.Drawing.Point(16, 48); // Set Chart control size chart.Size = new System.Drawing.Size(400, 300); var fileName = GenerateFileName(testItem); var file = new FileStream(fileName, FileMode.Create); chart.SaveImage(file, ChartImageFormat.Png); file.Close(); Console.WriteLine(String.Format("Report: \"{0}\" created.", fileName)); }
private static List<TestItem> ParseXml(XmlDocument xmlResults) { var rootNode = xmlResults.SelectSingleNode("root"); var testNodes = rootNode.SelectNodes("test"); var results = new List<TestItem>(); foreach (XmlNode testNode in testNodes) { var resultItem = new TestItem(); var labelNode = testNode.SelectSingleNode("label"); resultItem.Label = (labelNode != null) ? labelNode.InnerText : String.Empty; var descriptionNode = testNode.SelectSingleNode("description"); resultItem.Description = (descriptionNode != null) ? descriptionNode.InnerText : String.Empty; var idNode = testNode.SelectSingleNode("id"); resultItem.Id = (idNode != null) ? idNode.InnerText : String.Empty; var containerTypeNode = testNode.SelectSingleNode("containerType"); resultItem.ContainerTypeName = (containerTypeNode != null) ? containerTypeNode.InnerText : String.Empty; var testedTypeNode = testNode.SelectSingleNode("testedType"); resultItem.TestedTypeName = (testedTypeNode != null) ? testedTypeNode.InnerText : String.Empty; var modeNode = testNode.SelectSingleNode("mode"); resultItem.Mode = (modeNode != null) ? modeNode.InnerText : String.Empty; var milestonesNode = testNode.SelectSingleNode("milestones"); var milesoneNodes = milestonesNode.SelectNodes("milestone"); resultItem.MilestoneLabels = new String[milesoneNodes.Count]; for (int i = 0; i < milesoneNodes.Count; i++) { resultItem.MilestoneLabels[i] = milesoneNodes[i].InnerText; } resultItem.Lines = new List<LineItem>(); var linesNode = testNode.SelectSingleNode("lines"); var lineNodes = linesNode.SelectNodes("line"); foreach (XmlNode lineNode in lineNodes) { var lineItem = new LineItem(); var lineLabelNode = lineNode.SelectSingleNode("label"); lineItem.Label = (lineLabelNode != null) ? lineLabelNode.InnerText : String.Empty; var guidStringNode = lineNode.SelectSingleNode("guid"); lineItem.GuidString = (guidStringNode != null) ? guidStringNode.InnerText : String.Empty; var lineResultsNode = lineNode.SelectSingleNode("results"); var lineResultNodes = lineResultsNode.SelectNodes("result"); var groupByMilestone = (from XmlNode r in lineResultNodes orderby r.Attributes["iteration"].InnerText group r by r.Attributes["milestone"].InnerText into ms select ms); lineItem.Points = new PointItem[groupByMilestone.Count()]; var index = 0; foreach (var group in groupByMilestone) { var point = new PointItem(); foreach (var resultNode in group) { //todo: check for null var timeNode = resultNode.SelectSingleNode("time"); point.AddTimeMeasure(timeNode.InnerText, timeNode.Attributes["units"].InnerText); var memoryNode = resultNode.SelectSingleNode("memory"); point.AddMemoryMeasure(memoryNode.InnerText, memoryNode.Attributes["units"].InnerText); } lineItem.Points[index++] = point; } resultItem.Lines.Add(lineItem); } results.Add(resultItem); } return results; }