Я использую MSTEST C# в селеновом веб-драйвере. Иерархия моего проекта:
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
. Теперь в модуле AutomationCode.cs присутствуют тестовые примеры для моего модуля. Это основной файл проекта. Код в моем файле AutomationCode.cs:
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();
}
}
На странице dpo:
public static class dpo
{
public const string customermenu = "[data]";
}
На странице dp c
public static class dpc
{
public const string customer = "A";
}
На странице gmethods:
static public SelectElement GetSelectElement(IWebDriver drv, string elem)
{
SelectElement a = new SelectElement(drv.FindElement(By.CssSelector(elem)));
return a;
}
В файле TestRailPO код
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 };
}
}
}
В testrailpm.cs код:
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);
*/
}
}
Я использую MStest C#. Все, что я хочу, это запустить мой основной файл проекта, который является AutomationCode.cs
, и результат теста, который будет "Pass / Fail", будет сохранен в переменной или атрибуте et c, который находится в файле TestRailpo.cs testkeeperresult
или любой другой атрибут. Конечно, сохраненный результат будет либо успешным, либо неудачным, но здесь главное. Мне нужно передать этот результат в виде чисел, которые 1 или 5,1 для прохода и 5 для неудачи. Этот результат мне нужно передать в файле TestRailpm.cs в Resultoftestcase
.
UpdateTestRun.updateSingleTestCaseInATestRun(testRailUrl, testRailUser, testRailPassowrd, testRunIdInInt, singleTestCaseId, Resultoftestcase, "testCaseComments", testRailUserId);
}
Я вызвал метод TestRail () из файла TestRail.pm в AutomationCode.cs перед testcleanup, потому что я хочу обновить TestRail после того, как мои модульные тесты выполнены. Принимая во внимание мое подробное описание, пожалуйста, помогите мне в коде передать результат в виде 1 или 5 в файле testRail.pm. Скажите, пожалуйста, как мне это сделать и какие изменения потребуются?