Skip to content

Commit 89c090b

Browse files
Merge pull request #1 from AndressaKarla/refatoracoes
Refatoracoes
2 parents c741862 + ff79453 commit 89c090b

9 files changed

+93
-28
lines changed

.github/workflows/workflow-testes-automatizados-web-front-serve-rest-playwright.yml

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
name: Pipeline Testes Automatizados Web Front ServeRest Playwright
2+
3+
# executa o workflow toda vez que for realizado um push ou pull-request no repositório
24
on:
35
push:
46
branches: [ "main" ]
@@ -16,17 +18,18 @@ jobs:
1618
- name: Passo 1 - Obter cópia do código-fonte do repositório
1719
uses: actions/checkout@v3
1820

19-
- name: Passo 2 - Redirecionar o conteúdo de "secrets.LOGIN_ENV" para o arquivo "login.json"
21+
- name: Passo 2 - Redirecionar os conteúdos de "secrets.LOGIN_ENV", "secrets.USUARIO_ENV", para os arquivos "login.json", "usuario.json", etc
2022
run: |
2123
echo '${{ secrets.LOGIN_ENV }}' > ./tests/support/fixtures/login.json
24+
echo '${{ secrets.USUARIO_ENV }}' > ./tests/support/fixtures/usuario.json
2225
2326
- name: Passo 3 - Instalar node versão 18
2427
uses: actions/setup-node@v3
2528
with:
2629
node-version: 18
2730

2831
- name: Passo 4 - Instalar dependências do projeto
29-
# forçar, mesmo tendo possíveis conflitos, a instalação das dependências do projeto do arquivo "package.json
32+
# forçar, mesmo tendo possíveis conflitos, a instalação das dependências do projeto do arquivo "package.json"
3033
run: npm install --force
3134

3235
- name: Passo 5 - Instalar navegadores do Playwright

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Projeto de Testes Automatizados Web | Javascript | Playwright | GitHub Actions :test_tube:
33
---
44
# :information_source: Introdução
5-
Esse projeto "testes-automatizados-web-front-serve-rest_playwright-javascript" é executado em um ambiente de desenvolvimento no ["front"](https://front.serverest.dev) do ["ServeRest"](https://github.com/ServeRest) que simula uma loja virtual, adaptado para o curso ["Playwright eXpress"](https://qax.com.br/pt/cursos/playwright-express) da ["QAx"](https://qax.com.br/pt) e desenvolvido com o objetivo de me aprofundar um pouco mais nos estudos sobre testes automatizados web em Javascript e Page Objects nas ferramentas Playwright e GitHub Actions.
5+
Me baseei e adaptei parte do que foi ensinado nos cursos ["Playwright eXpress"](https://www.udemy.com/course/playwright-express) e ["Playwright Zombie Edition"](https://www.udemy.com/course/playwright-zombie) da ["QAx"](https://www.udemy.com/user/weare-qax) para esse projeto "testes-automatizados-web-front-serve-rest_playwright-javascript" que é executado em um ambiente de desenvolvimento no ["front"](https://front.serverest.dev) do ["ServeRest"](https://github.com/ServeRest) que simula uma loja virtual, e que foi desenvolvido com o objetivo de me aprofundar um pouco mais nos estudos sobre testes automatizados web em Javascript e PageObjects nas ferramentas Playwright e GitHub Actions.
66

77

88
---

package.json

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
{
22
"name": "testes-automatizados-web-front-serve-rest_playwright-javascript",
33
"version": "1.0.0",
4-
"description": "",
5-
"main": "index.js",
6-
"scripts": {},
7-
"keywords": [],
8-
"author": "",
4+
"description": "Projeto de Testes Automatizados E2E no front e API REST do ServeRest em Playwright e Javascript",
5+
"main": "playwright.config.js",
6+
"scripts": {
7+
"pw:ui": "playwright test --ui",
8+
"pw:ui:local": "ENV environment=local playwright test --ui",
9+
"test": "playwright test --project=chromium",
10+
"test:local": "ENV environment=local playwright test --project=chromium",
11+
"test:headed": "playwright test --project=chromium --headed",
12+
"test:local:headed": "ENV environment=local playwright test --project=chromium --headed"
13+
},
14+
"author": "Andressa Karla",
915
"license": "ISC",
1016
"devDependencies": {
1117
"@playwright/test": "^1.42.1"

playwright.config.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ module.exports = defineConfig({
1313
timeout: 5000
1414
},
1515

16-
fullyParallel: true,
16+
fullyParallel: false,
1717
forbidOnly: !!process.env.CI,
1818
retries: process.env.CI ? 2 : 0,
1919
workers: process.env.CI ? 1 : undefined,
20-
reporter: 'html',
20+
reporter: [['html', { open: 'never' }]],
2121

2222
use: {
2323
actionTimeout: 0,
24-
baseURL: baseURLFront,
24+
baseURL: baseURIAPI,
2525

2626
viewport: {
2727
width: 1280,
@@ -37,8 +37,11 @@ module.exports = defineConfig({
3737
projects: [
3838
{
3939
name: 'chromium',
40-
use: { ...devices['Desktop Chrome'] },
40+
use: {
41+
...devices['Desktop Chrome'],
42+
baseURL: baseURLFront
43+
},
4144
}
4245
]
43-
});
46+
})
4447

tests/login-entrar.spec.js

+25-11
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,39 @@
11
const { test, expect } = require('@playwright/test')
22
const { LoginPage } = require('./pages/login-page')
33
const { HomePage } = require('./pages/home-page')
4+
const { Api } = require('./support/api/api')
45
const { carregarFixture } = require('./support/helpers')
56

7+
/*
8+
Funcionalidade: Tela Login - Botão Entrar
9+
Como usuário da Tela Login do front do ServeRest
10+
Quero clicar no Botão Entrar
11+
Para validar o comportamento da funcionalidade
12+
*/
13+
614
test.describe('Funcionalidade: Tela Login - Botão Entrar', () => {
7-
let loginFixture, loginPage, homePage
8-
9-
test.beforeEach( async ({ page }) => {
10-
loginFixture = await carregarFixture('login')
11-
loginPage = new LoginPage(page)
12-
homePage = new HomePage(page)
13-
await loginPage.acessarBaseURLFront()
14-
})
15+
let usuarioFixture, apiRequest, loginFixture, loginPage, homePage
16+
17+
test.beforeAll(async ({ request }) => {
18+
usuarioFixture = await carregarFixture('usuario')
19+
apiRequest = new Api(request)
20+
await apiRequest.obterPorEmailEincluirUsuarioAdmin(usuarioFixture.adminValido.nomeValido, usuarioFixture.adminValido.emailValido, usuarioFixture.adminValido.senhaValida)
21+
})
22+
23+
test.beforeEach(async ({ page }) => {
24+
loginFixture = await carregarFixture('login')
25+
loginPage = new LoginPage(page)
26+
homePage = new HomePage(page)
27+
await loginPage.acessarBaseURLFront()
28+
})
1529

1630
test.describe('Cenário: Validar Login usuário administrador', () => {
1731
test('Então deverá apresentar a tela Home com o texto Bem Vindo e com o texto Este é seu sistema para administrar seu ecommerce', async ({ page }) => {
1832
await loginPage.realizarLoginBotaoEntrar(loginFixture.adminValido.emailValido, loginFixture.adminValido.senhaValida)
19-
33+
2034
await page.waitForURL('admin/home')
2135
await expect(page).toHaveURL('admin/home')
22-
36+
2337
await expect(homePage.textoBemVindo).toHaveText(/Bem Vindo/)
2438
await expect(homePage.textoSistemaAdministrarEcommerce).toHaveText('Este é seu sistema para administrar seu ecommerce.')
2539
})
@@ -35,7 +49,7 @@ test.describe('Funcionalidade: Tela Login - Botão Entrar', () => {
3549
test.describe(`Esquema do Cenário: Validar Login usuários inválidos: ${ex.email} e ${ex.senha}`, async () => {
3650
test(`Então na tela Login deverá apresentar a mensagem: ${ex.mensagem}`, async () => {
3751
await loginPage.realizarLoginBotaoEntrar(loginFixture.invalido[ex.email], loginFixture.invalido[ex.senha])
38-
52+
3953
await expect(loginPage.formLogin).toContainText(ex.mensagem)
4054
})
4155
})

tests/support/api/api.js

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { expect } from '@playwright/test'
2+
import playwrightConfig from '../../../playwright.config'
3+
4+
class Api {
5+
constructor(request) {
6+
this.request = request
7+
this.baseUri = playwrightConfig.use.baseURL
8+
}
9+
10+
async obterPorEmailEincluirUsuarioAdmin(nomeSobrenome, email, senha) {
11+
const getEmailUsuarioAdmin = await this.request.get(`${this.baseUri}/usuarios?email=${email}`)
12+
const retornoGetEmailUsuarioAdmin = JSON.parse(await getEmailUsuarioAdmin.text())
13+
14+
if (retornoGetEmailUsuarioAdmin.quantidade == 0) {
15+
const postUsuarioAdmin = await this.request.post(`${this.baseUri}/usuarios`, {
16+
data: {
17+
nome: nomeSobrenome,
18+
email: email,
19+
password: senha,
20+
administrador: "true"
21+
}
22+
})
23+
24+
expect(postUsuarioAdmin.ok()).toEqual(true)
25+
}
26+
}
27+
}
28+
29+
module.exports = { Api: Api }
30+
+4-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"adminValido": {
3-
"emailValido": "informar-email-usuario-admin-valido@dominio.com",
4-
"senhaValida": "informar-senha-usuario-admin-valido"
3+
"emailValido": "informar-email-usuario-admin-valido@qa.com",
4+
"senhaValida": "informar-mesma-senha-usuario-admin-valido-fixture-usuario"
55
},
66
"invalido": {
77
"emailInvalidoVazio": "deixar-apenas-as-aspas-duplas",
88
"senhaInvalidaVazia": "deixar-apenas-as-aspas-duplas",
9-
"emailInvalidoDominioSemPonto": "informar-email-usuario-invalido-dominio-sem-ponto@dominio",
9+
"emailInvalidoDominioSemPonto": "informar-email-usuario-invalido-dominio-sem-ponto@outlook",
1010
"senhaValida": "informar-senha-usuario-valido",
11-
"emailInvalidoNaoCadastrado": "informar-email-usuario-invalido-nao-cadastrado@dominio.com",
11+
"emailInvalidoNaoCadastrado": "informar-email-usuario-invalido-nao-cadastrado@gmail.com",
1212
"senhaInvalidaNaoCadastrada": "informar-senha-usuario-invalido-nao-cadastrada"
1313
}
1414
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"adminValido": {
3+
"nomeValido": "informar-nome-usuario-admin-valido",
4+
"emailValido": "[email protected]",
5+
"senhaValida": "informar-mesma-senha-usuario-admin-valido-fixture-login"
6+
}
7+
}

tests/support/helpers.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { expect } from '@playwright/test'
2+
13
const carregarFixture = async (nomeArquivo) => {
24
const fixture = require(`./fixtures/${nomeArquivo}`)
35
return fixture

0 commit comments

Comments
 (0)