I am using MSTEST C# in selenium webdriver. Hierarchy of my project is
Level1-MainProjectfile
Level2-Properties
Level2-Refernces
Level2-AppObj(folder)
Level3-DP(folder)
Level4-dpo.cs
Level4-dpc.cs
Level3-TestRail(folder)
Level4-TestRailpm.cs
Level4-TestRailpo.cs
Level3-gmethods.cs
Level2-AUtomationCode.cs
Level2-log4net.config
Now My Unit Testcases are present in AutomationCode.cs file this is the main project file. The code in my AutomationCode.cs file is
public class AutomationCode
{
private IWebDriver WDriver;
private log4net.ILog Testlog;
[TestInitialize]
public void wd()
{
WDriver = Helper.GetWebDriver(helperconst.browserType.Chrome);
Testlog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
[Priority(1)]
[TestMethod]
public void search()
{
Testlog.Info("Test ID:001, This test will select the criteria and update the customer dropdown");
Testlog.Info("Step 1/1 : Select customer from cutomer dropdown");
var dc = gmethods.GetSelectElement(WDriver, dpo.customermenu);
dc.SelectByText(dpc.customer);
}
///[Ignore]
[Priority(2)]
[Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod]
public void TestRailCall()
{
TestRailpm a = new TestRailPM();
a.testrail();
}
[TestCleanup]
public void CleanUp()
{
WDriver.Close();
WDriver.Quit();
}
}
In dpo page:
public static class dpo
{
public const string customermenu = "[data]";
}
In dpc page
public static class dpc
{
public const string customer = "A";
}
In gmethods page:
static public SelectElement GetSelectElement(IWebDriver drv, string elem)
{
SelectElement a = new SelectElement(drv.FindElement(By.CssSelector(elem)));
return a;
}
In TestRailPO file the code is
namespace Automation.AppObj.TestRail
{
public class TestRailPO
{
public class TestResultKeeper
{
public static TestResult TestResult { get; set; }
public static UnitTestOutcome TestOutcome => UnitTestOutcome.Failed;
//TestResult ?? Outcome ?? UnitTestOutcome.Failed;
public static bool IsPassed => TestOutcome == UnitTestOutcome.Passed;
public static Exception Exception { get; set; }
}
public class TestMethodAttribute : Attribute
{
public virtual TestResult[] Execute(ITestMethod testMethod)
{
return new TestResult[] { };
}
}
public class LogTestTestMethod : TestMethodAttribute
{
public override TestResult[] Execute(ITestMethod testMethod)
{
var testResult = base.Execute(testMethod)[0];
TestResultKeeper.TestResult = testResult;
//TestResultKeeper.Exception = testResult.TestFailureException;
return new[] { testResult };
}
}
}
In testrailpm.cs code is :
public class TestRailPM
{
string testRailUrl = "https://test.testrail.io/";
string testRailUser = "test@gmailcom";
string testRailPassowrd = "test";
int projectId = 1;
int milestoneId = 1;
int suiteId = 1;
int testRailUserId = 1;
string[] testCaseIds = { "12345", "21343" };
public void testrail()
{
//Create Test Run in TestRail
//Pass "true" against 'includeAll' parameter to insert all test cases in a suite; "false" to add specific test case id
string testRunID = CreateTestRun.CreateRun(testRailUrl, testRailUser, testRailPassowrd, projectId, suiteId, milestoneId, "Automation of TestCases", "Automation of TestCases", testRailUserId, false, testCaseIds);
int testRunIdInInt = Convert.ToInt16(testRunID);
//Get TestCases Ids of a Run
int[] newTestRunCaseIds = GetTestCases.getTestCaseIds(testRailUrl, testRailUser, testRailPassowrd, testRunIdInInt, true);
int[] originalTestCaseIds = GetTestCases.getTestCaseIds(testRailUrl, testRailUser, testRailPassowrd, testRunIdInInt, false);
//Add Result for Single Test Case in a Test Run
/* testCaseStatus int The ID of the test status. The built-in test rail statuses have the following IDs:
1 Passed
2 Blocked
3 Untested (not allowed when adding a result)
4 Retest
5 Failed
*/
int singleTestCaseId = 716869;
UpdateTestRun.updateSingleTestCaseInATestRun(testRailUrl, testRailUser, testRailPassowrd, testRunIdInInt, singleTestCaseId, TestContext.CurrentTestOutcome == UnitTestOutcome.Passed ? 1 : 5, "testCaseComments", testRailUserId);
/*
// Add Result for Multiple Test Cases in a Test Run at a time
int[] testCaseIdsToUpdateResults = { 584003, 584004, 584005, 584006, 584007, 584008, 584009, 584075, 584076, 584213, 604458, 716869, 716870, 716871, 716872};
int[] testCaseStatuses = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
string[] testCaseComments = { "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed", "This case is passed"};
UpdateTestRun.UpdateTestRunResults(testRailUrl, testRailUser, testRailPassowrd, testRunIdInInt, newTestRunCaseIds, testCaseStatuses, testCaseComments, testRailUserId);
*/
}
}
I am using MStest C#. All I want is to Run my main project file that is AutomationCode.cs
and the result of test case that would be "Pass/Fail" will get saved in a variable or attribute etc that is in TestRailpo.cs file testkeeperresult
or any other attribute. Of course, the result saved would be either pass or fail but here is the main thing. I need to pass that result in the form of numbers that is 1 or 5. 1 for pass and 5 for Fail. That result I need to pass in TestRailpm.cs file in Resultoftestcase
.
UpdateTestRun.updateSingleTestCaseInATestRun(testRailUrl, testRailUser, testRailPassowrd, testRunIdInInt, singleTestCaseId, Resultoftestcase, "testCaseComments", testRailUserId);
}
I have called the TestRail() method from TestRail.pm file to AutomationCode.cs before testcleanup because I want to update TestRail after my unit test cases are executed. Keeping in view of my detailed description kindly help me in code to pass the result in the form of 1 or 5 in testRail.pm file. Please guide me how can I do that and what changes would be required?