Alıştırma - Ui testlerini yerel olarak ve işlem hattında çalıştırma

Tamamlandı

Andy ve Amita testlerini işlem hattında çalıştırmadan önce, yeni kullanıcı arabirimi testlerinin gerekenleri yaptığını doğrulamak isterler. Bu bölümde, selenium kullanıcı arabirimi testlerini önce yerel olarak ve ardından işlem hattında çalıştırarak ilerleyeceksiniz.

Otomatikleştirilmiş testler yazmak, aynı diğer kod türleri gibi yinelemeli bir işlemdir. Kendi uygulamalarınız için muhtemelen birkaç yaklaşımı denemeniz, başvuru belgelerine ve örnek koda başvurmanız ve derleme hatalarını düzeltmeniz gerekir.

İsteğe bağlı: Microsoft Edge için Selenium sürücüsünü yükleme

Testleri Microsoft Edge'de yerel olarak çalıştırmak istiyorsanız bu bölümü izleyin.

Chrome ve Firefox için NuGet paketi, derlenen test kodunun yanı sıra bin dizinine sürücü yazılımı yükler. Edge için sürücüyü el ile yüklemeniz gerekir. Yapmak için:

  1. Microsoft Edge'i yükleyin.

  2. Edge'i açın ve adresine edge://settings/helpgidin. Sürüm numarasını not edin. Bir örnek aşağıda verilmiştir:

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

  3. Microsoft Edge Sürücüsü indirmeleri sayfasına gidin ve Edge sürüm numarasıyla eşleşen sürücüyü indirin. Bir örnek aşağıda verilmiştir:

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

  4. .zip dosyasını projenizin Tailspin.SpaceGame.Web.UITests dizininin altındaki bin/Release/net6.0 dizinine ayıklayın. Yoksa bu dizinleri oluşturun.

macOS'ta, msedgedriver'ın çalışmasına izin vermek için sistem ilkenizi güncelleştirmeniz gerekebilir. Bunu yapmak için Visual Studio Code'da terminalden aşağıdaki spctl komutu çalıştırın:

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

Ortam değişkenlerini dışarı aktarma

Bu modülün ilerleyen bölümlerinde Windows Server 2019'da Selenium testleri çalıştıracaksınız. Belgelerde sizin için önceden yüklenmiş olan yazılımlar listelenir.

Selenium Web Sürücüleri bölümünde Chrome, Firefox ve Edge için kullanılabilen Selenium sürücü sürümleri listelenir. Bir örnek aşağıda verilmiştir:

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

Her sürücü için, bu sürücünün konumuna eşleyen ortam değişkenine sahipsiniz. Örneğin, ChromeWebDriver Chrome sürücüsünün konumuna eşler.

Birim testleri kodu, bu ortam değişkenlerini okumak için zaten ayarlanmıştır. Bu değişkenler Selenium'a sürücü yürütülebilir dosyalarını nerede bulacağını söyler. Birim testlerini yerel olarak çalıştırmak için aynı ortam değişkenlerini dışarı aktarmanız gerekir.

Visual Studio Code'dan terminale gidin. Sonra şu komutları çalıştırın. gösterilen yolu, mslearn-tailspin-spacegame-web-deploy projenizin tam yoluyla değiştirin.

Önemli

Bu komutları çalıştırdığınızdan ve ortam değişkenlerini testleri çalıştırmak için kullandığınız terminal penceresinde ayarladığınızdan emin olun.

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

Ui testlerini yerel olarak çalıştırma

Setup HomePageTest.cs dosyasındaki yöntemi, üye değişkenini ayarladıktan driver sonra Space Game giriş sayfasına gider.

Site URL'sini sabit kodlayabilirsiniz ancak burada adlı SITE_URLbir ortam değişkeninden URL'yi okuduk. Bu şekilde testleri farklı URL'lerde birden çok kez çalıştırabilirsiniz.

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

Space Game web sitesini henüz App Service ortamınıza dağıtmadığınızdan, testleri yerel olarak çalıştırmak için Microsoft'un barındırdığı siteyi kullanacaksınız.

Testleri yerel olarak çalıştırmak için:

  1. Visual Studio Code'da tümleşik terminale gidin ve yeni bir terminal penceresi açın.

  2. Yeni terminal penceresinde aşağıdaki komutları çalıştırın.

    dotnet build --configuration Release
    dotnet run --configuration Release --no-build --project Tailspin.SpaceGame.Web
    
  3. Bu örnekte http://localhost:5000yerel web sitesi bağlantısını not edin.

  4. Önceki adımda ortam değişkenlerini ayarladığınız terminal penceresine dönün ve projenizin kök dizininde olduğunuzdan emin olun. Bir örnek aşağıda verilmiştir:

    cd ~/mslearn-tailspin-spacegame-web-deploy
    
  5. Ortam değişkenini dışarı aktarın SITE_URL . Önceki adımda aldığınız yerel olarak çalışan bağlantıyı kullanın.

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

    Bu değişken, Microsoft'un barındırdığını Space Game web sitesine işaret eder.

  6. Kullanıcı arabirimi testlerini çalıştırın.

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

    Bu kod Tailspin.SpaceGame.Web.UITests projesinde bulunan testleri çalıştırır.

    Testler çalıştırılırken bir veya daha fazla tarayıcı görüntülenir. Selenium her tarayıcıyı denetler ve tanımladığınız test adımlarını izler.

    Dekont

    Üç tarayıcı da görünmüyorsa endişelenmeyin. Örneğin, Chrome yüklü değilse veya uyumsuz bir sürüme sahipseniz Testlerin Chrome'da çalıştığını görmezsiniz. Yalnızca bir tarayıcıyı görmek, testlerinizin çalıştığından size güven vermenize yardımcı olur. Uygulamada, yerel geliştirme ortamınızda test etmek istediğiniz tüm tarayıcıları ayarlamak isteyebilirsiniz. Bu kurulum, işlem hattında testlerinizi çalıştırmadan önce testlerinizin her yapılandırmada beklendiği gibi davrandığını doğrulamanıza olanak tanır.

  7. Terminalden her testin çıkışını izleyin. Ayrıca, sonundaki test çalıştırması özetini de not edin.

    Bu örnekte dokuz testten dokuzunun da başarılı olduğu ve sıfır testin atlandığı gösterilmektedir:

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

SITE_URL değişkenini Azure Pipelines'a ekleme

Daha önce, testlerinizin her tarayıcıyı SITE_URL nereye işaret ettiğini bilmesi için ortam değişkenini yerel olarak ayarlarsınız. Bu değişkeni Azure Pipelines'a ekleyebilirsiniz. bu işlem, App Service örnekleriniz için değişken ekleme yönteminize benzer. Aracı çalıştırıldığında, bu değişken otomatik olarak aracıya ortam değişkeni olarak dışarı aktarılır.

İşlem hattı yapılandırmanızı güncelleştirmeden önce şimdi işlem hattı değişkenini ekleyelim. Yapmak için:

  1. Azure DevOps'ta Space Game - web - İşlevsel testler projenize gidin.

  2. İşlem Hatları'nın altında Kitaplık'ı seçin.

  3. Release değişken grubunu seçin.

  4. Değişkenler'in altında + Ekle'yi seçin.

  5. Değişkeninizin adı için SITE_URL girin. Değeri olarak, gibi http://tailspin-space-game-web-test-10529.azurewebsites.nettest ortamınıza karşılık gelen App Service örneğinin URL'sini girin.

  6. Değişkeninizi işlem hattına kaydetmek için sayfanın üst kısmındaki Kaydet'i seçin.

    Değişken grubunuz şuna benzemelidir:

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

İşlem hattı yapılandırmasını değiştirme

Bu bölümde, test aşamasında Selenium ui testlerinizi çalıştırmak için işlem hattı yapılandırmasını değiştireceksiniz.

  1. Visual Studio Code'da azure-pipelines.yml dosyasını açın. Ardından dosyayı şu şekilde değiştirin:

    Bahşiş

    Bu dosya birkaç değişiklik içerdiğinden, dosyanın tamamını burada gördüklerinizle değiştirmenizi öneririz.

    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'
    

    Dosya şu üç değişikliği içerir:

    • Değişken dotnetSdkVersion , birden çok aşamanın dosyaya erişebilmesi için dosyanın en üstüne taşınır. Burada Derleme aşaması ve Test aşaması bu .NET Core sürümünü gerektirir.

    • Derleme aşaması, derleme yapıtı olarak yalnızca Space Game web sitesi paketini yayımlar. Daha önce yapıtları şu şekilde yayımladığınızda:

      - 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
      

      Bu görev iki derleme yapıtı oluşturur: Space Game web sitesi paketi ve derlenmiş ui testleri. Derleme aşaması sırasında ui testlerini derleyeceğiz ancak derlenmiş test kodunu yayımlamamız gerekmez. Testler çalıştırıldığında Test aşamasında yeniden oluştururuz.

    • Test aşaması, testleri derleyen ve çalıştıran ikinci bir iş içerir. Bu iş, Azure Pipelines kullanarak derleme işlem hattınızda kalite testlerini çalıştırma modülünde kullandığınız iş gibi görünür. Bu modülde, puan tablosunun filtreleme işlevini doğrulayan NUnit testleri çalıştırmıştınız.

      Bir dağıtım işinin, dağıtım aşamalarınızda önemli bir rol oynayan özel bir iş türü olduğunu hatırlayın. İkinci iş, Bir Windows Server 2019 aracısı üzerinde Selenium testlerini çalıştıran normal bir iştir. Uygulamayı derlemek için Bir Linux aracısı kullansak da, burada ui testlerini çalıştırmak için bir Windows aracısı kullanırız. Amita, Windows üzerinde el ile testler çalıştırdığından windows aracısı kullanırız ve çoğu müşteri bunu kullanır.

      İş, RunUITests işlerin doğru sırada çalıştığından emin olmak için işe bağlıdır Deploy . Kullanıcı arabirimi testlerini çalıştırmadan önce web sitesini App Service'e dağıtacaksınız. Bu bağımlılığı belirtmezseniz, aşama içindeki işler herhangi bir sırada çalıştırılabilir veya paralel olarak çalıştırılabilir.

  2. Tümleşik terminalde azure-pipelines.yml dosyasını dizine ekleyin, değişiklikleri işleyin ve dalı GitHub'a gönderin.

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

Azure Pipelines'ın testleri çalıştırmasını izleyin

Burada işlem hattının çalışmasını izlersiniz. İşlem hattı, Test aşaması sırasında Selenium UI testlerini çalıştırır.

  1. Azure Pipelines'da derlemeye gidin ve çalıştırılırken onu takip edin.

    Derleme sırasında, web sitesi dağıtıldıktan sonra otomatikleştirilmiş testlerin çalıştığını görürsünüz.

    A screenshot of Azure Pipelines, showing the running stages.

  2. Derleme tamamlandıktan sonra özet sayfasına gidin.

    A screenshot of Azure Pipelines, showing the completed stages.

    Dağıtım ve kullanıcı arabirimi testlerinin başarıyla tamamlandığını unutmayın.

  3. Sayfanın üst kısmında özete dikkat edin.

    Space Game web sitesi için derleme yapıtının her zaman olduğu gibi yayımlandığını unutmayın. Ayrıca Selenium testlerinin geçtiğini gösteren Testler ve kapsam bölümüne de dikkat edin.

    A screenshot of Azure Pipelines, showing the test summary.

  4. Raporun tamamını görmek için test özetini seçin.

    Rapor, dokuz testin de geçtiğini gösteriyor. Bu testler üç tarayıcıda üç test içerir.

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

    Herhangi bir test başarısız olursa, hatanın ayrıntılı sonuçlarını alırsınız. Buradan, hatanın kaynağını araştırabilir, yerel olarak düzeltebilir ve ardından testlerin işlem hattından geçmesini sağlamak için gerekli değişiklikleri gönderebilirsiniz.

Amita: Bu otomasyon heyecan verici! Artık işlem hattında çalıştırabildiğim kullanıcı arabirimi testlerim var. Testler uzun vadede bize zaman kazandıracak. Ayrıca daha fazla test eklemek için izlemem gereken bir desen var. Hepsinden de iyisi, kullanıcı arabirimi testleri kod kalitemize daha fazla güven verir.

Hepsi doğru. El ile tekrar tekrar çalıştırdığınız testlerin otomasyon için iyi adaylar olduğunu unutmayın. Daha fazlasını eklerken iyi şanslar. Takılırsanız veya bir kod gözden geçirene ihtiyacınız olursa, beni nerede bulabileceğinizi biliyorsunuz.