Gyakorlat – A felhasználói felületi tesztek futtatása helyileg és a folyamatban

Befejeződött

Mielőtt Andy és Amita futtatják a teszteket a folyamatban, ellenőrizni szeretnék, hogy az új felhasználói felületi tesztjeik a kívánt módon működnek-e. Ebben a szakaszban a Selenium felhasználói felületi tesztjeinek helyi, majd a folyamatbeli futtatásával fogja követni.

Az automatizált tesztek írása iteratív folyamat, akárcsak bármilyen más típusú kód írása. Saját alkalmazásai esetében valószínűleg ki kell próbálnia néhány módszert, hivatkoznia kell a dokumentációra és a példakódra, és ki kell javítania a buildelési hibákat.

Nem kötelező: A Microsoft Edge szelénillesztőjének telepítése

Kövesse ezt a szakaszt, ha azt szeretné, hogy a tesztek helyileg fussanak a Microsoft Edge-en.

A NuGet-csomag a Chrome-hoz és a Firefoxhoz a bin könyvtár alá telepíti az illesztőprogram-szoftvert a lefordított tesztkód mellett. Az Edge esetében manuálisan kell telepítenie az illesztőprogramot. Ehhez tegye a következőket:

  1. Telepítse a Microsoft Edge-et.

  2. Nyissa meg az Edge-t, és lépjen a következőre edge://settings/help: Jegyezze fel a verziószámot. Példa:

    A screenshot of the Microsoft Edge setting page, showing the version number.

  3. Lépjen a Microsoft Edge-illesztőprogram letöltési oldalára, és töltse le az Edge verziószámának megfelelő illesztőprogramot. Példa:

    A screenshot of the Downloads section of the Microsoft Edge Driver page showing the matching driver version.

  4. Bontsa ki a .zip fájlt a projekt Tailspin.SpaceGame.Web.UITests könyvtárában lévő bin/Release/net6.0 könyvtárba. Ha nem léteznek, hozza létre ezeket a könyvtárakat.

MacOS rendszeren előfordulhat, hogy frissítenie kell a rendszerházirendet az msedgedriver futtatásának engedélyezéséhez. Ehhez futtassa a következő spctl parancsot a Visual Studio Code-ban a terminálról:

spctl --add Tailspin.SpaceGame.Web.UITests/bin/Release/net6.0/msedgedriver

Környezeti változók exportálása

A modul későbbi részében szelénteszteket fog futtatni a Windows Server 2019-en. A dokumentáció felsorolja az Előre telepített szoftvereket.

A Selenium Web Drivers szakasz felsorolja a Chrome, a Firefox és az Edge rendszerhez elérhető szelénillesztő-verziókat. Példa:

A screenshot showing the documentation for the installed Selenium drivers on the build agent.

Minden illesztőprogramhoz rendelkezik a környezeti változóval, amely az illesztőprogram helyéhez van leképezve. Leképezi például ChromeWebDriver a Chrome-illesztőprogram helyét.

Az egységtesztek kódja már be van állítva ezeknek a környezeti változóknak az olvasására. Ezek a változók jelzik a Seleniumnak, hogy hol találhatók az illesztőprogram végrehajtható fájljai. Az egységtesztek helyi futtatásához ugyanazokat a környezeti változókat kell exportálnia.

A Visual Studio Code-ból lépjen a terminálra. Ezután futtassa ezeket a parancsokat. Cserélje le a megjelenő útvonalat az mslearn-tailspin-spacegame-web-deploy projekt teljes elérési útjára.

Fontos

Mindenképpen futtassa ezeket a parancsokat, és állítsa be a környezeti változókat ugyanabban a terminálablakban, amelyet a tesztek futtatásához használ.

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

A felhasználói felületi tesztek helyi futtatása

A Setup HomePageTest.cs metódusa a tagváltozó beállítása driver után a Space Game kezdőlapjára navigál.

Bár a webhely URL-címének kódját is meg tudta volna keményen kódolva, itt egy nevesített SITE_URLkörnyezeti változó url-címét olvashatjuk. Így a teszteket többször is futtathatja különböző URL-címeken.

// 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 + "/");

Mivel még nem telepítette a Space Game webhelyet az App Service-környezetben, a Microsoft által üzemeltetett webhelyet fogja használni a tesztek helyi futtatásához.

A tesztek helyi futtatása:

  1. A Visual Studio Code-ban lépjen az integrált terminálra, és nyisson meg egy új terminálablakot.

  2. Futtassa az alábbi parancsokat az új terminálablakban.

    dotnet build --configuration Release
    dotnet run --configuration Release --no-build --project Tailspin.SpaceGame.Web
    
  3. Jegyezze fel a helyi webhely hivatkozását, ebben a példában az.http://localhost:5000

  4. Váltson vissza arra a terminálablakra, ahol az előző lépésben beállította a környezeti változókat, és győződjön meg arról, hogy a projekt gyökérkönyvtárában van. Példa:

    cd ~/mslearn-tailspin-spacegame-web-deploy
    
  5. Exportálja a környezeti változót SITE_URL . Használja az előző lépésben kapott helyileg futó hivatkozást.

    export SITE_URL="http://localhost:5000"
    

    Ez a változó a Microsoft által üzemeltetett Space Game webhelyre mutat.

  6. Futtassa a felhasználói felületi teszteket.

    dotnet test --configuration Release Tailspin.SpaceGame.Web.UITests
    

    Ez a kód a Tailspin.SpaceGame.Web.UITests projektben található teszteket futtatja .

    A tesztek futtatásakor egy vagy több böngésző jelenik meg. A szelén vezérli az egyes böngészőket, és követi a megadott tesztlépéseket.

    Megjegyzés:

    Ne aggódjon, ha mindhárom böngésző nem jelenik meg. Például nem fogja látni a teszteket a Chrome-on, ha nincs telepítve a Chrome, vagy nem kompatibilis verzióval rendelkezik. Ha csak egy böngészőt lát, biztos lehet abban, hogy a tesztek működnek. A gyakorlatban előfordulhat, hogy a helyi fejlesztési környezetben minden olyan böngészőt be szeretne állítani, amelyet tesztelni szeretne. Ezzel a beállítással ellenőrizheti, hogy a tesztek az egyes konfigurációkban elvárt módon működnek-e, mielőtt futtatja a teszteket a folyamatban.

  7. A terminálból kövesse nyomon az egyes tesztek kimenetét. Jegyezze fel a tesztfuttatás összegzését is a végén.

    Ez a példa azt mutatja, hogy kilenc tesztből mind a kilenc teszt sikeres volt, és a nulla teszt kimaradt:

    Passed!  - Failed:     0, Passed:     9, Skipped:     0, Total:     9, Duration: 5 s 
    

A SITE_URL változó hozzáadása az Azure Pipelineshoz

Korábban helyileg állította be a SITE_URL környezeti változót, hogy a tesztek tudják, hová mutasson az egyes böngészők. Ezt a változót hozzáadhatja az Azure Pipelineshoz. A folyamat hasonló ahhoz, ahogyan változókat adott hozzá az App Service-példányokhoz. Az ügynök futtatásakor a rendszer automatikusan exportálja ezt a változót az ügynökbe környezeti változóként.

Most adhatja hozzá a folyamatváltozót, mielőtt frissítené a folyamatkonfigurációt. Ehhez tegye a következőket:

  1. Az Azure DevOpsban nyissa meg a Space Game – Web – Funkcionális tesztek projektet.

  2. A Folyamatok területen válassza a Kódtár lehetőséget.

  3. Válassza ki a Kiadás változócsoportot.

  4. A Változók csoportban válassza a + Hozzáadás lehetőséget.

  5. A változó nevére írja be a SITE_URL. Értékként adja meg a tesztkörnyezetnek megfelelő App Service-példány URL-címét, példáulhttp://tailspin-space-game-web-test-10529.azurewebsites.net.

  6. A lap tetején válassza a Mentés lehetőséget a változó folyamatba mentéséhez.

    A változócsoportnak a következőhöz kell hasonlítania:

    A screenshot of Azure Pipelines, showing the variable group. The group contains four variables.

A folyamatkonfiguráció módosítása

Ebben a szakaszban úgy módosítja a folyamatkonfigurációt, hogy a tesztelési szakaszban futtassa a szelén felhasználói felületi tesztjeit.

  1. Nyissa meg az azure-pipelines.yml fájlt a Visual Studio Code-ban. Ezután módosítsa a fájlt a következő módon:

    Tipp.

    Ez a fájl néhány módosítást tartalmaz, ezért javasoljuk, hogy cserélje le a teljes fájlt az itt láthatóra.

    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'
    

    A fájl a következő három módosítást tartalmazza:

    • A dotnetSdkVersion változó a fájl tetejére kerül, hogy több szakasz is hozzáférhessen. Itt a buildelési és tesztelési fázishoz a .NET Core ezen verziója szükséges.

    • A Build szakasz csak a Space Game webhelycsomagot teszi közzé buildösszetevőként. Korábban a következőképpen tette közzé az összetevőket:

      - 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
      

      Ez a feladat két buildösszetevőt hoz létre: a Space Game webhelycsomagját és a lefordított felhasználói felületi teszteket. A felhasználói felületi teszteket a buildelési szakaszban készítjük el, hogy biztosan lefordítva legyenek a tesztelési szakaszban, de nem kell közzétennünk a lefordított tesztkódot. A teszt futtatásakor a tesztszakaszban újra elkészítjük.

    • A tesztszakasz tartalmaz egy második feladatot, amely létrehozza és futtatja a teszteket. Ez a feladat hasonlít az Azure Pipelines-modullal a buildelési folyamat Minőségi tesztjeinek futtatása során használt feladathoz . Ebben a modulban NUnit-teszteket futtatott, amelyek igazolták a ranglista szűrési funkcióját.

      Ne feledje, hogy az üzembehelyezési feladat egy speciális feladattípus, amely fontos szerepet játszik az üzembe helyezési fázisokban. A második feladat egy normál feladat, amely egy Windows Server 2019-ügynök szeléntesztjeit futtatja. Bár az alkalmazás létrehozásához Linux-ügynököt használunk, itt egy Windows-ügynökkel futtatjuk a felhasználói felületi teszteket. Windows-ügynököt használunk, mert az Amita manuális teszteket futtat a Windowson, és ezt használják a legtöbb ügyfél.

      A RunUITests feladat attól függ, hogy a Deploy feladatok a megfelelő sorrendben futnak-e. A felhasználói felületi tesztek futtatása előtt üzembe helyezi a webhelyet az App Service-ben. Ha nem adja meg ezt a függőséget, a fázison belüli feladatok bármilyen sorrendben futtathatók, vagy párhuzamosan futtathatók.

  2. Az integrált terminálban adja hozzá az azure-pipelines.yml értéket az indexhez, véglegesítse a módosításokat, és küldje el az ágat a GitHubra.

    git add azure-pipelines.yml
    git commit -m "Run Selenium UI tests"
    git push origin selenium
    

A tesztek végigkövetése az Azure Pipelinesban

Itt megtekintheti a folyamat futtatását. A folyamat a tesztelési szakaszban futtatja a szelén felhasználói felületi teszteket.

  1. Az Azure Pipelinesban nyissa meg a buildet, és kövesse nyomon futás közben.

    A buildelés során az automatikus tesztek a webhely üzembe helyezése után futnak.

    A screenshot of Azure Pipelines, showing the running stages.

  2. A build befejezése után lépjen az összefoglaló oldalra.

    A screenshot of Azure Pipelines, showing the completed stages.

    Vegye figyelembe, hogy az üzembe helyezés és a felhasználói felület tesztelése sikeresen befejeződött.

  3. A lap tetejének közelében jegyezze fel az összegzést.

    Vegye figyelembe, hogy a Space Game webhely buildösszetevője ugyanúgy jelenik meg, mint mindig. Jegyezze fel a Tesztek és lefedettség szakaszt is, amely azt mutatja, hogy a szeléntesztek sikeresek.

    A screenshot of Azure Pipelines, showing the test summary.

  4. A teljes jelentés megtekintéséhez válassza ki a teszt összefoglalását.

    A jelentés azt mutatja, hogy mind a kilenc teszt sikeres volt. Ezek a tesztek három tesztet tartalmaznak három böngészőben.

    A screenshot of Azure Pipelines, showing the full test report.

    Ha bármelyik teszt sikertelen, részletes eredményeket kap a hibáról. Innen megvizsgálhatja a hiba forrását, kijavíthatja helyileg, majd leküldheti a szükséges módosításokat, hogy a tesztek áthaladjanak a folyamaton.

Amita: Ez az automatizálás izgalmas! Most már rendelkezem felhasználói felületi tesztekkel, amelyeket futtathatok a folyamatban. A tesztek hosszú távon tényleg időt takarítanak meg. Én is van egy mintát követni, hogy adjunk hozzá további teszteket. A legjobb az, hogy a felhasználói felületi tesztek magabiztosságot adnak a kódminőségünkben.

Andy: Minden igaz. Ne feledje, hogy az ismétlődően manuálisan futtatott tesztek jó jelöltek az automatizálásra. Sok szerencsét hozzá több. Ha elakad, vagy szüksége van egy kód véleményezőre, tudja, hol talál meg.