예제 #1
0
        public void OneTimeSetUp()
        {
            Client = new TestRailClient(Url, User, Password);
            var commandResult = Client.AddRun(_projectId, 2, "Selenium Test Run " + DateTime.UtcNow.Ticks, "Selenium Test Run example", 1);

            Console.WriteLine(commandResult.Value);
            _runId = commandResult.Value;
        }
        public TestRailStatusUpdater()
        {
            var configurationCurrent = new ConfigurationProvider();
            var version = configurationCurrent.GetVersionMajor();

            _testRailProjectId = configurationCurrent.GetTestRailProjectId();
            _client            = CreateTestRailClient();
            _suffix            = CreateCurrentRunSuffix();
            _milestoneName     = CreateMilestoneName(version);
        }
예제 #3
0
        public ClientTests()
        {
            var configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile(path: "appsettings.json", optional: false, reloadOnChange: true)
                                .Build();
            var section = configuration.GetSection("TestRail");

            _client = new TestRailClient(section["baseurl"], section["username"], section["password"]);
        }
예제 #4
0
        public void LoginAsFreeUser()
        {
            TestCaseId = 231;

            _loginActions.LoginWithFreeUser();
            _mainWindowResults.VerifyUserIsLoggedIn();
            TestRailClient.MarkTestsByStatus();

            //In CI side, fresh installation is performed
            TestCaseId = 197;
        }
예제 #5
0
        public async Task Simple()
        {
            const int projectId = 10000;
            const int suiteId   = 100;

            var caseIds = new[] { 789, 790, 791 };
            var version = "v2.3.1";

            var client = new TestRailClient(
                new TestRailClientConfiguration
            {
                Url      = "https://localhost:62182",
                UserName = "******",
                AppKey   = "aiueo-kakikukeko-sasisuseso",
            });

            await client.StartTestRunAsync(
                new TestRailRunInfo
            {
                ProjectId = projectId,
                SuiteId   = suiteId,
                Name      = "Test Run Sample",
            });

            try
            {
                // Execute a test
            }
            catch (Exception e)
            {
                await client.RecordResultAsync(
                    caseIds,
                    new TestResult
                {
                    Status  = "Failed",
                    Version = version,
                    Comment = e.Message,
                });

                throw;
            }

            await client.RecordResultAsync(
                caseIds,
                new TestResult
            {
                Status  = "Passed",
                Version = version,
            });

            await client.EndTestRunAsync();
        }
예제 #6
0
        public ScanTestResultForm()
        {
            InitializeComponent();

            var client = new TestRailClient("https://accela.testrail.net/", "*****@*****.**", "Change_2017");
            var users  = client.GetUsers();

            TestrailUserDic.Clear();
            foreach (var user in users)
            {
                TestrailUserDic.Add(user.ID, user);
            }
        }
예제 #7
0
        public async Task CaseFilter()
        {
            var client = new TestRailClient(
                new TestRailClientConfiguration
            {
                Url         = "https://localhost:62182",
                UserName    = "******",
                AppKey      = "aiueo-kakikukeko-sasisuseso",
                CaseFilters =
                {
                    new TestRailPriorityCaseFilter("P2"),
                },
            });

            await client.StartTestRunAsync(
                new TestRailRunInfo
            {
                ProjectId   = 10000,
                SuiteId     = 100,
                Name        = "Test Run Sample",
                Description = "This is just a sample. Take it easy~.",
                IncludeAll  = true,
            });

            var targetCaseIds = new[] { 789, 790, 791 };

            string testStatus = null;

            if (client.IsTestRequiredFor(targetCaseIds))
            {
                // Execute a test
                testStatus = "Failed";
            }

            foreach (var(isFilteredCases, caseIds) in client.SplitCaseIdsByFilter(targetCaseIds))
            {
                await client.RecordResultAsync(
                    caseIds,
                    new TestResult
                {
                    Status  = isFilteredCases ? testStatus : "Blocked",
                    Version = "v2.3.1",
                    Comment = "This test failed. The actual result was ...",
                    Defects = { "ASD-8437", "ADS-9852" },
                    Elapsed = TimeSpan.FromMilliseconds(2938),
                });
            }


            await client.EndTestRunAsync();
        }
예제 #8
0
        public async Task ConnectUsingQuickConnectFreeUser()
        {
            TestCaseId = 225;

            _loginWindow.LoginWithFreeUser();
            _mainWindow.QuickConnect();
            _mainWindowResults.CheckIfConnected();
            TestRailClient.MarkTestsByStatus();

            TestCaseId = 229;
            await _mainWindowResults.CheckIfCorrectIPAddressIsShownAsync();

            await _mainWindowResults.CheckIfCorrectCountryIsShownAsync();
        }
예제 #9
0
        private void btnScan_Click(object sender, EventArgs e)
        {
            var testRunUrl = this.txtTestRunUrl.Text;

            if (testRunUrl.StartsWith("https://accela.testrail.net/index.php?/runs/view/") == false)
            {
                MessageBox.Show("The format of test run url should be https://accela.testrail.net/index.php?/runs/view/XXXX");
                return;
            }

            testRunUrl = testRunUrl.Remove(0, "https://accela.testrail.net/index.php?/runs/view/".Length);
            var testRunID = testRunUrl.IndexOf("&") > 0 ? ulong.Parse(testRunUrl.Substring(0, testRunUrl.IndexOf("&"))) : ulong.Parse(testRunUrl);

            var client    = new TestRailClient("https://accela.testrail.net/", "*****@*****.**", "Change_2017");
            var testRun   = client.GetRun((ulong)testRunID);
            var testcases = client.GetTests((ulong)testRunID);

            List <TestResult> testResults = new List <TestResult>();

            foreach (var testcase in testcases)
            {
                var        testcaseFields = JsonConvert.DeserializeObject <TestCaseFields>(testcase.JsonFromResponse.ToString());
                TestResult testResult     = new TestResult();
                testResult.JiraKey       = testcaseFields.JiraKey;
                testResult.TestRunID     = testRunID;
                testResult.TestRunTitle  = testRun.Name;
                testResult.TestRunUrl    = testRun.Url;
                testResult.TestCaseID    = testcase.CaseID;
                testResult.TestCaseTitle = testcase.Title;
                testResult.Status        = testcase.Status.ToString();
                testResult.AssignedTo    = testcase.AssignedToID != null ? TestrailUserDic[(ulong)testcase.AssignedToID].Name : "";
                //testResult.LastUpdateTime =

                var results = client.GetResultsForCase((ulong)testRunID, (ulong)testcase.CaseID);
                foreach (var result in results)
                {
                    testResult.AssignedTo     = TestrailUserDic[(ulong)result.CreatedBy].Name;
                    testResult.LastUpdateTime = result.CreatedOn;
                    break;
                }

                testResults.Add(testResult);
            }

            foreach (var testResult in testResults)
            {
            }
        }
예제 #10
0
        public async Task QuickConnectWhileSecureCoreIsEnabled()
        {
            TestCaseId = 255;

            _loginWindow.LoginWithPlusUser();
            _mainWindow.EnableSecureCore();
            _mainWindow.QuickConnect();
            _mainWindowResults.CheckIfConnected();
            await _mainWindowResults.CheckIfCorrectIPAddressIsShownAsync();

            TestRailClient.MarkTestsByStatus();

            TestCaseId = 256;
            _mainWindow.DisconnectUsingSidebarButton();
            _mainWindowResults.CheckIfDisconnected();
        }
예제 #11
0
        public async Task ConnectUsingQuickConnectBasicUser()
        {
            TestCaseId = 221;

            _loginWindow.LoginWithBasicUser();
            _mainWindow.QuickConnect();
            _mainWindowResults.CheckIfConnected();
            await _mainWindowResults.CheckIfCorrectIPAddressIsShownAsync();

            await _mainWindowResults.CheckIfCorrectCountryIsShownAsync();

            TestRailClient.MarkTestsByStatus();

            TestCaseId = 222;
            _mainWindow.DisconnectUsingSidebarButton();
            _mainWindowResults.CheckIfDisconnected();
        }
예제 #12
0
        public async Task ConnectAndDisconnectViaMapSecureCore()
        {
            TestCaseId = 253;

            _loginWindow.LoginWithPlusUser();
            _mainWindow.EnableSecureCore();
            _mainWindow.ConnectToCountryViaPinSecureCore("US");
            _mainWindow.WaitUntilConnected();
            await _mainWindowResults.CheckIfCorrectIPAddressIsShownAsync();

            TestRailClient.MarkTestsByStatus();

            TestCaseId = 254;

            _mainWindow.DisconnectFromCountryViaPinSecureCore("US");
            _mainWindowResults.CheckIfDisconnected();
        }
예제 #13
0
        public async Task SelectConnectionByCountryVisionaryUser()
        {
            TestCaseId = 223;

            _loginWindow.LoginWithVisionaryUser();
            _mainWindow.ConnectByCountryName("Ukraine");
            _mainWindowResults.CheckIfConnected();
            await _mainWindowResults.CheckIfCorrectCountryIsShownAsync();

            await _mainWindowResults.CheckIfCorrectIPAddressIsShownAsync();

            TestRailClient.MarkTestsByStatus();

            TestCaseId = 224;

            _mainWindow.DisconnectByCountryName("Ukraine");
            _mainWindowResults.CheckIfDisconnected();
        }
예제 #14
0
        public async Task ConnectToFastestViaProfilePlusUser()
        {
            TestCaseId = 225;

            _loginWindow.LoginWithPlusUser();
            _mainWindow.ClickProfilesButton();
            _mainWindow.ConnectToAProfileByName("Fastest");
            _mainWindow.WaitUntilConnected();
            _mainWindowResults.CheckIfConnected();
            TestRailClient.MarkTestsByStatus();

            TestCaseId = 229;
            await _mainWindowResults.CheckIfCorrectIPAddressIsShownAsync();

            await _mainWindowResults.CheckIfCorrectCountryIsShownAsync();

            _mainWindow.DisconnectUsingSidebarButton();
            _mainWindowResults.CheckIfDisconnected();
        }
        private void onTestExecutionBegin(TestExecutor testExecutor, TestExecutionBeginArgs args)
        {
            TestAssert.IsFalse(string.IsNullOrEmpty(args.TestScriptObject.UserID), "");

            // Reset run time totals
            _totalRunTestCases = _totalRunTestSteps = _totalRunTestChecks = 0;

            // Create TestRail client.
            _testRailClient = new TestRailClient(_testRailUrl, _testRailUser, _testRailPassword);

            // Get applicable project
            _testRailProject = getTestRailProject(_testRailProjectName);

            // Project milestone
            var milestones = _testRailClient.GetMilestones(_testRailProject.ID);
            var milestone  = milestones.Find(x => x.Name.Contains(_testRailProjectName) &&
                                             x.Name.Contains(_productVersion));

            // Create test run
            _testRailRun = addTestRailRun(_testRailProject, milestone, (TestSuite)args.TestScriptObject);
        }
예제 #16
0
        public void CheckIfOpenAndCloseSavesSession()
        {
            TestCaseId = 204;

            _loginWindow.LoginWithPlusUser();
            _mainWindow.ClickHamburgerMenu()
            .HamburgerMenu.ClickSettings();
            _settingsWindow.ClickConnectionTab();
            _settingsWindow.EnableAutoConnectToFastestServer();
            KillProtonVPNProcessAndReopenIt();
            _mainWindow.WaitUntilConnected();
            _mainWindow.DisconnectUsingSidebarButton();
            TestRailClient.MarkTestsByStatus();

            TestCaseId = 205;
            _mainWindow.ClickHamburgerMenu()
            .HamburgerMenu.ClickSettings();
            _settingsWindow.ClickConnectionTab();
            _settingsWindow.DisableAutoConnect();
            KillProtonVPNProcessAndReopenIt();
            _mainWindowResults.CheckIfDisconnected();
        }
예제 #17
0
        public void CheckCustomDnsManipulation()
        {
            TestCaseId = 4578;

            _loginWindow.LoginWithPlusUser();
            _mainWindow.ClickHamburgerMenu()
            .HamburgerMenu.ClickSettings();
            _settingsWindow.ClickConnectionTab();
            _settingsWindow.EnableCustomDnsServers();
            _settingsWindow.DisableNetshieldForCustomDns();
            _settingsWindow.CloseSettings();
            _mainWindowResults.CheckIfNetshieldIsDisabled();
            TestRailClient.MarkTestsByStatus();

            TestCaseId = 4579;

            _mainWindow.ClickHamburgerMenu()
            .HamburgerMenu.ClickSettings();
            _settingsWindow.EnterCustomIpv4Address("8.8.8.8");
            _settingsWindow.CloseSettings();
            _mainWindow.QuickConnect();
            _settingsResult.CheckIfDnsAddressMatches("8.8.8.8");
            TestRailClient.MarkTestsByStatus();

            TestCaseId = 4581;

            _mainWindow.ClickHamburgerMenu()
            .HamburgerMenu.ClickSettings();
            _settingsWindow.RemoveDnsAddress();
            _settingsWindow.PressReconnect();
            _mainWindow.WaitUntilConnected();
            _settingsResult.CheckIfDnsAddressDoesNotMatch("8.8.8.8");

            _mainWindow.DisconnectUsingSidebarButton();
            _mainWindowResults.CheckIfDisconnected();
        }
예제 #18
0
        private void btnConnect_Click(object sender, EventArgs e)
        {
            var client   = new TestRailClient("https://accela.testrail.net/", "*****@*****.**", "Change_2017");
            var projects = client.GetProjects();

            foreach (var project in projects)
            {
                if (project.Name == "Accela 9.2.0&9.1.X Test Execution")
                {
                    var plans = client.GetPlans(project.ID);
                    foreach (var plan in plans)
                    {
                        if (plan.Name == "Accela Automation 9.2.0 Release")
                        {
                            var testPlan = client.GetPlan(plan.ID);
                            foreach (var entry in testPlan.Entries)
                            {
                                if (entry.Name == "9.1.2 Code Merge to 9.2.0")
                                {
                                    foreach (var run in entry.RunList)
                                    {
                                        if (run.Name == "9.1.2 Code Merge to 9.2.0")
                                        {
                                            var testcases = client.GetTests((ulong)run.ID);
                                            foreach (var testcase in testcases)
                                            {
                                                var results = client.GetResultsForCase((ulong)run.ID, (ulong)testcase.CaseID);
                                            }

                                            /*
                                             * var results = client.GetResultsForRun((ulong)run.ID);
                                             * foreach(var result in results)
                                             * {
                                             *  var testcase = client.GetTest(result.TestID);
                                             *
                                             *  var testcaseInfo = testcase.JsonFromResponse;
                                             *  testcaseInfo.GetValue("");
                                             * }
                                             */
                                        }
                                    }
                                }
                            }
                        }
                    }

                    /*
                     * var milestomes = client.GetMilestones(project.ID);
                     *
                     * foreach (var milestone in milestomes)
                     * {
                     *  if (milestone.Name == "Accela Automation 9.2.0 Release")
                     *  {
                     *  }
                     * }
                     *
                     * var runs = client.GetRuns(project.ID);
                     */
                }
            }
        }
예제 #19
0
 private TestRailApiClient()
 {
     _apiClient = new TestRailClient(_testRailHost, _userName, _userPassword);
 }
예제 #20
0
        public void RunAfterEach()
        {
            // TestRail stuff
            ulong TestProjectID           = 1;
            ulong TestSuiteID             = 1;
            ulong TestPlanID              = 2;
            ulong TestAutomationSectionID = 1;
            //initialize TestRail
            TestRailClient trail = new TestRailClient(Globals.TRURL, Globals.TRUser, Globals.TRPass);
            //Get current scenario name and tags and id
            var scenarioTitle     = ScenarioContext.Current.ScenarioInfo.Title;
            var scenarioTags      = ScenarioContext.Current.ScenarioInfo.Tags;
            var currentScenarioID = scenarioTitle.Split(' ')[0];
            //Get current scenario steps by parsing the feature file
            string FeatureFilePath = Directory.GetCurrentDirectory() + @"\SeleniumSpecFlowTests\Tests\Features\ServiceTests.feature";
            string scenarioText    = "";

            string[] lines = File.ReadAllLines(FeatureFilePath, System.Text.Encoding.UTF8);
            for (int i = 0; i < lines.Length; i++)
            {
                if (lines[i].Contains(currentScenarioID))
                {
                    bool ScenarioEnd = false;
                    int  j           = i + 1;
                    while ((j < lines.Length) && (ScenarioEnd != true))
                    {
                        if (lines[j].Contains("Scenario:"))
                        {
                            ScenarioEnd = true;
                        }
                        else
                        {
                            scenarioText = scenarioText + lines[j] + System.Environment.NewLine;
                            j++;
                        };
                    }
                    ;
                }
                ;
            }
            ;
            //get list of existing scenarios from TestRail and scan for current scenario
            List <TestRail.Types.Case> TRCasesList = trail.GetCases(TestProjectID, TestSuiteID, TestAutomationSectionID);
            int   casestep       = 0;
            ulong caseToUpdateID = 0;

            //get the ID of the test case we need to update
            while ((casestep < TRCasesList.Count) && (caseToUpdateID == 0))
            {
                if (TRCasesList[casestep].Title.Contains(currentScenarioID))
                {
                    caseToUpdateID = TRCasesList[casestep].ID.Value;
                }
                ;
                casestep++;
            }
            ;
            //place scenario body (test case steps) in custom field - JSON:
            JObject customs = new JObject(
                new JProperty("custom_steps", scenarioText)
                );

            //if current scenario exists in TestRail, then update it, else create a new one
            if (caseToUpdateID != 0)
            {
                _UpdateCase_(caseToUpdateID, scenarioTitle, null, null, null, null, null, customs);
            }
            else
            {
                _AddCase_(TestAutomationSectionID, scenarioTitle, null, null, null, null, null, customs);
                //retrieve id of currently added test -> use the loop to make sure no others were added meanwhile :)
                TRCasesList = trail.GetCases(TestProjectID, TestSuiteID, TestAutomationSectionID);
                casestep    = 0;
                while ((casestep < TRCasesList.Count) && (caseToUpdateID == 0))
                {
                    if (TRCasesList[casestep].Title.Contains(currentScenarioID))
                    {
                        caseToUpdateID = TRCasesList[casestep].ID.Value;
                    }
                    ;
                    casestep++;
                }
                ;
                if (caseToUpdateID == 0)
                {
                    Console.WriteLine("!!!!!!!! ========= SOMEHOW THE TEST CASE WAS NOT ADDED TO TEST RAIL AND CASE ID IS NULL SO CASE WON'T BE ADDED TO TEST RUN ========== !!!!!!!");
                }
            };
            //set current test run name based on ENV variable
            if (Globals.TR_RUN_NAME != null)
            {
                Globals.TRRunName = Globals.TR_RUN_NAME;
            }
            else
            {
                Globals.TRRunName = DateTime.Now.ToShortDateString() + " - Automated Run"; //this will not be used if the env variable TR_RUN_NAME exists and has a value
            }
            //If current test run does not exist, create it and get the ID, else get ID from existing one
            List <TestRail.Types.PlanEntry> Test_Runs = trail.GetPlan(TestPlanID).Entries;
            int runIDindex = -1;

            for (int i = 0; i < Test_Runs.Count; i++)
            {
                if (Test_Runs[i].Name == Globals.TRRunName)
                {
                    runIDindex = i;
                }
            }
            if (runIDindex != -1) //run exists so let's add the scenario to it and also add the result to the scenario
            {
                //update existing test run -> add current scenario if not in there already
                ulong runID = trail.GetPlan(TestPlanID).Entries[runIDindex].RunList[0].ID.Value;
                List <TestRail.Types.Test> CasesList = trail.GetTests(runID);
                ulong TCaseID = 0;
                for (int i = 0; i < CasesList.Count; i++)
                {
                    if (CasesList[i].Title.Contains(currentScenarioID))
                    {
                        TCaseID = CasesList[i].ID.Value;
                    }
                }
                if (TCaseID != 0)  //scenario was already added to current test run so we are updating its run result
                {
                    if (ScenarioContext.Current.TestError != null)
                    {
                        trail.AddResult(TCaseID, TestRail.Types.ResultStatus.Failed, "Test Run Result added automatically " + System.Environment.NewLine + ScenarioContext.Current.TestError.Message, null, null, null, null, null);
                    }
                    else
                    {
                        trail.AddResult(TCaseID, TestRail.Types.ResultStatus.Passed, "Test Run Result added automatically ", null, null, null, null, null);
                    }
                }
                else  //scenario was not added to test run (TCaseID was 0) so we are adding it to the test run and setting its run result
                {
                    List <ulong> newCaseIDs = new List <ulong>();
                    //we are going through the list of scenarios inside the Test Run -> for each we then find its counterpart in Test Suite and we create a list of scenario IDs from TEST SUITE
                    //to this list we will then add the one we have just run and re-write the whole test run with the new list
                    foreach (TestRail.Types.Test TestCaseInRun in trail.GetTests(runID))
                    {
                        foreach (TestRail.Types.Case TestCaseInSuite in trail.GetCases(TestProjectID, TestSuiteID, TestAutomationSectionID))
                        {
                            if (TestCaseInSuite.Title == TestCaseInRun.Title)
                            {
                                newCaseIDs.Add(TestCaseInSuite.ID.Value);
                            }
                        }
                    }
                    newCaseIDs.Add(caseToUpdateID);
                    //now we update the test run with the list we have created
                    trail.UpdatePlanEntry(TestPlanID, trail.GetPlan(TestPlanID).Entries[runIDindex].ID, Globals.TRRunName, null, newCaseIDs);

                    System.Threading.Thread.Sleep(3000);

                    //get ID of current test case from the RUN (we have just added it so we know it's there) so we can update the run result (TCaseID is now at 0)
                    CasesList = trail.GetTests(runID);
                    for (int i = 0; i < CasesList.Count; i++)
                    {
                        if (CasesList[i].Title.Contains(currentScenarioID))
                        {
                            TCaseID = CasesList[i].ID.Value;
                        }
                    }
                    if (TCaseID != 0)
                    {
                        if (ScenarioContext.Current.TestError != null)
                        {
                            trail.AddResult(TCaseID, TestRail.Types.ResultStatus.Failed, "Test Run Result added automatically " + System.Environment.NewLine + ScenarioContext.Current.TestError.Message, null, null, null, null, null);
                        }
                        else
                        {
                            trail.AddResult(TCaseID, TestRail.Types.ResultStatus.Passed, "Test Run Result added automatically ", null, null, null, null, null);
                        }
                    }
                    else
                    {
                        Console.WriteLine("!!!!!!!! ========= SOMEHOW THE TEST WAS NOT ADDED To the test run ========== !!!!!!!");
                    }
                }
            }
            else //test run does not exist, so let's create it, then let's add the new scenario to it and also the result to the scenario
            {
                List <ulong> newCaseIDs = new List <ulong>();
                newCaseIDs.Add(caseToUpdateID);
                trail.AddPlanEntry(TestPlanID, TestSuiteID, Globals.TRRunName, null, newCaseIDs);

                System.Threading.Thread.Sleep(3000);

                //search for run id (newly added run)
                Test_Runs  = trail.GetPlan(TestPlanID).Entries;
                runIDindex = -1;
                for (int i = 0; i < Test_Runs.Count; i++)
                {
                    if (Test_Runs[i].Name == Globals.TRRunName)
                    {
                        runIDindex = i;
                    }
                }
                if (runIDindex == -1)
                {
                    Console.WriteLine("!!!!!!!! ========= SOMEHOW THE RUN ID is 0  - run was not added to test plan ========== !!!!!!!");
                }
                //search for the test id inside the run
                ulong runID = trail.GetPlan(TestPlanID).Entries[runIDindex].RunList[0].ID.Value;
                Console.WriteLine("-----!!!!!!!! Value for the test run ID: " + trail.GetPlan(TestPlanID).Entries[runIDindex].RunList[0].ID.Value.ToString());
                Console.WriteLine("-----!!!!!!!! Value for the test run Name (RunList[0]): " + trail.GetPlan(TestPlanID).Entries[runIDindex].RunList[0].Name);

                List <TestRail.Types.Test> CasesList = trail.GetTests(runID);
                ulong TCaseID = 0;
                for (int i = 0; i < CasesList.Count; i++)
                {
                    if (CasesList[i].Title.Contains(currentScenarioID))
                    {
                        TCaseID = CasesList[i].ID.Value;
                    }
                }
                if (TCaseID == 0)
                {
                    Console.WriteLine("!!!!!!!! ========= SOMEHOW THE TC ID is 0  - test was not added to test run when creating the test run ========== !!!!!!!");
                }

                //add result for test inside the test run
                if (ScenarioContext.Current.TestError != null)
                {
                    trail.AddResult(TCaseID, TestRail.Types.ResultStatus.Failed, "Test Run Result added automatically " + System.Environment.NewLine + ScenarioContext.Current.TestError.Message, null, null, null, null, null);
                }
                else
                {
                    trail.AddResult(TCaseID, TestRail.Types.ResultStatus.Passed, "Test Run Result added automatically ", null, null, null, null, null);
                }
            }
        }
예제 #21
0
 public TestRailAPIClient(string baseUrl, string username, string apiKey)
 {
     _client = new TestRailClient(baseUrl, username, apiKey);
 }
예제 #22
0
        static void Main(string[] args)
        {
            //PrintCasesDependency();
            //return;
            var url    = System.Configuration.ConfigurationManager.AppSettings["testRailUrl"];
            var user   = System.Configuration.ConfigurationManager.AppSettings["testRailUser"];
            var apikey = System.Configuration.ConfigurationManager.AppSettings["testRailApiKey"];

            client = new TestRailClient(url, user, apikey);

            var ezbobProject = client.Projects.FirstOrDefault(x => x.Name == "EZbob");

            if (ezbobProject == null)
            {
                Console.WriteLine("Project EZbob was not found");
                Console.WriteLine("Project are:");
                foreach (var project in client.Projects)
                {
                    Console.WriteLine("Project {0}, id {1}", project.Name, project.ID);
                }

                return;
            }

            Console.WriteLine("Project found: {0}, id: {1}", ezbobProject.Name, ezbobProject.ID);
            Console.WriteLine();

            var configurationGroups      = client.GetConfigurationGroups(ezbobProject.ID);
            List <Configuration> configs = new List <Configuration>();

            foreach (var confGroup in configurationGroups)
            {
                Console.WriteLine("Configuration group: {0}, id {1}", confGroup.Name, confGroup.ID);
                foreach (var conf in confGroup.Configurations)
                {
                    Console.WriteLine("\tConfiguration: {0} id {1}", conf.Name, conf.ID);
                }
                Console.WriteLine("select {0} configuration id:", confGroup.Name);
                input = Console.ReadLine();
                ulong confID = 0;
                if (!ulong.TryParse(input, out confID))
                {
                    Console.WriteLine("wrong input");
                    return;
                }
                var selectedConf = confGroup.Configurations.FirstOrDefault(x => x.ID == confID);
                if (selectedConf != null)
                {
                    configs.Add(selectedConf);
                }
            }

            var suites = client.GetSuites(ezbobProject.ID);

            foreach (var s in suites)
            {
                Console.WriteLine("suit: {0}, id: {1}", s.Name, s.ID);
            }

            Console.Write("Select suit id:");
            input = Console.ReadLine();

            ulong suitId = 0;

            if (!ulong.TryParse(input, out suitId))
            {
                Console.WriteLine("wrong input");
                return;
            }

            var suit = suites.FirstOrDefault(x => x.ID == suitId);

            if (suit == null || !suit.ID.HasValue)
            {
                Console.WriteLine("suit {0} not found", suitId);
                return;
            }

            var cases = client.GetCases(ezbobProject.ID, suit.ID.Value);

            foreach (var c in cases)
            {
                string labels = c.Labels.Any() ? c.Labels.Select(x => x.ToString()).Aggregate((a, b) => a + ", " + b) : "";
                Console.WriteLine("case: {0}, id: {1} \n {2}", c.Title, c.ID, labels);
            }

            var milestones = client.GetMilestones(ezbobProject.ID);

            foreach (var m in milestones)
            {
                Console.WriteLine("milestone {0}, id {1}", m.Name, m.ID);
            }

            Console.Write("select milestone id:");
            input = Console.ReadLine();
            ulong milestoneId = 0;

            if (!ulong.TryParse(input, out milestoneId))
            {
                Console.WriteLine("wrong input");
                return;
            }

            var milestone = milestones.FirstOrDefault(x => x.ID == milestoneId);

            if (milestone == null)
            {
                Console.WriteLine("milestone {0} not found", milestoneId);
                return;
            }

            Console.Write("run all cases (Y/N):");
            input = Console.ReadLine();
            if (input != "Y" && input != "N")
            {
                Console.WriteLine("wrong input");
                return;
            }

            if (input == "Y")
            {
                RunAllCases(ezbobProject, suit, milestone);
            }
            else
            {
                List <Label> labels = cases.SelectMany(x => x.Labels).Distinct().ToList();
                foreach (var label in labels)
                {
                    Console.WriteLine("label {0}, id {1}", label.ToString(), (int)label);
                }
                Console.WriteLine("select label id:");
                input = Console.ReadLine();
                int labelID = 0;
                if (!int.TryParse(input, out labelID))
                {
                    Console.WriteLine("wrong input");
                    return;
                }
                Label selectedLabel = (Label)labelID;

                HashSet <ulong> selectedCases = cases.Where(x => x.Labels.Contains(selectedLabel) && x.ID.HasValue).Select(x => x.ID.Value).ToHashSet();
                if (selectedCases.Any())
                {
                    RunSelectedCases(ezbobProject, suit, milestone, selectedCases, selectedLabel, configs, configurationGroups);
                }
                else
                {
                    Console.WriteLine("No cases match your filter");
                    return;
                }
            }
        }
예제 #23
0
 public TestManager()
 {
     _config    = Config.GetInstance();
     _client    = new TestRailClient(_config.Url, _config.User.Name, _config.User.Password);
     _testRunId = GetTestRun();
 }
예제 #24
0
        static TestRail()
        {
            var trc = ConfigHelper.TestRailConfig;

            Client = new TestRailClient(trc.Url, trc.UserName, trc.Password);
        }