{"id":92876,"date":"2020-11-02T18:00:31","date_gmt":"2020-11-02T17:00:31","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=youtrack&#038;p=92876"},"modified":"2021-04-20T20:42:11","modified_gmt":"2021-04-20T19:42:11","slug":"make-it-workflow-part-13-supporting-test-management-scenarios","status":"publish","type":"youtrack","link":"https:\/\/blog.jetbrains.com\/ru\/youtrack\/2020\/11\/make-it-workflow-part-13-supporting-test-management-scenarios\/","title":{"rendered":"\u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441: \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/11\/YT_workflow_ru.png\" alt=\"\" \/><\/p>\n<p>\u0420\u0430\u0434\u044b \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0441 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u00ab\u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u00bb (\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u0435\u0440\u0438\u0438 <a href=\"https:\/\/blog.jetbrains.com\/?s=Make+It+Workflow\">\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435<\/a>)! \u041d\u0430\u0441 \u043d\u0435 \u0440\u0430\u0437 \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 YouTrack \u0434\u043b\u044f QA-\u043a\u043e\u043c\u0430\u043d\u0434. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438 (test management scenarios, TMS) \u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0438\u0437 YouTrack \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u042d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043d\u043e \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 YouTrack. \u041c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 YouTrack, \u0434\u0430\u0434\u0438\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u0437\u0430\u0434\u0430\u0447, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 TMS \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p><span id=\"more-77371\"><\/span><\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u043d\u0430\u0431\u043e\u0440 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432 \u0441 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430\u043c\u0438, \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435, \u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0438 \u0442. \u0434.<br \/>\n<a name=\"ref1\"><\/a><\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 YouTrack<\/h2>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 YouTrack \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0437\u0430\u0434\u0430\u0447: \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441, \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 (\u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432), \u0442\u0435\u0441\u0442-\u0440\u0430\u043d (\u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432 \u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432, \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f) \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0430 (\u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430). \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/www.jetbrains.com\/help\/youtrack\/standalone\/Manage-Custom-Fields-Per-Project.html#add-custom-field-to-project\" target=\"_blank\" rel=\"noopener\">\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c<\/a> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 TMS-\u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 3 \u0442\u0438\u043f\u0430 <a href=\"https:\/\/www.jetbrains.com\/help\/youtrack\/standalone\/Link-Types.html\" target=\"_blank\" rel=\"noopener\">\u0441\u0441\u044b\u043b\u043e\u043a<\/a> \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u00ab\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c-\u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0430\u00bb \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u043e\u0432 \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432 \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438. <\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u00abExecution\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432 \u0441 \u0438\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438. <\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u00abRelated Bug\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0443\u043f\u0430\u0432\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438.<\/li>\n<\/ul>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 <a href=\"https:\/\/www.jetbrains.com\/help\/youtrack\/standalone\/create-articles.html\" target=\"_blank\" rel=\"noopener\">\u0441\u0442\u0430\u0442\u0435\u0439<\/a>, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 (\u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435).<br \/>\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0437\u0430\u0434\u0430\u0447 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 <a href=\"https:\/\/www.jetbrains.com\/help\/youtrack\/standalone\/Manage-Custom-Fields-Per-Project.html#add-custom-field-to-project\" target=\"_blank\" rel=\"noopener\">\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438<\/a>, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a <em>\u0440\u0435\u0436\u0438\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/em>, <em>\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f<\/em>, <em>\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a<\/em>, <em>\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435<\/em>, \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u0442\u0435\u0441\u0442\u0430). \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/www.jetbrains.com\/help\/youtrack\/standalone\/conditional-custom-fields.html\" target=\"_blank\" rel=\"noopener\">\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043f\u043e\u043b\u044f<\/a>, \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0442\u0438\u043f\u043e\u043c \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS0_1.png\" alt=\"\" \/><\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447 \u0442\u0438\u043f\u0430 \u00abTest Case\u00bb \u0438 \u00abTest Run\u00bb, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044f \u0438\u0445 \u043a \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u043e\u0432 \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432<\/h2>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0441\u0442-\u0440\u0430\u043d \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u044b \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0443 \u0442\u0438\u043f\u0430 \u00abTest Run\u00bb. <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0442\u0438\u043f\u0430 \u00abAssigned test case and test suite\u00bb.<\/li>\n<li>\u0412\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d.<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0448\u0430\u0433\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u00abPopulate Test Run\u00bb:<\/p>\n<ul>\n<li>\u0414\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432 \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0438\u043f\u0430 \u00abTest Case Execution\u00bb. <\/li>\n<li>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0441\u044b\u043b\u043a\u0438 \u0442\u0438\u043f\u0430 \u00abExecution\u00bb \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u043d\u0435\u0441\u0435\u043d\u0430 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u043c.<\/li>\n<li>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d.<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/done1s720cut.gif\" alt=\"\" \/><\/p>\n<details>\n<summary>\n        \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>\n    <\/summary>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-title=\"\">\nvar entities = require(&#039;@jetbrains\/youtrack-scripting-api\/entities&#039;);\nvar workflow = require(&#039;@jetbrains\/youtrack-scripting-api\/workflow&#039;);\n\nexports.rule = entities.Issue.onChange({\n  title: &#039;Populate-test-run&#039;,\n  guard: function(ctx) {\n    var issue = ctx.issue;\n    return !issue.isChanged(&#039;project&#039;) &amp;&amp; issue.Type &amp;&amp; (issue.Type.name == ctx.Type.TestRun.name) &amp;&amp; issue.links[ctx.Execution.outward].added.isNotEmpty() &amp;&amp; issue.isReported;\n  },\n  action: function(ctx) {\n    var issue = ctx.issue;\n    var totalTestRuns = issue.links[ctx.Execution.outward].added.size;\n    issue.links[ctx.Execution.outward].added.forEach(function(TestCase) {\n      TestCase.links[ctx.Execution.inward].delete(issue);\n\n      var TestCaseRun = TestCase.copy();\n      TestCaseRun.Type = ctx.Type.TestExecution.name;\n      TestCaseRun.Status = ctx.Status.NoRun.name;\n      Object.keys(TestCaseRun.links).forEach(function(linkType) {\n       if (!TestCaseRun.links[linkType])\n        return;\n         TestCaseRun.links[linkType].clear();\n      });\n      TestCaseRun.summary = \"[TEST_CASE_EXECUTION\" + \"] [\" + TestCaseRun.summary + \"]\";\n\n      TestCaseRun.links[ctx.Subtask.inward].add(issue);\n      issue.links[ctx.Subtask.outward].add(TestCaseRun);\n      TestCaseRun.links[ctx.Execution.outward].add(TestCase);\n    });\n    issue.fields[&#039;Total number of test cases&#039;] = totalTestRuns;\n  },\n  requirements: {\n    Execution: {\n      type: entities.IssueLinkPrototype,\n      name: &#039;Execution&#039;,\n      inward: &#039;Execution&#039;,\n      outward: &#039;Assigned test case or test suite&#039;\n    },\n    Subtask: {\n      type: entities.IssueLinkPrototype,\n      name: &#039;Subtask&#039;,\n      inward: &#039;parent for&#039;,\n      outward: &#039;subtask of&#039;\n    },\n    Type: {\n      type: entities.EnumField.fieldType,\n      TestExecution: {\n        name: \"Test Case Execution\"\n      },\n      TestRun: {\n        name: \"Test Run\"\n      },\n      TestCase: {\n        name: \"Test Case\"\n      },\n      TestSuite: {\n        name: \"Test Suite\"\n      }\n    },\n    Total: {\n      type: entities.Field.integerType,\n      name: &#039;Total number of test cases&#039;\n    },\n    TotalFailed: {\n      type: entities.Field.integerType,\n      name: &#039;Number of failed test cases&#039;\n    },\n    TotalPassed: {\n      type: entities.Field.integerType,\n      name: &#039;Number of passed test cases&#039;\n    },\n    Status: {\n      type: entities.EnumField.fieldType,\n      InProgress: {\n        name: &#039;In Progress&#039;\n      },\n      Passed: {\n        name: &#039;Passed&#039;\n      },\n      Failed: {\n        name: &#039;Failed&#039;\n      },\n      NoRun: {\n        name: &#039;No Run&#039;\n      },\n    },\n  }\n});\n<\/pre>\n<p>\n<\/details>\n<h2>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u044b, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447 \u0442\u0438\u043f\u0430 \u00abTest Case Execution\u00bb \u0438 \u00abTest Run\u00bb \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u0442\u0430\u0442\u0443\u0441 \u00abNo Run\u00bb.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/h3>\n<p>\u0412 \u0445\u043e\u0434\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430:<\/p>\n<ol>\n<li>\u0412\u0440\u0443\u0447\u043d\u0443\u044e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 (\u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0437\u0430\u0434\u0430\u0447). <\/li>\n<li>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0442\u0435\u0441\u0442 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0435\u0441\u0442\u0443 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abNo Run\u00bb. \u0412\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e, \u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c.<br \/>\n     \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435:<\/p>\n<ul>\n<li> \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abNo Run\u00bb.<\/li>\n<li> \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 (\u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438).\n<p>    <a href=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/done3s720.gif\" rel=\"attachment wp-att-6366 noopener\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/done3s720.gif\" alt=\"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b\"  \/><\/a><\/li>\n<\/ul>\n<p> \u041a\u043e\u0434 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043d\u0438\u0436\u0435.<\/p>\n<details>\n<summary>\n        \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>\n    <\/summary>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-title=\"\">\n action: function(ctx) {\n  var issue = ctx.issue;\n  if (!issue.links[&#039;subtask of&#039;].isEmpty) {\n              var parent = issue.links[&#039;subtask of&#039;].first();\n              var TestRunList = parent.links[ctx.Subtask.outward];\n              var resultSet = null;\n              var isPassing = true;\n              TestRunList.forEach(function(v) {\n                if (v.Status.name == ctx.Status.Failed.name) {\n                  isPassing = false;\n                } else if ((v.Status.name == ctx.Status.InProgress.name) &amp;&amp; (v.id !== issue.id)) {\n                  resultSet = v;\n                }\n              });\n              if (resultSet) {\n                var otherIssueLink = &#039;<a href=\"&#039; + resultSet.url + &#039;\"> &#039; + resultSet.id + &#039;<\/a>&#039;;\n                var message = &#039;Switch to next open test in current Test Run&#039; + otherIssueLink + &#039;.&#039;;\n                workflow.message(message);\n    }\n}\n}\n<\/pre>\n<p>\n<\/details>\n<\/ol>\n<h2>\u0421\u0442\u0430\u0442\u0443\u0441\u044b \u0442\u0435\u0441\u0442\u043e\u0432 <\/h2>\n<p><a name=\"ref2\"><\/a><\/p>\n<p>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u043c\u0443\u0441\u044f \u0442\u0435\u0441\u0442\u0443 \u0441\u0442\u0430\u0442\u0443\u0441 \u00abPassed\u00bb \u043b\u0438\u0431\u043e \u00abFailed\u00bb. \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c\u0438 <a href=\"#ref1\">\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 YouTrack<\/a> \u0441\u0442\u0430\u0442\u0443\u0441 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041e\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 4 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>Failing: \u043d\u0435 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u044b (\u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u00abNo Run\u00bb), \u0438 \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0442\u0435\u0441\u0442 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abFailed\u00bb.<\/li>\n<li>Passing: \u043d\u0435 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u044b (\u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u00abNo Run\u00bb), \u0438 \u043d\u0435\u0442 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abFailed\u00bb.<\/li>\n<li>Failed: \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u044b (\u043d\u0435\u0442 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abNo Run\u00bb) \u0438 \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0442\u0435\u0441\u0442 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abFailed\u00bb.<\/li>\n<li>Passed: \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abNo Run\u00bb \u0438\u043b\u0438 \u00abFailed\u00bb.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/done2s720.gif\" alt=\"\" \/><\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 QA-\u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0443\u0441 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043d\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432, \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 <a href=\"https:\/\/www.jetbrains.com\/help\/youtrack\/standalone\/state-machine-per-issue-type.html#state-machine-per-issue-type2\" target=\"_blank\" rel=\"noopener\">\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/a>. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<details>\n<summary>\n        \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>\n    <\/summary>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-title=\"\">\n\nvar entities = require(&#039;@jetbrains\/youtrack-scripting-api\/entities&#039;);\nvar workflow = require(&#039;@jetbrains\/youtrack-scripting-api\/workflow&#039;);\n\nexports.rule = entities.Issue.stateMachine({\n  title: &#039;status-management&#039;,\n  stateFieldName: &#039;Status&#039;,\n  typeFieldName: &#039;Type&#039;,\n  defaultMachine: {\n    &#039;No Run&#039;: {\n      initial: true,\n      transitions: {\n        &#039;Failed&#039;: {\n          targetState: &#039;Failed&#039;,\n          action: function(ctx) {\n            var issue = ctx.issue;\n            if (!issue.links[&#039;subtask of&#039;].isEmpty) {\n              var parent = issue.links[&#039;subtask of&#039;].first();\n              var TestRunList = parent.links[ctx.Subtask.outward];\n              var resultSet = null;\n              var isPassing = true;\n              TestRunList.forEach(function(v) {\n                if (v.Status.name == ctx.Status.Failed.name) {\n                  isPassing = false;\n                } else if ((v.Status.name == ctx.Status.InProgress.name) &amp;&amp; (v.id !== issue.id)) {\n                  resultSet = v;\n                }\n              });\n              if (resultSet) {\n                var otherIssueLink = &#039;<a href=\"&#039; + resultSet.url + &#039;\"> &#039; + resultSet.id + &#039;<\/a>&#039;;\n                var message = &#039;Switch to next open test in current Test Run&#039; + otherIssueLink + &#039;.&#039;;\n                workflow.message(message);\n                \/\/ Updating Test Run Status \n                parent.fields[\"Status\"] = ctx.Status.Failing;\n              } else {\n                parent.fields[\"Status\"] = ctx.Status.Failed;\n              }\n            }\n          }\n        },\n        &#039;Passed&#039;: {\n          guard: function(ctx) {\n            var issue = ctx.issue;\n            return !issue.isChanged(&#039;project&#039;) &amp;&amp; !issue.becomesReported &amp;&amp; issue.isReported &amp;&amp; (issue.Type.name == ctx.Type.TestExecution.name);\n          },\n          targetState: &#039;Passed&#039;,\n          action: function(ctx) {\n            var issue = ctx.issue;\n            if (!issue.links[&#039;subtask of&#039;].isEmpty) {\n              var parent = issue.links[&#039;subtask of&#039;].first();\n              var TestRunList = parent.links[ctx.Subtask.outward];\n              var resultSet = null;\n              var isPassing = true;\n              TestRunList.forEach(function(v) {\n                if (v.Status.name == ctx.Status.Failed.name) {\n                  isPassing = false;\n                } else if ((v.Status.name == ctx.Status.InProgress.name) &amp;&amp; (v.id !== issue.id)) {\n                  resultSet = v;\n                }\n              });\n              if (resultSet) {\n                var otherIssueLink = &#039;<a href=\"&#039; + resultSet.url + &#039;\"> &#039; + resultSet.id + &#039;<\/a>&#039;;\n                var message = &#039;Switch to next open test in current Test Run&#039; + otherIssueLink + &#039;.&#039;;\n                workflow.message(message);\n                parent.fields[\"Status\"] = (isPassing) ? ctx.Status.Passing : ctx.Status.Failing;\n              } else {\n                parent.fields[\"Status\"] = (isPassing) ? ctx.Status.Passed : ctx.Status.Failed;\n              }\n            }\n          }\n        }\n      }\n    },\n    Passed: {\n      transitions: {\n        &#039;Failed&#039;: {\n          guard: function(ctx) {\n            var issue = ctx.issue;\n            return !issue.isChanged(&#039;project&#039;) &amp;&amp; !issue.becomesReported &amp;&amp; issue.isReported &amp;&amp; (issue.Type.name == ctx.Type.TestExecution.name);\n          },\n          targetState: &#039;Failed&#039;,\n          action: function(ctx) {\n            var issue = ctx.issue;\n            if (!issue.links[&#039;subtask of&#039;].isEmpty) {\n             var parent = issue.links[&#039;subtask of&#039;].first();\n              var TestRunList = parent.links[ctx.Subtask.outward];\n              var resultSet = null;\n              TestRunList.forEach(function(v) {\n                if (v.Status.name == ctx.Status.Failed.name) {\n                } else if ((v.Status.name == ctx.Status.InProgress.name) &amp;&amp; (v.id !== issue.id)) {\n                  resultSet = v;\n                }\n              });\n              if (resultSet) {\n                var otherIssueLink = &#039;<a href=\"&#039; + resultSet.url + &#039;\"> &#039; + resultSet.id + &#039;<\/a>&#039;;\n                var message = &#039;Switch to next open test in current Test Run&#039; + otherIssueLink + &#039;.&#039;;\n                workflow.message(message);\n                parent.fields[\"Status\"] = ctx.Status.Failing;\n              } else {\n                parent.Status = ctx.Status.Failed;\n              }\n            }\n          }\n        },\n        &#039;No Run&#039;: {\n          guard: function(ctx) {\n            var issue = ctx.issue;\n            return !issue.isChanged(&#039;project&#039;) &amp;&amp; !issue.becomesReported &amp;&amp; issue.isReported &amp;&amp; (issue.Type.name == ctx.Type.TestExecution.name);\n          },\n          targetState: &#039;No Run&#039;,\n          action: function(ctx) {\n            var issue = ctx.issue;\n            if (!issue.links[&#039;subtask of&#039;].isEmpty) {\n              var parent = issue.links[&#039;subtask of&#039;].first();\n              var TestRunList = parent.links[ctx.Subtask.outward];\n              var ActiveTestRun = false;\n              var isPassing = true;\n              TestRunList.forEach(function(v) {\n                if (v.Status.name == ctx.Status.Failed.name) {\n                  isPassing = false;\n                  ActiveTestRun = true;\n                } else if ((v.Status.name == ctx.Status.Passed.name) &amp;&amp; (v.id !== issue.id)) {\n                  ActiveTestRun = true;\n                }\n              });\n              if (ActiveTestRun) {\n                parent.fields[\"Status\"] = (isPassing) ? ctx.Status.Passing : ctx.Status.Failing;\n              } else parent.fields[\"Status\"] = ctx.Status.InProgress;\n            }\n          }\n        }\n      }\n    },\n    Failed: {\n      transitions: {\n        &#039;Passed&#039;: {\n          guard: function(ctx) {\n            var issue = ctx.issue;\n            return !issue.isChanged(&#039;project&#039;) &amp;&amp; !issue.becomesReported &amp;&amp; issue.isReported &amp;&amp; (issue.Type.name == ctx.Type.TestExecution.name);\n          },\n          targetState: &#039;Passed&#039;,\n          action: function(ctx) {\n            var issue = ctx.issue;\n            if (!issue.links[&#039;subtask of&#039;].isEmpty) {\n              var parent = issue.links[&#039;subtask of&#039;].first();\n              var TestRunList = parent.links[ctx.Subtask.outward];\n              var resultSet = null;\n              var isPassing = true;\n              TestRunList.forEach(function(v) {\n                if ((v.Status.name == ctx.Status.Failed.name) &amp;&amp; (v.id !== issue.id)) {\n                  isPassing = false;\n                } else if ((v.Status.name == ctx.Status.InProgress.name) &amp;&amp; (v.id !== issue.id)) {\n                  resultSet = v;\n                }\n              });\n              if (resultSet) {\n                var otherIssueLink = &#039;<a href=\"&#039; + resultSet.url + &#039;\"> &#039; + resultSet.id + &#039;<\/a>&#039;;\n                var message = &#039;Switch to next open test in current Test Run&#039; + otherIssueLink + &#039;.&#039;;\n                workflow.message(message);\n\n                parent.fields[\"Status\"] = (isPassing) ? ctx.Status.Passing : ctx.Status.Failing;\n              } else {\n                parent.fields[\"Status\"] = (isPassing) ? ctx.Status.Passed : ctx.Status.Failed;\n              }\n            }\n          }\n        },\n        &#039;No Run&#039;: {\n          guard: function(ctx) {\n            var issue = ctx.issue;\n            return !issue.isChanged(&#039;project&#039;) &amp;&amp; !issue.becomesReported &amp;&amp; issue.isReported &amp;&amp; (issue.Type.name == ctx.Type.TestExecution.name);\n          },\n          targetState: &#039;No Run&#039;,\n          action: function(ctx) {\n            var issue = ctx.issue;\n            if (!issue.links[&#039;subtask of&#039;].isEmpty) {\n              var parent = issue.links[&#039;subtask of&#039;].first();\n              var TestRunList = parent.links[ctx.Subtask.outward];\n              var ActiveTestRun = false;\n              var isPassing = true;\n              TestRunList.forEach(function(v) {\n                if ((v.Status.name == ctx.Status.Failed.name) &amp;&amp; (v.id !== issue.id)) {\n                  isPassing = false;\n                  ActiveTestRun = true;\n                } else if ((v.Status.name == ctx.Status.Passed.name) &amp;&amp; (v.id !== issue.id)) {\n                  ActiveTestRun = true;\n                }\n              });\n              if (ActiveTestRun) {\n                parent.fields[\"Status\"] = (isPassing) ? ctx.Status.Passing : ctx.Status.Failing;\n              } else parent.fields[\"Status\"] = ctx.Status.InProgress;\n            }\n          }\n        }\n      }\n    }\n  },\n  alternativeMachines: {\n    &#039;Test Run&#039;: {\n      &#039;No Run&#039;: {\n        initial: true,\n        transitions: {\n          &#039;Failing&#039;: {\n            targetState: &#039;Failing&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          },\n          &#039;Failed&#039;: {\n            targetState: &#039;Failed&#039;,\n            action: function(ctx) {\n         \/* Add actions. *\/\n            }\n          },\n          &#039;Passing&#039;: {\n            targetState: &#039;Passing&#039;,\n            action: function(ctx) {\n          \/* Add actions. *\/\n            }\n          },\n          &#039;Passed&#039;: {\n            targetState: &#039;Passed&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          }\n        }\n      },\n      Failing: {\n        transitions: {\n          &#039;Passing&#039;: {\n            targetState: &#039;Passing&#039;,\n            action: function(ctx) {\n           \/* Add actions . *\/\n            }\n          },\n          &#039;Passed&#039;: {\n            targetState: &#039;Passed&#039;,\n            action: function(ctx) {\n          \/* Add actions. *\/\n            }\n          },\n          &#039;Failed&#039;: {\n            targetState: &#039;Failed&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          }\n        }\n      },\n      Passing: {\n        transitions: {\n          &#039;Failing&#039;: {\n            targetState: &#039;Passing&#039;,\n            action: function(ctx) {\n              workflow.check(false, workflow.i18n(&#039;Test Run has-read-only status which is defined based on assigned tests statuses&#039;));\n            }\n          },\n          &#039;Passed&#039;: {\n            targetState: &#039;Passed&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          },\n          &#039;Failed&#039;: {\n            targetState: &#039;Failed&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          }\n        }\n      },\n      Failed: {\n        transitions: {\n          &#039;Passing&#039;: {\n            targetState: &#039;Passing&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          },\n          &#039;Passed&#039;: {\n            targetState: &#039;Passed&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          },\n          &#039;Failing&#039;: {\n            targetState: &#039;Failed&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          }\n        }\n      },\n      Passed: {\n        transitions: {\n          &#039;Passing&#039;: {\n            targetState: &#039;Passing&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          },\n          &#039;Failed&#039;: {\n            targetState: &#039;Passed&#039;,\n            action: function(ctx) {\n          \/* Add actions. *\/\n            },\n          },\n          &#039;Failing&#039;: {\n            targetState: &#039;Failed&#039;,\n            action: function(ctx) {\n           \/* Add actions. *\/\n            }\n          }\n        }\n      }\n    }\n  },\n  requirements: {\n    Assignee: {\n      type: entities.User.fieldType\n    },\n    Status: {\n      type: entities.EnumField.fieldType,\n      InProgress: {\n        name: &#039;No Run&#039;\n      },\n      Failing: {\n        name: &#039;Failing&#039;\n      },\n      Passing: {\n        name: &#039;Passing&#039;\n      },\n      Passed: {\n        name: &#039;Passed&#039;\n      },\n      Failed: {\n        name: &#039;Failed&#039;\n      },\n    },\n    Type: {\n      type: entities.EnumField.fieldType,\n      TestRun: {\n        name: \"Test Run\"\n      },\n      TestExecution: {\n        name: \"Test Case Execution\"\n      }\n    },\n    Subtask: {\n      type: entities.IssueLinkPrototype,\n      name: &#039;Subtask&#039;,\n      inward: &#039;subtask of&#039;,\n      outward: &#039;parent for&#039;\n    },\n  }\n});\n <\/pre>\n<p>\n <\/details>\n<h1>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430<\/h1>\n<p>\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0442\u0435\u0441\u0442\u043e\u0432. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043c\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0440\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438:<\/p>\n<ul>\n<li>\u0421\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d.<\/li>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abPassed\u00bb.<\/li>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u00abFailed\u00bb.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/done5s720.gif\" alt=\"\" \/><br \/>\n\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0442\u0435\u0441\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0441\u0442\u0430\u0440\u043e\u0433\u043e. \u041a\u043e\u0434 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043d\u0438\u0436\u0435.<\/p>\n<details>\n<summary>\n        \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>\n    <\/summary>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-title=\"\">\n  exports.calculateStatuses = function(parent) {\n  var totalTR = 0;\n  var totalFailed = 0;\n  var totalPassed = 0;\n  if (!parent.links[&#039;parent for&#039;]) {\n    return;\n  } else {\n    parent.links[&#039;parent for&#039;].forEach(function(tr) {\n      totalTR++;\n      if (tr.Status.name == &#039;Passed&#039;) {\n        totalFailed++;\n      }\n      if (tr.Status.name == &#039;Failed&#039;) {\n        totalPassed++;\n      }\n    });\n    parent.fields[&#039;Total number of test cases&#039;] = totalTR;\n    parent.fields[&#039;Number of passed test cases&#039;] = totalPassed;\n    parent.fields[&#039;Number of failed test cases&#039;] = totalFailed;\n    return true;\n  }\n};\nexports.resetStatuses = function(testRun, testRunCopy) {\n   testRunCopy.fields[&#039;Total number of test cases&#039;] = testRun.fields[&#039;Total number of test cases&#039;];\n   testRunCopy.fields[&#039;Number of passed test cases&#039;] = 0;\n   testRunCopy.fields[&#039;Number of failed test cases&#039;] = 0;\n  return true;\n};\n<\/pre>\n<p>\n<\/details>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u00abUpdate stats when links are adjusted\u00bb, \u00abSwitch to the next test case\u00bb \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u0440\u0438\u043a, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044f \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.<\/p>\n<h2>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a<\/h2>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u0414\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0443\u043f\u0430\u0432\u0448\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u0441\u044b\u043b\u043e\u043a, \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 YouTrack \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS7.png\" alt=\"\" \/><\/p>\n<h2>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c YouTrack \u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043a \u043d\u043e\u0432\u044b\u043c \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439.<\/p>\n<h3>\u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430<\/h3>\n<p>\u0411\u044b\u043b\u043e \u0431\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e, \u0432\u043d\u043e\u0441\u044f \u043b\u0438\u0448\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0434\u0440\u0443\u0433\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430). \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043c\u0435\u043d\u044e \u00abCreate Test Run copy\u00bb, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447 \u0442\u0438\u043f\u0430 \u00abTest Run\u00bb. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435:<\/p>\n<ul>\n<li>\u0411\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043a\u043e\u043f\u0438\u044f \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430 \u0438 \u043a\u043e\u043f\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u043e\u0432.<\/li>\n<li>\u041a\u043e\u043f\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u043d\u0435\u0441\u0435\u043d\u044b \u0441 \u043d\u043e\u0432\u044b\u043c \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 (\u00ab\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c-\u0440\u0435\u0431\u0435\u043d\u043e\u043a\u00bb). \u0422\u0430\u043a\u0436\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u043d\u0435\u0441\u0435\u043d\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0430\u043c\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u0432\u044f\u0437\u0438 \u00abExecution\u00bb.<\/li>\n<li>\u041a\u043e\u043f\u0438\u044f \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0438\u0449\u0435\u043d\u0430 \u043e\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432, \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438). <\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/done8s720.gif\" alt=\"\" \/><\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u00abCreate Test Run copy\u00bb.<\/p>\n<details>\n<summary>\n        \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>\n    <\/summary>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-title=\"\">\nvar workflow = require(&#039;@jetbrains\/youtrack-scripting-api\/workflow&#039;);\nvar entities = require(&#039;@jetbrains\/youtrack-scripting-api\/entities&#039;);\nvar utils = require(&#039;..\/calculate-tms-stats\/utils&#039;);\n\nexports.rule = entities.Issue.action({\n  title: &#039;Create Test Run copy&#039;,\n  command: &#039;Test Run Creation&#039;,\n  guard: function(ctx) {\n    return ctx.issue.isReported &amp;&amp; (ctx.issue.Type.name == ctx.Type.TestRun.name);\n  },\n  action: function(ctx) {\n    var issue = ctx.issue;\n    var TestRunCopy = issue.copy(issue.project);\n    TestRunCopy.Status = ctx.Status.InProgress; \n    var oldTestList = issue.links[ctx.Subtask.outward];\n    oldTestList.forEach(function(v) {\n      var newTest = v.copy(v.project);\n      newTest.Status = ctx.Status.InProgress;\n      newTest.links[ctx.Subtask.inward].delete(issue);\n      newTest.links[ctx.Subtask.inward].add(TestRunCopy);\n    });\n    utils.resetStatuses(issue, TestRunCopy); \n    var newTestRunLink = &#039;<a href=\"&#039; + TestRunCopy.url + &#039;\"> &#039; + TestRunCopy.id + &#039;<\/a>&#039;;\n    var message = &#039;New Test Run has been created &#039; + newTestRunLink + &#039;.&#039;;\n    workflow.message(message);\n  },\n  requirements: {\n    Execution: {\n      type: entities.IssueLinkPrototype,\n      name: &#039;Execution&#039;,\n      inward: &#039;Execution&#039;,\n      outward: &#039;Assigned Test case or test suite&#039;\n    },\n    Subtask: {\n      type: entities.IssueLinkPrototype,\n      name: &#039;Subtask&#039;,\n      inward: &#039;subtask of&#039;,\n      outward: &#039;parent for&#039;\n    },\n    Type: {\n      type: entities.EnumField.fieldType,\n      TestRun: {\n        name: \"Test Run\"\n      },\n    },\n    Status: {\n      type: entities.EnumField.fieldType,\n      InProgress: {\n        name: &#039;No Run&#039;\n      },\n    }\n  }\n});\n <\/pre>\n<p>\n <\/details>\n<h2>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0442. \u0434.), \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043b \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 \u00abTest Case\u00bb \u0438 \u00abTest Suite\u00bb. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. \u0415\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e YouTrack \u0441\u043e\u043e\u0431\u0449\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0442\u0435\u0441\u0442-\u0440\u0430\u043d \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/resources.jetbrains.com\/storage\/products\/blog\/wp-content\/uploads\/done9.720.gif\" alt=\"\" \/><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u00abpopulate test run\u00bb.<\/p>\n<details>\n<summary>\n        \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>\n    <\/summary>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-title=\"\">\n var message = &#039;<a href=\"&#039; + TestCase.url + &#039;\"> &#039; + TestCase.id + &#039;<\/a>&#039;;\n      workflow.check((TestCase.Type.name == ctx.Type.TestCase.name) || (TestCase.Type.name == ctx.Type.TestSuite.name), workflow.i18n(&#039;\\&#039;Test Run\\&#039; can be linked to \\&#039;Test Case\\&#039; and \\&#039;Test Suite\\&#039; only, but {0} has \\&#039;{1}\\&#039; type!&#039;, message, TestCase.Type.name));\n    <\/pre>\n<p>\n    <\/details>\n<p>\u041a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e <a href=\"#ref2\">\u0441\u043a\u0430\u0437\u0430\u043d\u043e<\/a>, \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0442\u0435\u0441\u0442-\u0440\u0430\u043d\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043d\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432. \u0422\u0430\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e: \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430, \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u044e\u0449\u0438\u0439 \u0440\u0443\u0447\u043d\u043e\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447 \u0442\u0438\u043f\u0430 \u00abTest Run\u00bb.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/done10s720.gif\" alt=\"\" \/><br \/>\n\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u00abStatus-management\u00bb \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u0435\u043a\u0446\u0438\u044e \u00abtransitions\u00bb \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447 \u0442\u0438\u043f\u0430 \u00abTest Run\u00bb \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<details>\n<summary>\n        \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430<br \/>\n    <\/summary>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-title=\"\">\n   &#039;Failing&#039;: {\n            targetState: &#039;Failing&#039;,\n            action: function(ctx) {\n              workflow.check(false, workflow.i18n(&#039;Test run has read-only status which is defined based on assigned tests statuses&#039;));\n            }\n          },\n          ...\n        }\n<\/pre>\n<p>\n<\/details>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f<\/h2>\n<h3>\u041e\u0442\u0447\u0435\u0442\u044b<\/h3>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u0446\u0438\u043a\u043b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 YouTrack \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043e\u0442\u0447\u0435\u0442\u044b. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0438\u043f \u043e\u0442\u0447\u0435\u0442\u0430, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0439 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0432\u0430 \u043e\u0442\u0447\u0435\u0442\u0430:<\/p>\n<ul>\n<li>\n<em><b>\u041e\u0442\u0447\u0435\u0442 \u00ab\u0421\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a\u00bb \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/b><\/em> \u0422\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u043e\u0442\u0447\u0435\u0442\u0430 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u044f \u00ab\u0432\u0435\u0440\u0441\u0438\u044f\u00bb \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0432\u0430\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u041e\u043d \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u00abPassed\u00bb, \u00abFailed\u00bb \u0438 \u00abNo Run\u00bb) \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043e\u0442\u0447\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0442\u0447\u0435\u0442\u044b \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0442\u044c \u0438\u0445 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u0447\u0435\u0442\u0430:<\/h3>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS11.png\" rel=\"attachment wp-att-6366\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS11.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b\" \/><\/a><\/p>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/h3>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS12.png\" rel=\"attachment wp-att-6366\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS12.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b\" \/><\/a><\/p>\n<\/li>\n<li><em> <b>\u041e\u0442\u0447\u0435\u0442 \u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447.<\/b><\/em> \u0414\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432 \u0441 \u0442\u0435\u043c \u0438\u043b\u0438 \u0438\u043d\u044b\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c) \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u043e\u0439 \u043e\u0442\u0447\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0445 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<br \/>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u0447\u0435\u0442\u0430:<\/h3>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS13.png\" rel=\"attachment wp-att-6366\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS13.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b\" \/><\/a><\/p>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/h3>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/re_res_cut.png\" rel=\"attachment wp-att-6366\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/re_res_cut.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b\" \/><\/a>\n <\/li>\n<\/ul>\n<h2>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f <\/h2>\n<p>YouTrack \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447 \u0442\u0438\u043f\u0430 \u00abTest Execution\u00bb.<br \/>\n\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0430. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0438 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS15.png\" alt=\"\" \/><\/p>\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u0430 \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0443.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS16.png\" alt=\"\" \/><\/p>\n<p>\u041f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0430 \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/09\/TMS17.png\" alt=\"\" \/><\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e <a href=\"https:\/\/github.com\/JetBrains\/youtrack-workflows\/tree\/master\/js\/test-management-scenarios\" target=\"_blank\" rel=\"noopener\"> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a>. \u0410 \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 YouTrack \u0438 \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0442\u0435\u043c\u044b, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043a \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443 <a href=\"http:\/\/youtrack-community.herokuapp.com\/\" target=\"_blank\" rel=\"noopener\"> YouTrack Workflow<\/a> \u0432 Slack.<\/p>\n<p><em>\u0412\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 YouTrack<br \/>\nThe Drive to Develop<\/em><\/p>\n","protected":false},"author":1117,"featured_media":93183,"comment_status":"closed","ping_status":"closed","template":"","categories":[1582,808,4129],"tags":[1506,1510,1514,1545],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/youtrack\/92876"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/youtrack"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/types\/youtrack"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/users\/1117"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/comments?post=92876"}],"version-history":[{"count":3,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/youtrack\/92876\/revisions"}],"predecessor-version":[{"id":137377,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/youtrack\/92876\/revisions\/137377"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/media\/93183"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/media?parent=92876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/categories?post=92876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/tags?post=92876"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/cross-post-tag?post=92876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}