private static void RunTest(TestInfo testInfo) { //Program.Logger.Info($" +++++ Run: {testInfo.TestMethod}({testInfo.FuncParam ?? ""}), {testInfo.TestRailInfo.CaseID}, {ScreenUrl}"); Program.Logger.Info($" +++++ Run: {testInfo.TestMethod}({testInfo.FuncParam ?? ""}), {testInfo.TestRailInfo.CaseID}"); var classInstance = Activator.CreateInstance(testInfo.TestClass); //Program.Logger.Info("--- Test.Setup"); ExecMethod(classInstance, testInfo.SetupMethod); try { //Program.Logger.Info("--- Test.Run"); ExecMethod(classInstance, testInfo.TestMethod, testInfo.FuncParam); TestRail.SetResult(testInfo.TestRailInfo, ResultStatus.Passed); Program.Logger.Info("Success"); } catch (Exception e) { if (testInfo.TestMethod == null) { TestRail.SetResult(testInfo.TestRailInfo, ResultStatus.Failed, e.Message); Program.Logger.Info($"Error: {e.Message}"); return; } var screeenFile = $"{ScreenUrl}/{testInfo.TestMethod.Name}.png"; var exc = e.InnerException ?? e; var message = exc.Message + Environment.NewLine + screeenFile + Environment.NewLine + exc.StackTrace + Environment.NewLine; Program.Logger.Info($"Error: {message}"); TestRail.SetResult(testInfo.TestRailInfo, ResultStatus.Failed, message); WebDriverHelper.CreateScreenshot(testInfo.TestMethod.Name, false); } finally { //Program.Logger.Info("--- Test.Teardown"); ExecMethod(classInstance, testInfo.TeardownMethod); } }
private static void RunTest(global::TestRail.Types.Test test) { MethodInfo method = null; var tag = TestRail.GetTag(test); var tagDelimiter = '@'; var tagVals = tag.Split(tagDelimiter); var funcName = tag.Contains(tagDelimiter) ? tagVals[0] : tag; var funcParam = tag.Contains(tagDelimiter) ? tagVals[1] : null; var caseId = $"C{test.CaseID}"; var screenUrl = TeamCity.GetScreenUrl(); Program.Logger.Info($" +++++ Run: {funcName}-{funcParam??""}, {caseId}, {screenUrl}"); try { var type = Asm.GetTypes().First(x => (method = GetMethod(x, funcName, caseId)) != null); if (type == null) { throw new Exception("[Type] is not defined."); } if (method == null) { throw new Exception("[Method] is not defined."); } var classInstance = Activator.CreateInstance(type); var setupMethod = type.GetMethods() .FirstOrDefault(x => x.GetCustomAttributes().Any(atr => atr.GetType().Name == "SetUpAttribute")); var teardownMethod = type.GetMethods() .FirstOrDefault( x => x.GetCustomAttributes().Any(atr => atr.GetType().Name == "TearDownAttribute")); if (setupMethod != null) { ExecMethod(classInstance, setupMethod); } ExecMethod(classInstance, method, funcParam); //if (teardownMethod != null) // ExecMethod(type, teardownMethod); TestRail.SetResult(test, ResultStatus.Passed); Program.Logger.Info("Success:"); } catch (Exception e) { if (method == null) { TestRail.SetResult(test, ResultStatus.Failed, e.Message); Program.Logger.Info($"Error: {e.Message}"); return; } var screeenFile = $"{screenUrl}/{method.Name}.png"; var exc = e.InnerException ?? e; var message = exc.Message + Environment.NewLine + screeenFile + Environment.NewLine + exc.StackTrace + Environment.NewLine; Program.Logger.Info($"Error: {message}"); TestRail.SetResult(test, ResultStatus.Failed, message); WebDriverHelper.CreateScreenshot(method.Name, false); } }