public ulong CreateOrGetMilestone()
        {
            if (_client == null)
            {
                return(0);
            }

            var milestones = _client.GetMilestones(_testRailProjectId);

            if (milestones.Any(x => x.Name == _milestoneName))
            {
                return(milestones.First(x => x.Name == _milestoneName).ID);
            }

            // Auto due +1 hour to make sure it wont stay actual forever
            var milestoneResult = _client.AddMilestone(1, _milestoneName);

            return(milestoneResult.Value);
        }
        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);
        }
예제 #3
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;
                }
            }
        }