/// <summary> /// 增加一次 /// </summary> /// <param name="gcase"></param> /// <param name="addMethod"></param> /// <param name="result"></param> public void Add(string gcase, int addMethod, CaseResult result) { if (gcase.Length != 4) { throw new Exception("不合法的值"); } if (addMethod < 0 || addMethod > 3) { throw new Exception("不合法的值"); } bool isFound = false; foreach (var record in rs) { if (record.GCase == gcase) { isFound = true; int index = addMethod * 3 + (int)result; record.Nums[index]++; break; } } if (!isFound) { Record record = new Record() { GCase = gcase }; int index = addMethod * 3 + (int)result; record.Nums[index]++; rs.Add(record); Sort(); } }
private static XElement Case(CaseResult caseResult) { var @case = new XElement("test", new XAttribute("name", caseResult.Name), new XAttribute("type", caseResult.MethodGroup.Class), new XAttribute("method", caseResult.MethodGroup.Method), new XAttribute("result", caseResult.Status == CaseStatus.Failed ? "Fail" : caseResult.Status == CaseStatus.Passed ? "Pass" : "Skip")); if (caseResult.Status != CaseStatus.Skipped) { @case.Add(new XAttribute("time", Seconds(caseResult.Duration))); } if (caseResult.Status == CaseStatus.Skipped && caseResult.SkipReason != null) { @case.Add(new XElement("reason", new XElement("message", new XCData(caseResult.SkipReason)))); } if (caseResult.Status == CaseStatus.Failed) { @case.Add( new XElement("failure", new XAttribute("exception-type", caseResult.Exceptions.PrimaryException.Type), new XElement("message", new XCData(caseResult.Exceptions.PrimaryException.Message)), new XElement("stack-trace", new XCData(caseResult.Exceptions.CompoundStackTrace)))); } return(@case); }
static XElement Case(CaseResult caseResult) { var @case = new XElement("test-case", new XAttribute("name", caseResult.Name), new XAttribute("executed", caseResult.Status != CaseStatus.Skipped), new XAttribute("success", caseResult.Status != CaseStatus.Failed), new XAttribute("result", Result(caseResult.Status))); if (caseResult.Status != CaseStatus.Skipped) { @case.Add(new XAttribute("time", Seconds(caseResult.Duration))); } if (caseResult.Status == CaseStatus.Skipped && caseResult.SkipReason != null) { @case.Add(new XElement("reason", new XElement("message", new XCData(caseResult.SkipReason)))); } if (caseResult.Status == CaseStatus.Failed) { @case.Add( new XElement("failure", new XElement("message", new XCData(caseResult.Exceptions.PrimaryException.Message)), new XElement("stack-trace", new XCData(caseResult.Exceptions.CompoundStackTrace)))); } return(@case); }
public void ShouldReportPassFailSkipCounts() { using (var console = new RedirectedConsole()) { var listener = new ConsoleListener(); var assembly = typeof(ConsoleListener).Assembly; var version = assembly.GetName().Version; var assemblyResult = new AssemblyResult(assembly.Location); var conventionResult = new ConventionResult("Fake Convention"); var classResult = new ClassResult("Fake Class"); assemblyResult.Add(conventionResult); conventionResult.Add(classResult); classResult.Add(CaseResult.Passed("A", TimeSpan.Zero)); classResult.Add(CaseResult.Failed("B", TimeSpan.Zero, new ExceptionInfo(new Exception(), new AssertionLibraryFilter()))); classResult.Add(CaseResult.Failed("C", TimeSpan.Zero, new ExceptionInfo(new Exception(), new AssertionLibraryFilter()))); classResult.Add(CaseResult.Skipped("D", "Reason")); classResult.Add(CaseResult.Skipped("E", "Reason")); classResult.Add(CaseResult.Skipped("F", "Reason")); listener.AssemblyCompleted(assembly, assemblyResult); console.Lines().ShouldEqual("1 passed, 2 failed, 3 skipped, took 0.00 seconds (Fixie " + version + ")."); } }
private static XElement Case(CaseResult caseResult) { var @case = new XElement("test", new XAttribute("name", caseResult.Name), new XAttribute("type", caseResult.MethodGroup.Class), new XAttribute("method", caseResult.MethodGroup.Method), new XAttribute("result", caseResult.Status == CaseStatus.Failed ? "Fail" : caseResult.Status == CaseStatus.Passed ? "Pass" : "Skip")); if (caseResult.Status != CaseStatus.Skipped) @case.Add(new XAttribute("time", Seconds(caseResult.Duration))); if (caseResult.Status == CaseStatus.Skipped && caseResult.SkipReason != null) @case.Add(new XElement("reason", new XElement("message", new XCData(caseResult.SkipReason)))); if (caseResult.Status == CaseStatus.Failed) @case.Add( new XElement("failure", new XAttribute("exception-type", caseResult.Exceptions.PrimaryException.Type), new XElement("message", new XCData(caseResult.Exceptions.PrimaryException.Message)), new XElement("stack-trace", new XCData(caseResult.Exceptions.CompoundStackTrace)))); return @case; }
public void AddCaseAction(CaseResult yourCaseResult, CaseActionDescription yourDescription) { if (actions == null) { actions = new Dictionary <CaseResult, CaseActionDescription>(); } actions.Add(yourCaseResult, yourDescription); }
public ConventionResult Execute(Listener listener, params Type[] candidateTypes) { var conventionResult = new ConventionResult(GetType().FullName); foreach (var testClass in Classes.Filter(candidateTypes)) { var classResult = new ClassResult(testClass.FullName); var methods = Methods.Filter(testClass); var cases = methods.SelectMany(method => CasesForMethod(testClass, method)).ToArray(); var casesBySkipState = cases.ToLookup(CaseExecution.SkipPredicate); var casesToSkip = casesBySkipState[true]; var casesToExecute = casesBySkipState[false]; foreach (var @case in casesToSkip) { var skipResult = new SkipResult(@case, CaseExecution.SkipReasonProvider(@case)); listener.CaseSkipped(skipResult); classResult.Add(CaseResult.Skipped(skipResult.Case.Name, skipResult.Reason)); } var caseExecutions = casesToExecute.Select(@case => new CaseExecution(@case)).ToArray(); if (caseExecutions.Any()) { ClassExecution.Behavior.Execute(testClass, this, caseExecutions); foreach (var caseExecution in caseExecutions) { if (caseExecution.Exceptions.Any()) { var failResult = new FailResult(caseExecution, AssertionLibrary); listener.CaseFailed(failResult); classResult.Add(CaseResult.Failed(failResult.Case.Name, failResult.Duration, failResult.ExceptionSummary)); } else { var passResult = new PassResult(caseExecution); listener.CasePassed(passResult); classResult.Add(CaseResult.Passed(passResult.Case.Name, passResult.Duration)); } } } conventionResult.Add(classResult); } return(conventionResult); }
public string additionalError; //case 错误的辅助备注 (主要是请求本身失败或错误) public MyExecutionDeviceResult() { caseId = 0; caseProtocol = CaseProtocol.unknownProtocol; requestTime = null; spanTime = null; startTime = null; caseTarget = null; backContent = null; expectMethod = CaseExpectType.judge_default; expectContent = null; result = CaseResult.Unknow; staticDataResultCollection = null; additionalRemark = null; additionalError = null; }
private static XElement Case(CaseResult caseResult) { var nameWithoutParameters = caseResult.Name; var indexOfOpenParen = nameWithoutParameters.IndexOf("("); if (indexOfOpenParen != -1) { nameWithoutParameters = nameWithoutParameters.Substring(0, indexOfOpenParen); } var indexOfLastDot = nameWithoutParameters.LastIndexOf("."); var type = nameWithoutParameters.Substring(0, indexOfLastDot); var method = nameWithoutParameters.Substring(indexOfLastDot + 1); var @case = new XElement("test", new XAttribute("name", caseResult.Name), new XAttribute("type", type), new XAttribute("method", method), new XAttribute("result", caseResult.Status == CaseStatus.Failed ? "Fail" : caseResult.Status == CaseStatus.Passed ? "Pass" : "Skip")); if (caseResult.Status != CaseStatus.Skipped) { @case.Add(new XAttribute("time", Seconds(caseResult.Duration))); } if (caseResult.Status == CaseStatus.Skipped && caseResult.SkipReason != null) { @case.Add(new XElement("reason", new XElement("message", new XCData(caseResult.SkipReason)))); } if (caseResult.Status == CaseStatus.Failed) { @case.Add( new XElement("failure", new XAttribute("exception-type", caseResult.ExceptionSummary.Type), new XElement("message", new XCData(caseResult.ExceptionSummary.Message)), new XElement("stack-trace", new XCData(caseResult.ExceptionSummary.StackTrace)))); } return(@case); }
static XElement Case(CaseResult caseResult) { var @case = new XElement("test-case", new XAttribute("name", caseResult.Name), new XAttribute("executed", caseResult.Status != CaseStatus.Skipped), new XAttribute("success", caseResult.Status != CaseStatus.Failed)); if (caseResult.Status != CaseStatus.Skipped) @case.Add(new XAttribute("time", Seconds(caseResult.Duration))); if (caseResult.Status == CaseStatus.Skipped && caseResult.SkipReason != null) @case.Add(new XElement("reason", new XElement("message", new XCData(caseResult.SkipReason)))); if (caseResult.Status == CaseStatus.Failed) { @case.Add( new XElement("failure", new XElement("message", new XCData(caseResult.Exceptions.PrimaryException.Message)), new XElement("stack-trace", new XCData(caseResult.Exceptions.CompoundStackTrace)))); } return @case; }
public Case() { Result = new CaseResult(); }
/// <summary> /// i will get a myRunCaseData that will give caseActionActuator from XmlNode /// </summary> /// <param name="yourRunNode">your XmlNode</param> /// <returns>myRunCaseData you want</returns> public static MyRunCaseData <ICaseExecutionContent> GetCaseRunData(XmlNode sourceNode) { MyRunCaseData <ICaseExecutionContent> myCaseData = new MyRunCaseData <ICaseExecutionContent>(); CaseProtocol contentProtocol = CaseProtocol.unknownProtocol; if (sourceNode == null) { myCaseData.AddErrorMessage("Error :source data is null"); } else { if (sourceNode.Name == "Case") { #region Basic information if (sourceNode.Attributes["id"] == null) { myCaseData.AddErrorMessage("Error :not find the ID"); } else { try { myCaseData.id = int.Parse(sourceNode.Attributes["id"].Value); } catch (Exception) { myCaseData.AddErrorMessage("Error :find the error ID"); } } myCaseData.name = CaseTool.GetXmlAttributeVauleEx(sourceNode, "remark", "NULL"); #endregion #region Content //XmlNode tempCaseContent = sourceNode.SelectSingleNode("Content"); //sourceNode["Content"] 具有同样的功能 XmlNode tempCaseContent = sourceNode["Content"]; if (tempCaseContent == null) { myCaseData.AddErrorMessage("Error :can not find Content"); } else { if (tempCaseContent.Attributes["protocol"] != null && tempCaseContent.Attributes["actuator"] != null) { try { contentProtocol = (CaseProtocol)Enum.Parse(typeof(CaseProtocol), tempCaseContent.Attributes["protocol"].Value); myCaseData.contentProtocol = contentProtocol; } catch { myCaseData.AddErrorMessage("Error :error protocol in Content"); } switch (contentProtocol) { case CaseProtocol.console: myCaseData.testContent = CaseProtocolExecutionForConsole.GetRunContent(tempCaseContent); break; case CaseProtocol.activeMQ: myCaseData.testContent = CaseProtocolExecutionForActiveMQ.GetRunContent(tempCaseContent); break; case CaseProtocol.mysql: myCaseData.testContent = CaseProtocolExecutionForMysql.GetRunContent(tempCaseContent); break; case CaseProtocol.ssh: myCaseData.testContent = CaseProtocolExecutionForSsh.GetRunContent(tempCaseContent); break; case CaseProtocol.vanelife_http: myCaseData.testContent = CaseProtocolExecutionForVanelife_http.GetRunContent(tempCaseContent); break; case CaseProtocol.http: myCaseData.testContent = CaseProtocolExecutionForHttp.GetRunContent(tempCaseContent); break; case CaseProtocol.tcp: myCaseData.testContent = CaseProtocolExecutionForTcp.GetRunContent(tempCaseContent); break; case CaseProtocol.telnet: myCaseData.testContent = CaseProtocolExecutionForTelnet.GetRunContent(tempCaseContent); break; case CaseProtocol.com: myCaseData.testContent = CaseProtocolExecutionForCom.GetRunContent(tempCaseContent); break; case CaseProtocol.vanelife_comm: myCaseData.AddErrorMessage("Error :this protocol not supported for now"); break; case CaseProtocol.vanelife_tcp: myCaseData.AddErrorMessage("Error :this protocol not supported for now"); break; case CaseProtocol.vanelife_telnet: myCaseData.AddErrorMessage("Error :this protocol not supported for now"); break; case CaseProtocol.defaultProtocol: myCaseData.AddErrorMessage("Error :this protocol not supported for now"); break; default: myCaseData.AddErrorMessage("Error :this protocol not supported for now"); break; } if (myCaseData.testContent != null) { if (myCaseData.testContent.MyErrorMessage != null) //将testContent错误移入MyRunCaseData,执行case时会检查MyRunCaseData中的错误 { myCaseData.AddErrorMessage("Error :the Content not analyticaled Because:" + myCaseData.testContent.MyErrorMessage); //return myCaseData; } } } else { myCaseData.AddErrorMessage("Error :can not find protocol or actuator in Content"); } } #endregion #region Expect XmlNode tempCaseExpect = sourceNode["Expect"]; if (tempCaseExpect == null) { myCaseData.caseExpectInfo.myExpectType = CaseExpectType.judge_default; } else { if (tempCaseExpect.Attributes["method"] != null) { try { myCaseData.caseExpectInfo.myExpectType = (CaseExpectType)Enum.Parse(typeof(CaseExpectType), "judge_" + tempCaseExpect.Attributes["method"].Value); } catch { myCaseData.AddErrorMessage("Error :find error CaseExpectType in Expect"); myCaseData.caseExpectInfo.myExpectType = CaseExpectType.judge_default; } } else { myCaseData.caseExpectInfo.myExpectType = CaseExpectType.judge_is; } myCaseData.caseExpectInfo.myExpectContent = CaseTool.GetXmlParametContent(tempCaseExpect); } #endregion #region Action XmlNode tempCaseAction = sourceNode["Action"]; if (tempCaseAction != null) { if (tempCaseAction.HasChildNodes) { foreach (XmlNode tempNode in tempCaseAction.ChildNodes) { CaseResult tempResult = CaseResult.Unknow; CaseAction tempAction = CaseAction.action_unknow; try { tempResult = (CaseResult)Enum.Parse(typeof(CaseResult), tempNode.Name); } catch { myCaseData.AddErrorMessage(string.Format("Error :find error CaseAction in Action with [{0}] in [{1}]", tempNode.InnerXml, tempNode.Name)); continue; } try { tempAction = (CaseAction)Enum.Parse(typeof(CaseAction), "action_" + CaseTool.GetXmlAttributeVauleWithEmpty(tempNode, "action")); } catch { myCaseData.AddErrorMessage(string.Format("Error :find error CaseAction in Action with [{0}] in [{1}]", tempNode.InnerXml, CaseTool.GetXmlAttributeVauleWithEmpty(tempNode, "action"))); continue; } if (tempNode.InnerText != "") { myCaseData.AddCaseAction(tempResult, new CaseActionDescription(tempAction, tempNode.InnerText)); } else { myCaseData.AddCaseAction(tempResult, new CaseActionDescription(tempAction, null)); } } } } #endregion #region Attribute XmlNode tempCaseAttribute = sourceNode["Attribute"]; if (tempCaseAttribute != null) { if (tempCaseAttribute.HasChildNodes) { if (tempCaseAttribute["Delay"] != null) { try { myCaseData.caseAttribute.attributeDelay = int.Parse(tempCaseAttribute["Delay"].InnerText); } catch { myCaseData.AddErrorMessage("Error :find error Delay data in Attribute"); } } if (tempCaseAttribute["Level"] != null) { try { myCaseData.caseAttribute.attributeLevel = int.Parse(tempCaseAttribute["Level"].InnerText); } catch { myCaseData.AddErrorMessage("Error :find error Level data in Attribute"); } } if (tempCaseAttribute["ParameterSave"] != null) { if (tempCaseAttribute["ParameterSave"].HasChildNodes) { foreach (XmlNode tempNode in tempCaseAttribute["ParameterSave"].ChildNodes) { if (tempNode.Name == "NewParameter") { string tempParameterName = CaseTool.GetXmlAttributeVaule(tempNode, "name"); string tempParameterMode = CaseTool.GetXmlAttributeVaule(tempNode, "mode"); string tempParameterAdditional = CaseTool.GetXmlAttributeVaule(tempNode, "additional"); string tempFindVaule = tempNode.InnerText; PickOutFunction tempPickOutFunction = PickOutFunction.pick_str; if (tempParameterName == null) { myCaseData.AddErrorMessage("Error :can not find name data in NewParameter in Attribute"); continue; } if (tempParameterName == "") { myCaseData.AddErrorMessage("Error :the name data in NewParameter is empty in Attribute"); continue; } if (tempParameterMode == null) { myCaseData.AddErrorMessage("Error :can not find mode data in NewParameter in Attribute"); continue; } if (tempFindVaule == "") { myCaseData.AddErrorMessage("Error :the NewParameter vaule is empty in Attribute"); continue; } try { tempPickOutFunction = (PickOutFunction)Enum.Parse(typeof(PickOutFunction), "pick_" + tempParameterMode); } catch { myCaseData.AddErrorMessage("Error :find error ParameterSave mode in Attribute"); continue; } myCaseData.caseAttribute.addParameterSave(tempParameterName, tempFindVaule, tempPickOutFunction, tempParameterAdditional); } } } } } } #endregion } else { myCaseData.AddErrorMessage("Error :source data is error"); } } return(myCaseData); }
private static void PrintCaseResultForArray(CaseResult result) { var resultOutput = "-"; switch (result) { case CaseResult.Passed: Console.ForegroundColor = ConsoleColor.Green; resultOutput = "."; break; case CaseResult.Failed: Console.ForegroundColor = ConsoleColor.Red; resultOutput = "x"; break; case CaseResult.Inconclusive: Console.ForegroundColor = ConsoleColor.Yellow; resultOutput = "-"; break; default: break; } Console.Write(resultOutput); Console.ResetColor(); }
public void Add(CaseResult caseResult) { caseResults.Add(caseResult); }