Анализ. Анализ и автоматизация процесса тестирования программного обеспе. Высшего образования национальный исследовательский университет высшая школа экономики
Скачать 197.73 Kb.
|
ЗаключениеСегодня тестирование является неотъемлемой частью процесса производства программных продуктов. Качественное тестирование помогает своевременно выявлять и исправлять ошибки, тем самым уменьшая риски и затраты на разработку программного обеспечения. При автоматизации тестирования скорость и качество тестирования может повыситься, что приведет к еще большему снижению издержек и повышению качества. В данной работе была проанализирована эффективность внедрения автоматизированного тестирования в компании РТ Лабс. Для достижения поставленной цели были решены такие теоретические задачи, как описание теоретических основ тестирования, классификация и описание различных видов тестирования, описание методологий, анализ процесса тестирования, выявление и описание критериев корректного построения процесса тестирования. В работе также были определены критерии эффективности процесса тестирования, описаны и проанализированы формулы, позволяющие выразить эффективность данного процесса в денежном эквиваленте. В практической части работы на примере компании РТ Лабс была просчитана эффективность внедрения автоматизированного тестирования для проведения регрессионного тестирования. Для подсчета эффективности были применены формулы, описанные ранее. После полученных результатов, в которых говорилось о целесообразности применения автоматизированного тестирования в теории, были автоматизированы два больших теста с целью подтвердить или опровергнуть полученные ранее результаты. В результате автоматизации двух тестов были получены результаты, подтверждающие целесообразность внедрения автоматизированного тестирования для проведения регрессионного тестирования. Данные результаты показывают целесообразность только для конкретной компании и для конкретного вида тестирования. Необходимо понимать, что каждая компания сама должна оценивать целесообразность внедрения автоматизированного тестирования программного обеспечения. Для правильного построения и автоматизации процесса тестирования необходимо обладать теоретическими знаниями в данной области, различать виды тестирования, понимать, как именно должен быть написан правильный тест-кейс, для повышения качества тестирования программного обеспечения. Данная работа актуальна для компаний, нацеленных на развитие направления тестирования, автоматизацию процесса тестирования и повышение качества своего продукта, поскольку в работе описаны необходимые теоретические основы, более того, проанализированы критерии эффективности процесса тестирования и на конкретном примере рассчитана эффективность внедрения автоматизированного тестирования в компании. Список литературыДжек Фолк, Сэм Канер, Енг. Кек Нгуен. Тестирование программного обеспечения. Издательство ДиаСофт, 2001. Савин Роман. Тестирование DOT COM. Издательство Дело, 2007. Виды Тестирования [Электронный ресурс]/ Про Тестинг - Тестирование Программного Обеспечения. URL: http://www.protesting.ru/testing/types/sanity.html Certifying Software Testers Worldwide [Электронный ресурс]/ URL: http://www.istqb.org/ Александр Хрущев. Эффективность использования автоматических тестов в ИТ-проектах. Доклад на конференции CEE-SECR 2009, октябрь 2009. Оценка эффективности автоматизации тестирования [Электронный ресурс]/ Технологии качества. URL: http://a1qa.ru/blog/otsenka-effektivnosti-avtomatizatsii-testirovaniya/ Гребенюк В. М. Oценка целесообразности внедрения автоматизированного тестирования. Институт Государственного управления, права и инновационных технологий (ИГУПИТ). Интернет-журнал «НАУКОВЕДЕНИЕ» №1 2013 Джефф Рэшка, Элфрид Дастин, Джон Пол. Автоматизированное тестирование программного обеспечения. Внедрение, управление, эксплуатация. Издательство Лори, 2012. Ron Patton. Software Testing. 2005. Винниченко И.В. Автоматизация процессов тестирования. Издательство Питер, 2005. Рекс Блек. Ключевые процессы тестирования - М.: Издательство Лори, 2014. – 544 с. Сертификация программного обеспечения (ПО) [Электронный ресурс]/ Национальная сертификационная палата. URL: http://www.nspru.ru/sertsoftware/ Автоматизированное тестирование [Электронный ресурс]/ GitHub. URL: https://gist.github.com/codedokode/a455bde7d0748c0a351a Основные положения тестирования [Электронный ресурс]/ Интересные публикации / Хабрахабр. URL: https://habrahabr.ru/post/110307/ Что такое Конфигурационное тестирование [Электронный ресурс]/ software-testing. URL: http://software-testing.org/testing/chto-takoe-konfiguracionnoe-testirovanie-configuration-testing.html Автоматизация тестирования [Электронный ресурс]/ Перфоманс Лаб. URL: http://www.performance-lab.ru/avtomatizacija-testirovanija Приложение Приложение 1. Исходный код решения по автоматизации тестов. using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UnitTestProject { public static class WebDriver { public static event Action public static IWebDriver Chrome { get { if (ChromeInstance == null) { ChromeInstance = new ChromeDriver(@"..\..\Drivers\"); ChromeInstance.Manage().Window.Maximize(); } return ChromeInstance; } } private static IWebDriver ChromeInstance; public static void WaitUntil(this IWebDriver driver, Func var webDriverWait = new WebDriverWait(driver, new TimeSpan(0, 0, timeout)); webDriverWait.Until(condition); } public static IWebElement WaitUntilElementVisible(this IWebDriver driver, By path, int timeout = 15) { var webDriverWait = new WebDriverWait(driver, new TimeSpan(0, 0, timeout)); return webDriverWait.Until } public static IWebElement WaitUntilElementExists(this IWebDriver driver, By path, int timeout = 15) { var webDriverWait = new WebDriverWait(driver, new TimeSpan(0, 0, timeout)); return webDriverWait.Until } public static void WaitUntilDocumentReady(this IWebDriver driver, int timeout = 15) { var webDriverWait = new WebDriverWait(driver, new TimeSpan(0, 0, timeout)); webDriverWait.Until(_ => _.DocumentReady()); if (OnDocumentReady != null) OnDocumentReady(driver); } public static void RefreshUntil(this IWebDriver driver, Func while (!condition(driver)) { driver.Refresh(); driver.WaitUntilDocumentReady(); } } public static bool DocumentReady(this IWebDriver driver) { return ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"); } public static void NavigateToUrl(this IWebDriver driver, string url) { driver.Navigate().GoToUrl(url); } public static void Refresh(this IWebDriver driver) { driver.Navigate().Refresh(); } public static void SafeClick(this IWebElement element) { Application.DisableTopBar(Chrome); element.Click(); } } } using OpenQA.Selenium; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using OpenQA.Selenium.Support.UI; namespace UnitTestProject { public static class Application { public static void RequiresAuthentication() { if (!IsAuthenticated()) Authenticate(); } public static void DisableTopBar(IWebDriver driver) { driver.WaitUntilElementVisible(By.CssSelector("body>iframe")); ((IJavaScriptExecutor)WebDriver.Chrome).ExecuteScript( "var bar = document.querySelector(\"body>iframe\");" + "bar.style.pointerEvents = \"none\";" ); } public static void EnableTopBar() { WebDriver.Chrome.WaitUntilElementVisible(By.CssSelector("body>iframe")); ((IJavaScriptExecutor)WebDriver.Chrome).ExecuteScript( "var bar = document.querySelector(\"body>iframe\");" + "bar.style.pointerEvents = \"auto\";" ); } private static void Authenticate() { WebDriver.Chrome.NavigateToUrl("http://beta-dev.test.gosuslugi.ru/"); WebDriver.Chrome.NavigateToUrl("http://beta-dev.test.gosuslugi.ru/auth/esia/?redirectPage=/"); WebDriver.Chrome.WaitUntilDocumentReady(); WebDriver.Chrome.FindElement(By.CssSelector("#mobileOrEmail")).SendKeys("fedora@mailforspam.com"); WebDriver.Chrome.FindElement(By.CssSelector("#password")).SendKeys("1234567890"); WebDriver.Chrome.FindElement(By.CssSelector("#authnFrm>div.content-box.login-slils-box>div.data-form.flt-lbl-form>div.line-btns>button")).Click(); WebDriver.Chrome.WaitUntilDocumentReady(); } private static bool IsAuthenticated() { var currentUrl = WebDriver.Chrome.Url; WebDriver.Chrome.NavigateToUrl("http://beta-dev.test.gosuslugi.ru/user"); WebDriver.Chrome.WaitUntilDocumentReady(); var user = JObject.Parse(WebDriver.Chrome.FindElement(By.CssSelector("body>pre")).Text); var result = user["error"].Value if (result) { WebDriver.Chrome.NavigateToUrl(currentUrl); WebDriver.Chrome.WaitUntilDocumentReady(); } return result; } } } using System; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; namespace UnitTestProject { [TestClass] public class AcctountTests { [TestMethod] public void Account_Support() { Application.RequiresAuthentication(); // Переход на страницу техподдержки WebDriver.Chrome.NavigateToUrl("http://lk-dev.test.gosuslugi.ru/notifications?type=FEEDBACK"); // Переход на форму обратной связи WebDriver.Chrome.WaitUntilElementVisible(By.CssSelector("#content>div.ng-scope>div>ng-include>div>fieldset>ul>li.feedback-button.ng-scope>a")).SafeClick(); // Заполнение формы WebDriver.Chrome.WaitUntilElementVisible(By.Id("_epgu_el2")).SafeClick(); WebDriver.Chrome.WaitUntilElementVisible(By.XPath("//*[@id=\"feedbackForm\"]/div/div/div/div[2]/ul/li[4]")).SafeClick(); WebDriver.Chrome.WaitUntilElementVisible(By.XPath("//*[@id=\"feedbackForm\"]/div/div/ng-include/epgu-input[1]/div/textarea")).SendKeys("TEST"); WebDriver.Chrome.WaitUntilElementVisible(By.XPath("//*[@id=\"feedbackForm\"]/div/div/ng-include/epgu-input[1]/div/textarea")).Submit(); // Фиксируем время отправки формы DateTime time = DateTime.Now; // Возврат на страницу техподдержки WebDriver.Chrome.WaitUntilElementVisible(By.XPath("//*[@id=\"content\"]/div[2]/div/div/div/div[4]/a")).SafeClick(); WebDriver.Chrome.RefreshUntil(_ => _.FindElements(By.ClassName("advice-datetime")).Any(a => a.Text.Equals(time.ToString("dd.MM.yyyy HH:mm")))); WebDriver.Chrome.FindElements(By.ClassName("advice-datetime")).First(_=>_.Text.Equals(time.ToString("dd.MM.yyyy HH:mm"))).SafeClick(); Guid guid = Guid.NewGuid(); WebDriver.Chrome.WaitUntilElementVisible(By.XPath("//*[@id=\"content\"]/div[2]/div/ng-include/ng-include/div/div[2]/form/div/div[1]/div[1]/textarea")).SendKeys(guid.ToString()); WebDriver.Chrome.WaitUntilElementVisible(By.XPath("//*[@id=\"content\"]/div[2]/div/ng-include/ng-include/div/div[2]/form/div/div[1]/div[1]/textarea")).Submit(); WebDriver.Chrome.WaitUntilElementVisible(By.ClassName("event-text")); Assert.IsTrue(WebDriver.Chrome.FindElements(By.ClassName("event-text")).Any(_ => _.Text == guid.ToString()), "No message recieved"); } [TestMethod] public void Account_Support_Search() { Application.RequiresAuthentication(); WebDriver.Chrome.NavigateToUrl("http://lk-dev.test.gosuslugi.ru/notifications?type=FEEDBACK"); string searchText = "отзыв"; WebDriver.Chrome.WaitUntilElementVisible(By.XPath("//*[@id=\"content\"]/div[2]/div/ng-include/div/fieldset/ul/li[1]/dl[2]/dd/input")).SendKeys(searchText); WebDriver.Chrome.WaitUntil(_ => _.FindElements(By.ClassName("highlighted")).All(a => a.Text == searchText)); } } } |