Baixe o app para aproveitar ainda mais
Prévia do material em texto
Teste de GUI Prof. André Takeshi Endo Níveis/Fases de Teste ● Teste de Unidade ● Teste de Integração ● Teste de Sistema Teste de GUI ● Casos de teste são elaborados com base na interface gráfica de usuário (GUI) ● Verificar se o SUT atende aos requisitos por meio de testes que são executados por meio de sua GUI GUIs Casos de Teste teste manual teste automatizado Teste de GUI ● Casos de teste são elaborados com base na interface gráfica de usuário (GUI) ● Verificar se o SUT atende aos requisitos por meio de testes que são executados por meio de sua GUI GUIs Casos de Teste teste manual teste automatizado X Teste de GUI GUIs Casos de Teste teste manual teste automatizado Como elaborar um teste de GUI? testador Conhecimento sobre o SUT Casos de Teste casos de uso user stories Critérios funcionais - Part. em classes de equivalência - Análise de valor limite - Tabelas de decisão - Teste baseado em modelo - (...) Selenium ● Teste de GUI para aplicações web – Mais famosa ferramenta de teste de GUI ● Dividida em duas partes ● Selenium IDE – Ferramenta de capture/replay – Plugin para o Firefox ● Selenium WebDriver – Codificar testes automatizados para GUI de aplicações Web ● Várias linguagens suportadas – Java + JUnit http://www.seleniumhq.org/ Selenium IDE ● Download em: – https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ ● No navegador Firefox Instalar e reiniciar. Menu Ferramentas → Selenium IDE Selenium IDE ● Tela do Selenium IDE URL onde começam os testes. Velocidade com que os testes são executados. Casos de teste elaborados. Inicia a gravação dos testes. Executa os testes Comandos gravados. Ajuda nos comandos. Selenium IDE ● Grave o caso de teste ● Entre em: https://moodle.utfpr.edu.br/login/index.php ● Acesse como visitante ● Navegue até os cursos da graduação ● Procure pela disciplina “teste de software” ● Verifique (assertiva) que a disciplina existe Selenium IDE ● Ao chegar na opção abaixo adicione o assertTitle Selenium IDE ● Ao chegar na opção abaixo adicione o assertTitle Os ids são campos muitas vezes gerados dinamicamente. Vamos escolher uma opção pelo rótulo! Selenium IDE ● O teste pode ser salvo ● Pode reexecutá-lo quantas vezes necessário ● Grande quantidade destes testes são difíceis de manter (com a evolução do software) ● Em geral, prefere-se programar os testes de GUI ao invés de gravá-los ● Menu “arquivo” → exportar teste como → Java / JUnit 4 / Webdriver – Caso de teste em JUnit usando o Selenium Webdriver Selenium IDE ● Exercícios ● Gravar alguns testes em páginas web conhecidas ● Reexecutar os testes ● Explorar outros elementos de GUI – Checkboxes – Radio buttons – Comboboxes – (...) Selenium Webdriver ● Arquitetura Selenium Webdriver ● Instalação – http://docs.seleniumhq.org/download/ ● Usar o link direto do Moodle ● Versão 3.0+ precisa do Java versão 8 Selenium Webdriver ● Instalação - Chrome instalado na máquina ● Crie um projeto de aplicação Java no NetBeans e adicione todos os jars que estão na pasta /lib que você descompactou do Selenium ● Chrome Driver – https://sites.google.com/a/chromium.org/chromedriver/d ownloads – Fazer o download e descompactar em uma pasta conhecida ● Existem drivers para outros navegadores – http://www.seleniumhq.org/about/platforms.jsp#browsers Selenium Webdriver ● Primeiro Teste @Test public void test01() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://www.google.com.br/"); WebElement searchInput = driver.findElement( By.name("q") ); searchInput.sendKeys("teste de software"); searchInput.submit(); WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("teste"); } }); assertTrue(driver.getTitle().startsWith("teste de software")); driver.close(); } Selenium Webdriver ● Primeiro Teste @Test public void test01() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://www.google.com.br/"); WebElement searchInput = driver.findElement( By.name("q") ); searchInput.sendKeys("teste de software"); searchInput.submit(); WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("teste"); } }); assertTrue(driver.getTitle().startsWith("teste de software")); driver.close(); } * Espefica onde está o Chrome driver * Instancia a classe que interage com o browser Selenium Webdriver ● Primeiro Teste @Test public void test01() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://www.google.com.br/"); WebElement searchInput = driver.findElement( By.name("q") ); searchInput.sendKeys("teste de software"); searchInput.submit(); WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("teste"); } }); assertTrue(driver.getTitle().startsWith("teste de software")); driver.close(); } * Espefica o timeout implícito que o selenium espera quando tenta recuperar um elemento via findElement(..) Selenium Webdriver ● Primeiro Teste @Test public void test01() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://www.google.com.br/"); WebElement searchInput = driver.findElement( By.name("q") ); searchInput.sendKeys("teste de software"); searchInput.submit(); WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("teste"); } }); assertTrue(driver.getTitle().startsWith("teste de software")); driver.close(); } * vai para a página * busca pelo elemento HTML com name igual a “q” * preenche o campo com uma string * envia o formulário Selenium Webdriver ● Primeiro Teste @Test public void test01() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); driver.get("https://www.google.com.br/"); WebElement searchInput = driver.findElement( By.name("q") ); searchInput.sendKeys("teste de software"); searchInput.submit(); WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("teste"); } }); assertTrue(driver.getTitle().startsWith("teste de software")); driver.close(); } * para verificar se a busca foi realizada, vamos checar o título da página * precisamos esperar pelo elemento para que ele apareça Selenium Webdriver ● Primeiro Teste @Test public void test01() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://www.google.com.br/"); WebElement searchInput = driver.findElement( By.name("q") ); searchInput.sendKeys("teste de software"); searchInput.submit(); WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("teste"); } }); assertTrue(driver.getTitle().startsWith("teste de software")); driver.close(); } * faço uma assertiva do JUnit, verificando se o título da página começa com a string fornecida. * fecho a conexão (fecha o browser) Selenium Webdriver ● Como identificar os elementos (no Chrome) – TagName, id, name, Xpath, ... Botão direito no componente de interesse → inspecionar Selenium Webdriver ● Pegando a expressão em XPath Selenium Webdriver ● Github @Test public void test02() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://github.com/"); WebElement signUpButton = driver.findElement( By.xpath("_________________") ); signUpButton.click(); //check msg: "There were problems creating your account." WebElement errorMsg = driver.findElement( By.xpath("___________") ); assertEquals("There were problems creating your account.", errorMsg.getText().trim()); //check msg: "Login can't be blank" WebElement errorMsg02 = driver.findElement( By.xpath("___________") ); assertEquals("Login can't be blank", errorMsg02.getText().trim()); //fill the username WebElement username = driver.findElement( By.id("____________") ); username.sendKeys("andreendo22"); //click on button "create account" WebElement caButton = driver.findElement( By.id("_____________") ); caButton.click(); try{ errorMsg02 = driver.findElement( By.xpath("//*[@id=\"signup-form\"]/dl[1]/dd[2]") ); fail(); } catch(NoSuchElementException e) { } driver.close(); } Selenium Webdriver ● Github @Test public void test02() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://github.com/"); WebElement signUpButton = driver.findElement( By.xpath("/html/body/div[4]/div[1]/div/div/div[2]/div[1]/form/button") ); signUpButton.click(); //check msg: "There were problems creating your account." WebElement errorMsg = driver.findElement( By.xpath("//*[@id=\"signup-form\"]/div[2]") ); assertEquals("There were problems creating your account.", errorMsg.getText().trim()); //check msg: "Login can't be blank" WebElement errorMsg02 = driver.findElement( By.xpath("//*[@id=\"signup-form\"]/dl[1]/dd[2]") ); assertEquals("Login can't be blank", errorMsg02.getText().trim()); //fill the username WebElement username = driver.findElement( By.id("user_login") ); username.sendKeys("andreendo22"); //click on button "create account" WebElement caButton = driver.findElement( By.id("signup_button") ); caButton.click(); try{ errorMsg02 = driver.findElement( By.xpath("//*[@id=\"signup-form\"]/dl[1]/dd[2]") ); fail(); } catch(NoSuchElementException e) { } driver.close(); } Selenium Webdriver ● IMC @Test public void test03() { System.setProperty("webdriver.chrome.driver", "/home/utfpr/install/chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get("http://www.calcule.net/imc.calculo.indice.de.massa.corporal.a.php"); WebElement altura = driver.findElement( By.id("___") ); altura.sendKeys("180"); WebElement peso = driver.findElement( By.id("___") ); peso.sendKeys("7000"); Select sexo = new Select( driver.findElement( By.name("___") ) ); sexo.selectByVisibleText("____"); WebElement calcButton = driver.findElement( By.name("___") ); calcButton.click(); WebElement resposta = driver.findElement( By.xpath("//*[@id=\"conteudo3\"]/table/tbody/tr/td[3]/p[4]/span/b[5]") ); assertEquals("Normal", resposta.getText().trim()); driver.close(); } Bibliografia ● [Pfleeger07] S. L. Pfleeger, “Engenharia de Software: Teoria e Prática”, 2007. ● [Pressman11] R. S. Pressman, “Engenharia de Software: uma abordagem profissional”, 2011. ● [Sommerville03] I. Sommerville, “Engenharia de Software”, 2003. ● [Brooks87] “No Silver Bullet: Essence and Accidents of Software Engineering”, 1987. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1663532 ● [IEEE90] “IEEE Standard Glossary of Software Engineering Terminology”, 1990. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=159342 Bibliografia ● [Myers] G. J. Myers, T. Badgett, C. Sandler, “The art of software testing”, 2012. ● [Pezze] M. Pezze, M. Young, “Teste e análise de software: Processos, princípios e técnicas”, 2008. ● [DMJ07] DELAMARO, Márcio Eduardo; MALDONADO, José Carlos; JINO, Mario. Introdução ao teste de software. Rio de Janeiro, RJ: Elsevier, 2007. 394 p. ISBN 9788535226348. ● [UUU] Materiais didáticos elaborados pelos grupos de engenharia de software do ICMC-USP, DC-UFSCAR e UTFPR-CP. Bibliografia ● http://startingwithseleniumwebdriver.blogspot.com.br/201 3/11/here-we-try-to-configure-selenium-web.html ● .. Slide 1 Slide 2 Slide 3 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31
Compartilhar