Yayımlama Test Sonuçları yayımlama

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018-TFS 2015

Not

Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde, derleme ve yayın işlem hatları tanımlar olarak adlandırılır, çalışmalara derlemeler denir, hizmet bağlantılarına hizmet uç noktaları denir, aşamalar ortamlar olarak adlandırılır ve işler aşamalar olarak adlandırılır.

Bu görev, kapsamlı bir test raporlaması Azure Pipelines analiz deneyimi sağlamak için testler yürütülürken test sonuçlarını Azure Pipelines veya TFS'de yayımlar. Istediğiniz test çalıştırıcısı, istediğiniz sonuç biçimini destekleyen kullanabilirsiniz. Desteklenen sonuç biçimleri CTest, JUnit (PHPUnit dahil), NUnit 2, NUnit 3, Visual Studio Test (TRX) ve xUnit 2'yi içerir.

Visual Studio Test görevi ve Dot NetCore CLI görevi gibi diğer yerleşik görevler test sonuçlarını işlem hattında otomatik olarak yayımlarken Ant, Maven ,Mut, Grunt, .NET Core ve Xcode gibi görevler, görev içinde bir seçenek olarak yayımlama sonuçları veya Cobertura ve JaCoCogibi derleme kitaplıkları sağlar. Bu görevlerden herhangi birini kullanıyorsanız, işlem hattında ayrı bir Yayımla Test Sonuçları görevine ihtiyacınız olmaz.

Yayımlanan test sonuçları işlem hattı özetinde Testler sekmesinde görüntülenir ve işlem hattı kalitesini ölçmenize, izlenebilirliği gözden geçirmenize, hataları gidermenize ve hata sahipliğini çalıştırmanıza yardımcı olur.

Aşağıdaki örnekte, test sonuçlarını yayımlamak için yapılandırılan görev gösterir.

Test geçmişi sayfasını açın

Kapsam raporlaması elde etmek için bu görevi derleme işlem hattında kullanarak testleri Azure Pipelines veya TFS'de çalıştırabilirsiniz.

Önkoşulları denetleme

Windows'da barındırılan bir aracı kullanıyorsanız makinenizin şu önkoşul yüklü olduğundan emin olun:

Talep

[hiçbiri]

YAML kod parçacığı

# Publish Test Results
# Publish test results to Azure Pipelines
- task: PublishTestResults@2
  inputs:
    #testResultsFormat: 'JUnit' # Options: JUnit, NUnit, VSTest, xUnit, cTest
    #testResultsFiles: '**/TEST-*.xml' 
    #searchFolder: '$(System.DefaultWorkingDirectory)' # Optional
    #mergeTestResults: false # Optional
    #failTaskOnFailedTests: false # Optional
    #testRunTitle: # Optional
    #buildPlatform: # Optional
    #buildConfiguration: # Optional
    #publishRunAttachments: true # Optional

Varsayılan seçenek, test sonuçlarını yayımlamak için JUnit biçimini kullanır. vsTest'i testRunner olarak kullanırken testResultsFiles seçeneği olarak değiştir **/TEST-*.trx gerekir.

testResultsFormat, testRunner giriş adının diğer adıdır. Sonuç dosyaları yalnızca belirli bir çalıştırıcı tarafından değil, birden çok çalıştırıcı tarafından üretilebilirsiniz. Örneğin, jUnit sonuç biçimi yalnızca jUnit değil birçok çalıştırıcı tarafından de desteklemektedir.

YAML kullanarak Python için test sonuçlarını yayımlamak için bu konuların Diğer dillere örnekler de içeren Ekosistemler bölümünde Python'a bakın.

Bağımsız değişkenler

Not

Aşağıda belirtilen seçenekler görevin en son sürümü için geçerlidir.

Bağımsız Değişken Açıklama
testRunner
Test sonucu biçimi
(Gerekli) Yayımlamak istediğiniz sonuç dosyalarının biçimini belirtin. Aşağıdaki biçimler de desteklemektedir:
- CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) ve xUnit 2
Varsayılan değer: JUnit
Bağımsız değişken diğer adı: testResultsFormat
testResultsFiles
Test sonuçları dosyaları
(Gerekli) Bir veya daha fazla test sonucu dosyası belirtmek için bunu kullanın.
- Tek klasör içeren joker karakter ( ) ve * tekrarlayan joker karakterler ( ) kullanabilirsiniz. ** Örneğin, **/TEST-*.xml adları tüm alt dizinlerde ile başlarken tüm XML TEST- dosyalarını arar. Test sonucu biçimi olarak VSTest kullanıyorsanız, dosya türü olarak .trx değiştir gerekir, örneğin: **/TEST-*.trx
- Yeni satırla ayırarak birden çok yol belirtilebilir.
- Ayrıca minimatch desenlerini kabul eder.
Örneğin, , !TEST[1-3].xml veya adlı TEST1.xml dosyaları TEST2.xml TEST3.xml dışlar.
Varsayılan değer: **/TEST-*.xml
searchFolder
Klasör ara
(İsteğe bağlı) Test sonucu dosyalarını aramak için klasör.
Varsayılan değer: $(System.DefaultWorkingDirectory)
mergeTestResults
Test sonuçlarını birleştirme
Bu seçenek seçildiğinde, tüm dosyalardan gelen test sonuçları tek bir test çalıştırmasına göre rapor olur. Bu seçenek seçilmezse, her test sonucu dosyası için ayrı bir test çalıştırması oluşturulur.
Not: Sonuç eşlemesi ve süresinin doğru hesaplanması için aynı test çerçevesindeki dosyaları birleştirmek için birleştirme testi sonuçlarını kullanın.
Varsayılan değer: false
failTaskOnFailedTests
Test hataları varsa başarısız
(İsteğe bağlı) Bu seçildiğinde, sonuç dosyasındaki testlerden herhangi biri başarısız olarak işaretlenirse görev başarısız olur. Varsayılan değer false'tır ve sonuç dosyasından sonuçları yayımlar.
Varsayılan değer: false
testRunTitle
Test çalıştırması başlığı
(İsteğe bağlı) Sonuçların raporlandığı test çalıştırması için bir ad sağlamak üzere bu seçeneği kullanın. Derleme veya yayın işlem hattında bildirilen değişken adları kullanılabilir.
platform
Derleme Platformu
(İsteğe bağlı) Test çalıştırması raporlanacak platform oluşturma.
Örneğin x64 veya x86 olabilir. Derleme görevinize platform için bir değişken tanımladıysanız burada bunu kullanın.
Bağımsız değişken diğer adı: buildPlatform
configuration
Derleme Yapılandırması
Test Çalıştırması'nın raporlandığı derleme yapılandırması. Örneğin, Hata Ayıklama veya Yayın. Derleme görevinize yapılandırma için bir değişken tanımladıysanız burada bunu kullanın.
Bağımsız değişken diğer adı: buildConfiguration
publishRunAttachments
Test sonuçları dosyalarını karşıya yükleme
(İsteğe bağlı) Görev seçildiğinde, tüm test sonucu dosyalarını test çalıştırmasına ekler olarak yükler.
Varsayılan değer: true

Sonuç biçimleri eşlemesi

Bu tabloda, derleme veya yayın özetinde Testler sekmesinde bildirilen alanlar ve desteklenen test sonucu biçimlerinde özniteliklerle karşılık gelen eşlemeler listelanmaktadır.

Kapsam Alan Visual Studio Testi (TRX)
Test çalıştırması Başlık Görevde belirtilen test çalıştırması başlığı
Başlangıç tarihi /TestRun/Times.Attributes["start"]. Değer
Tamamlanma tarihi /TestRun/Times.Attributes[""]. Değer
Süre Tamamlanma tarihi - Başlangıç tarihi
Ekler Aşağıdaki Ekler destek bölümüne bakın
Test sonucu Başlık /TestRun/Results/UnitTestResult.Attributes["testName"]. Value Or /TestRun/Results/WebTestResult.Attributes["testName"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["testName"]. Değer
Başlangıç tarihi /TestRun/Results/UnitTestResult.Attributes["startTime"]. Değer Veya /TestRun/Results/WebTestResult.Attributes["startTime"]. Değer Veya /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Değer
Tamamlanma tarihi /TestRun/Results/UnitTestResult.Attributes["startTime"]. Değer + /TestRun/Results/UnitTestResult.Attributes["duration"]. Değer Veya /TestRun/Results/WebTestResult.Attributes["startTime"]. Değer + /TestRun/Results/WebTestResult.Attributes["duration"]. Değer Veya /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Değer + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Değer
Süre1 /TestRun/Results/UnitTestResult.Attributes["duration"]. Value Or /TestRun/Results/WebTestResult.Attributes["duration"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["duration"]. Değer
Sahip /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Değer
Sonuç /TestRun/Results/UnitTestResult.Attributes["sonucu"]. Değer Veya /TestRun/Results/WebTestResult.Attributes["sonucu"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["outcome"]. Değer
Hata iletisi /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText veya /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText veya /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText
Yığın izlemesi /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText Veya /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText veya /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
Ekler Aşağıdaki Ekler destek bölümüne bakın
Konsol günlüğü /TestRun/Results/UnitTestResult/Output/StdOut.InnerText veya /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText veya /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Konsol hata günlüğü /TestRun/Results/UnitTestResult/Output/StdErr.InnerText Veya /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText Veya /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Aracı adı /TestRun/Results/UnitTestResult.Attributes["computerName"]. Değer Veya /TestRun/Results/WebTestResult.Attributes["computerName"]. Değer Veya /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Değer
Test dosyası /TestRun/TestDefinitions/UnitTest.Attributes["depolama"]. Değer
Öncelik /TestRun/TestDefinitions/UnitTest.Attributes["önceliği"]. Değer

1 Süre yalnızca Başlangıç Tarihi ve Tamamlanma Tarihi kullanılabilir olduğunda kullanılır.

2 Tam ad biçimi, karakter sınırı 512 olan Namespace.Testclass.Methodname'tir. Test veri odaklı ise ve parametreleri varsa, karakter sınırı parametreleri içerir.

Docker

Docker tabanlı uygulamalar için, uygulama oluşturmanın ve test çalıştırmanın birçok yolu vardır:

  • Derleme işlem hattında derleme ve test: derleme ve testlerin işlem hattında yürütülmesi ve test sonuçlarının Yayımla Test Sonuçları yayımlanır.
  • Çok aşamalı Bir Dockerfile ile derleme ve test: Derleme ve testler çok aşamalı bir Docker dosyası kullanarak kapsayıcı içinde yürütülür, bu nedenle test sonuçları işlem hattına geri yayımlanmaz.
  • Dockerfile ile sonuçları derleme, test ve yayımlama: derleme ve testler kapsayıcının içinde yürütülür ve sonuçlar işlem hattına geri yayımlanır. Aşağıdaki örneğe bakın.

Docker dosyasıyla sonuçları derleme, test ve yayımlama

Bu yaklaşımda kodunuzu derlemeniz ve docker dosyası kullanarak kapsayıcının içinde test çalıştırmanız gerekir. Test sonuçları daha sonra işlem hattına yayımlanacak ana bilgisayarla kopyalanır. Test sonuçlarını Azure Pipelines yayımlamak için Yayımla Test Sonuçları kullanabilirsiniz. Son görüntü Docker'da veya Azure Container Registry

Kodu alma

  1. Aşağıdaki depo Azure DevOps GitHub'a içeri aktarın. Bu örnek kod, Dockerfile deponun kökünde dosyayla birlikte bir dosyası .vsts-ci.docker.yml içerir.

    https://github.com/MicrosoftDocs/pipelines-dotnet-core
    
  2. Dizinin Dockerfile.build kökünde aşağıdakiyle bir dosya oluşturun:

    # Build and run tests inside the docker container
    FROM microsoft/dotnet:2.1-sdk
    WORKDIR /app
    # copy the contents of agent working directory on host to workdir in container
    COPY . ./
    # dotnet commands to build, test, and publish
    RUN dotnet restore
    RUN dotnet build -c Release
    RUN dotnet test dotnetcore-tests/dotnetcore-tests.csproj -c Release --logger "trx;LogFileName=testresults.trx"
    RUN dotnet publish -c Release -o out
    ENTRYPOINT dotnet dotnetcore-sample/out/dotnetcore-sample.dll
    

    Bu dosya, kod derleme ve testleri çalıştırma yönergelerini içerir. Testler daha sonra kapsayıcı içindeki bir testresults.trx dosyaya kopyalanır.

  3. Son görüntüyü mümkün olduğunca küçük yapmak için yalnızca çalışma zamanı ve dağıtım yapıtlarını içeren mevcut içeriğini Dockerfile aşağıdakilerle değiştirin:

    # This Dockerfile creates the final image to be published to Docker or
    # Azure Container Registry
    # Create a container with the compiled asp.net core app
    FROM microsoft/aspnetcore:2.0
    # Create app directory
    WORKDIR /app
    # Copy only the deployment artifacts
    COPY /out .
    ENTRYPOINT ["dotnet", "dotnetcore-sample.dll"]
    

Derleme işlem hattını tanımlama

  1. Docker Hub hesabınız varsa ve görüntüyü Docker kayıt defterinize itmek için dosyanın .vsts-ci.docker.yml içeriğini aşağıdakilerle değiştirin:

    # Build Docker image for this app, to be published to Docker Registry
    pool:
      vmImage: 'ubuntu-16.04'
    variables:
      buildConfiguration: 'Release'
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId)/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd
        docker push $(dockerId)/dotnetcore-sample:$BUILD_BUILDID
      env:
        pswd: $(dockerPassword)
    

    Alternatif olarak, bir Azure Container Registry ve görüntüyü bu kayıt defterine itmek için dosyanın .vsts-ci.yml içeriğini aşağıdakilerle değiştirin:

    # Build Docker image for this app to be published to Azure Container Registry
    pool:
      vmImage: 'ubuntu-16.04'
    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd $(dockerid).azurecr.io
        docker push $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID 
      env:
        pswd: $(dockerPassword)
    
  2. Değişikliği deponun ana dalına itin.

  3. Kayıt defteri Azure Container Registry kayıt defterini önceden oluşturduğunuzdan emin Azure portal. Kayıt defteri ayarlarının Erişim anahtarları bölümünde gösterilen yönetici kullanıcı adını ve parolasını Azure portal.

  4. Derleme işlem hattınızı aşağıdakilerle güncelleştirin

    • Aracı havuzu:Hosted Ubuntu 1604
      • dockerId: Değeri DockerHub için Docker kimliğiniz veya uygulamanın yönetici kullanıcı Azure Container Registry.
      • dockerPassword: Değeri DockerHub için parolanıza veya parolanın yönetici Azure Container Registry.
    • YAML dosya yolu:/.vsts-ci.docker.yml
  5. Yeni bir derlemeyi kuyruğa almak ve bunun kayıt defterinize bir Docker görüntüsü oluşturmasını ve bunu izlemesini ve test sonuçlarını Azure DevOps.

YAML derlemeleri henüz TFS'de kullanılamıyor.

Ekler desteği

Yayımlama Test Sonuçları görevi, aşağıdaki biçimler için hem test çalıştırması hem de test sonuçları için ek desteği sağlar. Genel projeler için 2 GB toplam eki destekliyoruz.

Visual Studio Testi (TRX)

Kapsam Tür Yol
Test çalıştırması Veri Toplayıcı /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Değer
Test Sonucu /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. Değer
Kod Kapsamı /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Değer Ve /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Değer
Test sonucu Veri Toplayıcıları /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Değer Veya /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Değer Veya /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Değer
Test Sonucu /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"]. Değer Veya /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["yolu"]. Değer Veya /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["yolu"]. Değer

NUnit 3

Kapsam Yol
Test çalıştırması /Test-Suite/Attachments/Attachment/FilePath
Test çalıştırması /Test-Suite [ @type = ' Assembly ']/Test-Case/Attachments/Attachment/FilePath

Not

Test sonuçları dosyasını ek olarak karşıya yükleme seçeneği, görevde tüm biçimler için geçerli olan varsayılan seçenektir.

SSS

İzin verilen maksimum FQN sınırı nedir?

Maksimum FQN sınırı 512 karakterdir.

FQN karakter sınırı, veri odaklı testler durumunda özellikleri ve bunların değerlerini de içerir mi?

Evet, FQN karakter sınırı özellikleri ve değerlerini içerir.

FQN alt sonuçlarla farklı olacak mı?

Şu anda, veri odaklı testlerin alt sonuçları ilgili verilerde gösterilmez.

Örnek: bir test örneğim var: sepet verilerine ürün ekleme 1: Product = giyim Data 2: Product = giyine

Yayımlanan tüm test alt sonuçları yalnızca test çalışması adına ve ilk satırın verilerine sahip olur.

Açık kaynak

Bu görev GitHub 'daaçık kaynaktır. Geribildirim ve katılımlar hoş geldiniz.

Yardım ve destek