Cvičení – místní spuštění testů uživatelského rozhraní a kanálu
Než Andy a Amita spustí testy v kanálu, chtějí ověřit, že nové testy uživatelského rozhraní dělají to, co by měly. V této části si projdete spuštěním testů uživatelského rozhraní Selenium nejprve místně a potom v kanálu.
Psaní automatizovaných testů je iterativní proces, stejně jako psaní jakéhokoli jiného typu kódu. U vlastních aplikací budete pravděpodobně muset vyzkoušet několik přístupů, projděte si referenční dokumentaci a ukázkový kód a opravte chyby sestavení.
Volitelné: Instalace ovladače Selenium pro Microsoft Edge
Pokud chcete zobrazit testy spuštěné místně v Microsoft Edgi, postupujte podle této části.
Balíček NuGet pro Chrome a Firefox nainstaluje software ovladače v adresáři bin spolu s kompilovaným testovacím kódem. V případě Edge musíte ovladač nainstalovat ručně. Postup:
Nainstalujte Microsoft Edge.
Otevřete Edge a přejděte na
edge://settings/help
. Poznamenejte si číslo verze. Tady je příklad:Přejděte na stránku stažení ovladače Microsoft Edge a stáhněte ovladač, který odpovídá číslu verze Edge. Tady je příklad:
Extrahujte soubor .zip do adresáře bin/Release/net6.0 v adresáři Tailspin.SpaceGame.Web.UITests projektu. Pokud tyto adresáře neexistují, vytvořte je.
V systému macOS možná budete muset aktualizovat zásady systému, aby bylo možné spustit nástroj msedgedriver . Uděláte to tak, že v editoru Visual Studio Code z terminálu spustíte následující spctl
příkaz:
spctl --add Tailspin.SpaceGame.Web.UITests/bin/Release/net6.0/msedgedriver
Export proměnných prostředí
Později v tomto modulu spustíte testy Selenium na Windows Serveru 2019. Dokumentace uvádí software, který je pro vás předinstalovaný.
V části Selenium Web Drivers jsou uvedeny verze ovladačů Selenium, které jsou k dispozici pro Chrome, Firefox a Edge. Tady je příklad:
Pro každý ovladač máte proměnnou prostředí, která se mapuje na umístění tohoto ovladače. Například ChromeWebDriver
se mapuje na umístění ovladače Chrome.
Kód testů jednotek je již nastavený na čtení těchto proměnných prostředí. Tyto proměnné říkají Selenium, kde najít spustitelné soubory ovladače. Pokud chcete testy jednotek spustit místně, musíte exportovat stejné proměnné prostředí.
V editoru Visual Studio Code přejděte do terminálu. Potom spusťte tyto příkazy. Nahraďte zobrazenou cestu úplnou cestou k projektu mslearn-tailspin-spacegame-web-deploy .
Důležité
Nezapomeňte tyto příkazy spustit a nastavit proměnné prostředí ve stejném okně terminálu, které používáte ke spuštění testů.
driverDir="C:\Users\user\mslearn-tailspin-spacegame-web-deploy\Tailspin.SpaceGame.Web.UITests\bin\Release\net6.0"
export ChromeWebDriver=$driverDir
export EdgeWebDriver=$driverDir
export GeckoWebDriver=$driverDir
Místní spuštění testů uživatelského rozhraní
Metoda Setup
v HomePageTest.cs přejde na domovskou stránku Space Game poté, co nastaví proměnnou člena driver
.
I když byste mohli pevně zakódovat adresu URL webu, zde jsme přečetli adresu URL z proměnné prostředí s názvem SITE_URL
. Tímto způsobem můžete testy spouštět vícekrát na různých adresách URL.
// Navigate to the site.
// The site name is stored in the SITE_URL environment variable to make
// the tests more flexible.
string url = Environment.GetEnvironmentVariable("SITE_URL");
driver.Navigate().GoToUrl(url + "/");
Vzhledem k tomu, že jste ještě nenasadili web Space Game do služby App Service Environment, použijete web, který hostuje Microsoft, ke spuštění testů místně.
Místní spuštění testů:
V editoru Visual Studio Code přejděte do integrovaného terminálu a otevřete nové okno terminálu.
V novém okně terminálu spusťte následující příkazy.
dotnet build --configuration Release dotnet run --configuration Release --no-build --project Tailspin.SpaceGame.Web
Poznamenejte si odkaz na místní web, v tomto příkladu je
http://localhost:5000
to .Přepněte zpět do okna terminálu, kde jste nastavili proměnné prostředí v předchozím kroku, a ujistěte se, že jste v kořenovém adresáři projektu. Tady je příklad:
cd ~/mslearn-tailspin-spacegame-web-deploy
Exportujte proměnnou
SITE_URL
prostředí. Použijte místně spuštěný odkaz, který jste získali z předchozího kroku.export SITE_URL="http://localhost:5000"
Tato proměnná odkazuje na web Space Game , který microsoft hostuje.
Spusťte testy uživatelského rozhraní.
dotnet test --configuration Release Tailspin.SpaceGame.Web.UITests
Tento kód spustí testy umístěné v projektu Tailspin.SpaceGame.Web.UITests .
Při spuštění testů se zobrazí jeden nebo více prohlížečů. Selenium řídí každý prohlížeč a řídí se testovacími kroky, které jste definovali.
Poznámka:
Nemějte obavy, pokud se nezobrazí všechny tři prohlížeče. Testy se například nezobrazí v Chromu, pokud nemáte nainstalovaný Chrome nebo nemáte nekompatibilní verzi. Když uvidíte jenom jeden prohlížeč, získáte jistotu, že vaše testy fungují. V praxi můžete v místním vývojovém prostředí nastavit všechny prohlížeče, se kterými chcete testovat. Toto nastavení vám umožní před spuštěním testů v kanálu ověřit, že se testy chovají podle očekávání v každé konfiguraci.
V terminálu sledujte výstup každého testu. Všimněte si také souhrnu testovacího spuštění na konci.
Tento příklad ukazuje, že z devíti testů bylo všech devět úspěšných a nulových testů bylo vynecháno:
Passed! - Failed: 0, Passed: 9, Skipped: 0, Total: 9, Duration: 5 s
Přidání proměnné SITE_URL do Azure Pipelines
Dříve jste proměnnou SITE_URL
prostředí nastavili místně tak, aby testy věděly, kam mají jednotlivé prohlížeče odkazovat. Tuto proměnnou můžete přidat do Azure Pipelines. Proces se podobá tomu, jak jste přidali proměnné pro instance služby App Service. Při spuštění agenta se tato proměnná automaticky exportuje do agenta jako proměnná prostředí.
Před aktualizací konfigurace kanálu teď přidáme proměnnou kanálu. Postup:
V Azure DevOps přejděte do space game – web – funkční testy projektu.
V části Pipelines (Kanály) vyberte Library (Knihovna).
Vyberte skupinu proměnných vydané verze.
V části Proměnné vyberte + Přidat.
Jako název proměnné zadejte SITE_URL. Jako hodnotu zadejte adresu URL instance služby App Service, která odpovídá vašemu testovacímu prostředí, například http://tailspin-space-game-web-test-10529.azurewebsites.net.
V horní části stránky vyberte Uložit a uložte proměnnou do kanálu.
Vaše skupina proměnných by měla vypadat přibližně takto:
Úprava konfigurace kanálu
V této části upravíte konfiguraci kanálu tak, aby spouštěla testy uživatelského rozhraní Selenium během fáze testování .
V editoru Visual Studio Code otevřete soubor azure-pipelines.yml . Potom upravte soubor takto:
Tip
Tento soubor obsahuje několik změn, proto doporučujeme nahradit celý soubor tím, co vidíte tady.
trigger: - '*' variables: buildConfiguration: 'Release' dotnetSdkVersion: '6.x' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '$(System.DefaultWorkingDirectory)/**/Tailspin.SpaceGame.Web.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Test' displayName: 'Deploy to the test environment' dependsOn: Dev jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: test variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameTest)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - job: RunUITests dependsOn: Deploy displayName: 'Run UI tests' pool: vmImage: 'windows-2019' variables: - group: 'Release' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--configuration $(buildConfiguration)' projects: '$(System.DefaultWorkingDirectory)/**/*UITests.csproj' - task: DotNetCoreCLI@2 displayName: 'Run unit tests - $(buildConfiguration)' inputs: command: 'test' arguments: '--no-build --configuration $(buildConfiguration)' publishTestResults: true projects: '$(System.DefaultWorkingDirectory)/**/*UITests.csproj' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Test jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: staging variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Soubor obsahuje tyto tři změny:
Proměnná
dotnetSdkVersion
se přesune na začátek souboru, aby k ní mělo přístup více fází. Tady fáze sestavení a testovací fáze vyžadují tuto verzi .NET Core.Fáze sestavení publikuje jako artefakt sestavení pouze balíček webu Space Game . Dříve jste artefakty publikovali takto:
- task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true
Tato úloha vygeneruje dva artefakty sestavení: balíček webu Space Game a kompilované testy uživatelského rozhraní. Testy uživatelského rozhraní sestavíme během fáze sestavení, abychom zajistili, že se kompilují během testovací fáze, ale nemusíme publikovat zkompilovaný testovací kód. Při spuštění testů ho znovu sestavíme během testovací fáze.
Fáze testování obsahuje druhou úlohu, která sestaví a spustí testy. Tato úloha se podobá úloze, kterou jste použili v testech kvality v kanálu buildu pomocí modulu Azure Pipelines . V daném modulu jste spustili testy NUnit, které ověřily funkce filtrování tabulky výsledků.
Vzpomeňte si, že úloha nasazení je speciálním typem úlohy, která hraje důležitou roli ve fázích nasazení. Druhá úloha je normální úloha, která spouští testy Selenium na agentu Windows Serveru 2019. I když k sestavení aplikace používáme agenta Pro Linux, používáme agenta Pro Windows ke spuštění testů uživatelského rozhraní. Používáme agenta pro Windows, protože Amita spouští ruční testy ve Windows a to většina zákazníků používá.
Úloha
RunUITests
závisí na úloze,Deploy
aby se zajistilo, že se úlohy spouštějí ve správném pořadí. Web nasadíte do služby App Service před spuštěním testů uživatelského rozhraní. Pokud tuto závislost nezadáte, úlohy v rámci fáze se můžou spouštět v libovolném pořadí nebo běžet paralelně.
V integrovaném terminálu přidejte do indexu azure-pipelines.yml , potvrďte změny a nasdílejte větev do GitHubu.
git add azure-pipelines.yml git commit -m "Run Selenium UI tests" git push origin selenium
Sledování spouštění testů v Azure Pipelines
Tady se podívejte na spuštění kanálu. Kanál spouští testy uživatelského rozhraní Selenium během fáze testování .
V Azure Pipelines přejděte do sestavení a sledujte ho při spuštění.
Během sestavování se zobrazí automatizované testy spuštěné po nasazení webu.
Po dokončení sestavení přejděte na stránku souhrnu.
Všimněte si, že nasazení a testy uživatelského rozhraní byly úspěšně dokončeny.
V horní části stránky si všimněte souhrnu.
Všimněte si, že artefakt sestavení pro web Space Game je publikován stejně jako vždy. Všimněte si také části Testy a pokrytí , které ukazují, že testy Selenium prošly.
Výběrem souhrnu testu zobrazíte úplnou sestavu.
Sestava ukazuje, že všechny devět testů prošly. Mezi tyto testy patří tři testy ve třech prohlížečích.
Pokud některý test selže, získáte podrobné výsledky selhání. Odtud můžete prozkoumat zdroj selhání, opravit ho místně a pak odeslat potřebné změny, aby testy prošly kanálem.
Amita: Tato automatizace je vzrušující! Teď mám testy uživatelského rozhraní, které můžu spustit v kanálu. Testy nám v dlouhodobém horizontu opravdu ušetří čas. Mám také vzor, který je třeba sledovat, aby se přidaly další testy. Nejlepší z toho je, že testy uživatelského rozhraní nám dávají větší důvěru v kvalitu kódu.
Andy: To je pravda. Nezapomeňte, že testy, které opakovaně spouštíte ručně, jsou vhodnými kandidáty pro automatizaci. Hodně štěstí přidává další. Pokud se zaseknete nebo potřebujete revidovat kód, víte, kde mě najít.