Test Sonuçları görevi Yayımla

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ımlarolarak adlandırılır, çalışmalaraderlemelerdenir, hizmet bağlantılarınahizmet uç noktalarıdenir, aşamalarortamlarolarak adlandırılır ve işleraşamalarolarak adlandırılır.

bu görev, kapsamlı bir test raporlama ve analiz deneyimi sağlamak üzere testler yürütüldüğünde, test sonuçlarını Azure Pipelines veya TFS 'ye yayınlar. Seçtiğiniz sonuç biçimini destekleyen Test Çalıştırıcısı ' nı kullanabilirsiniz. desteklenen sonuçlar formatları ctest, junit ( phpunitdahil), nunit 2, nunit 3, Visual Studio Test (TRX) ve xunit 2içerir.

Visual Studio test görevi ve nokta netcore clı görevi gibi diğer yerleşik görevler otomatik olarak test sonuçlarını işlem hattına yayımlarken Ant, maven, Gulp, grim, .net Core ve xcode gibi görevler, görev içinde bir seçenek olarak yayımlama sonuçları sağ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ımlama test sonuçları görevine gerek kalmaz.

Yayımlanan test sonuçları, işlem hattı özetindeki testler sekmesinde görüntülenir ve işlem hattı kalitesini ölçmenize, izlenebilirlik ' i incelemenizi, hataları gidermenize ve hata sahipliğini sağlamanıza yardımcı olur.

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

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

bu görevi ayrıca bir yapı ardışık düzeninde kullanarak, kapsam raporlaması elde etmek için Azure Pipelines veya TFS 'ye testler çalıştırırken üretilen kod kapsamı sonuçlarını yayımlayabilirsiniz .

Önkoşulları denetleme

Windows kendi kendine barındırılan bir aracı kullanıyorsanız, makinenizde bu önkoşulun yüklü olduğundan emin olun:

Erişim

seçim

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, TestRunnerolarak kullanılırken, testresultsfiles belirtilmelidir seçeneği olarak değiştirilmelidir .

testResultsFormat , TestRunner giriş adı için bir diğer addır. Sonuç dosyaları yalnızca belirli bir Çalıştırıcısı değil birden çok çalıştırma tarafından üretilebilir. Örneğin, jUnit sonuç biçimi yalnızca jUnit değil birçok çalıştırma tarafından desteklenir.

YAML kullanarak Python için test sonuçlarını yayımlamak için, bu konuların ekosistemleri bölümünde bkz. Python , diğer dillere yönelik örnekler de içerir.

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 Description
testRunner
Test sonucu biçimi
Istenir Yayınlamak istediğiniz sonuç dosyalarının biçimini belirtin. Aşağıdaki biçimler desteklenir:
- - , 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ı
Istenir Bir veya daha fazla test sonuçları dosyası belirtmek için bunu kullanın.
-Tek klasörbir joker karakter ( * ) ve özyinelemeli joker karakterler () kullanabilirsiniz ** . Örneğin, **/TEST-*.xml adları tüm alt dizinlerde başlayan tüm XML dosyalarını arar TEST- . VSTest öğesini test sonucu biçimi olarak kullanıyorsanız, dosya türü örnek olarak değiştirilmelidir .trx . **/TEST-*.trx
-Bir yeni satır ile ayrılmış birden çok yol belirtilebilir.
-Ek olarak minimatch desenleride kabul eder.
Örneğin,, !TEST[1-3].xml veya adlı dosyaları TEST1.xml dışlar TEST2.xmlTEST3.xml .
Varsayılan değer: **/TEST-*.xml
searchFolder
Arama klasörü
Seçim Test sonucu dosyalarını aramak için klasörü.
Varsayılan değer: $(System.DefaultWorkingDirectory)
mergeTestResults
Test sonuçlarını Birleştir
Bu seçenek belirlendiğinde, tüm dosyaların test sonuçları tek bir test çalıştırmasınagöre bildirilir. Bu seçenek seçilmezse, her test sonuç dosyası için ayrı bir test çalıştırması oluşturulur.
Note: sonuçları eşlemenin ve sürenin doğru hesaplandığından emin olmak için aynı test çerçevesinden dosyaları birleştirmek için birleştirme testi sonuçlarını kullanın.
Varsayılan değer: false
failTaskOnFailedTests
Test hatası varsa başarısız olur
Seçim Seçildiğinde, sonuçlar dosyasındaki testlerin herhangi biri başarısız olarak işaretlenmişse görev başarısız olur. Varsayılan değer false 'dur, bu da sonuçları sonuçlar dosyasından yayımlayacaktır.
Varsayılan değer: false
testRunTitle
Test çalıştırması başlığı
Seçim Sonuçların bildirildiği test çalıştırması için bir ad sağlamak üzere bu seçeneği kullanın. Derleme veya sürüm ardışık düzeninde belirtilen değişken adları kullanılabilir.
platform
Derleme platformu
Seçim Test çalıştırmasının bildirilmesi gereken yapı platformu.
Örneğin x64 veya x86 olabilir. Yapı görevinde platform için bir değişken tanımladıysanız, bunu burada kullanın.
Bağımsız değişken diğer adı: buildPlatform
configuration
Derleme Yapılandırması
Test çalıştırmasının bildirilmesi gereken yapı yapılandırması. Örneğin, Hata Ayıkla veya Yayınla. Yapı görevinde yapılandırma için bir değişken tanımladıysanız, burada kullanın.
Bağımsız değişken diğer adı: buildConfiguration
publishRunAttachments
test sonuçları dosyalarını Upload
Seçim Seçildiğinde, görev tüm test sonuç dosyalarını test çalıştırmasına ekler olarak yükler.
Varsayılan değer: true

Sonuç biçimleri eşleme

Bu tablo, bir derleme veya yayın özetinde testler sekmesinde raporlanan alanları ve desteklenen test sonucu biçimlerindeki özniteliklerle karşılık gelen eşlemeyi listeler.

Kapsam Alan Visual Studio Test (TRX)
Test çalıştırması Başlık Görevde belirtilen test çalıştırması başlığı
Başlangıç tarihi /TestRun/Times.exe ["Başlangıç"]. Deeri
Tamamlanma tarihi /TestRun/Times.exe ["bitiş"]. Deeri
Süre Tamamlanma tarihi-başlangıç tarihi
Ekler Aşağıdaki ek destek bölümüne bakın
Test sonucu Başlık /TestRun/results/unittestresult.exe ["TestName"]. Value veya/TestRun/Results/WebTestResult.Attributes ["TestName"]. Value veya/TestRun/results/TestResultAggregation.exe ["TestName"]. Deeri
Başlangıç tarihi /TestRun/results/unittestresult.exe ["StartTime"]. Value veya/TestRun/Results/WebTestResult.Attributes ["StartTime"]. Value veya/TestRun/results/TestResultAggregation.exe ["StartTime"]. Deeri
Tamamlanma tarihi /TestRun/results/unittestresult.exe ["StartTime"]. Değer +/TestRun/results/unittestresult.exe ["Duration"]. Value veya/TestRun/Results/WebTestResult.Attributes ["StartTime"]. Değer +/TestRun/Results/WebTestResult.Attributes ["Duration"]. Value veya/TestRun/results/TestResultAggregation.exe ["StartTime"]. Değer +/TestRun/results/TestResultAggregation.exe ["Duration"]. Deeri
Süre1 /TestRun/results/unittestresult.exe ["Duration"]. Value veya/TestRun/Results/WebTestResult.Attributes ["Duration"]. Value veya/TestRun/results/TestResultAggregation.exe ["Duration"]. Deeri
Sahip /TestRun/testdefinitions/UnitTest/Owners/Owner.exe ["Name"]. Deeri
Sonuç /TestRun/results/unittestresult.exe ["Outcome"]. Value veya/TestRun/Results/WebTestResult.Attributes ["Outcome"]. Value veya/TestRun/results/TestResultAggregation.exe ["Outcome"]. Deeri
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 izleme /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 ek 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"]. Value veya/TestRun/Results/WebTestResult.Attributes ["computerName"]. Value veya/TestRun/Results/TestResultAggregation.Attributes ["computerName"]. Deeri
Test dosyası /TestRun/testdefinitions/UnitTest,Attributes ["depolama"]. Deeri
Öncelik /TestRun/testdefinitions/UnitTest.exe ["Priority"]. Deeri

1süre yalnızca Başlangıç tarihi ve tamamlanma tarihi kullanılabilir olmadığında kullanılır.

2 tam ad biçimi, Namespace. TestClass. MethodName , 512 karakter sınırı ile. Test veri odaklı ve parametrelere sahipse, karakter sınırı parametreleri içerir.

Docker

Docker tabanlı uygulamalar için uygulamanızı derlemek ve testleri çalıştırmak için birçok yol vardır:

  • Yapı ardışık düzeninde derleme ve test etme: işlem hattındaki derleme ve testler yürütme ve test sonuçları yayımla test sonuçları görevi kullanılarak yayımlanır.
  • Çok aşamalı Dockerfile ile derleyin ve test edin: derleme ve testler, çok aşamalı bir Docker dosyası kullanarak kapsayıcının içinde yürütülür, çünkü bu test sonuçları ardışık düzene geri yayımlanmaz.
  • Dockerfile ile sonuçları derleyin, test edin ve yayımlayın: derleme ve testler kapsayıcı 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ı ile sonuçları derleyin, test edin ve yayımlayın

Bu yaklaşımda kodunuzu derler ve bir Docker dosyası kullanarak kapsayıcı içinde testler çalıştırırsınız. Test sonuçları daha sonra işlem hattına yayımlanacak konağa kopyalanır. test sonuçlarını Azure Pipelines yayımlamak için, Test Sonuçları yayımla görevini kullanabilirsiniz. Son görüntü Docker veya Azure Container Registry yayımlanacak

Kodu alma

  1. Dockerfile.buildAşağıdaki ile proje dizininizin kökünde bir dosya oluşturun:

    # Build and run tests inside the docker container
    FROM mcr.microsoft.com/dotnet/sdk:2.1
    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 oluşturma ve Testleri çalıştırma yönergelerini içerir. Testler daha sonra kapsayıcının içindeki bir dosyaya kopyalanır testresults.trx .

  2. Yalnızca çalışma zamanı ve dağıtım yapıtları içeren son görüntüyü mümkün olduğunca küçük hale getirmek için, var olan içeriğini Dockerfile aşağıdakiler ile 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 mcr.microsoft.com/dotnet/aspnet:2.1
    # 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. Bir Docker Hub hesabınız varsa ve görüntüyü Docker Kayıt defterinize göndermek istiyorsanız, .vsts-ci.docker.yml dosyanın içeriğini aşağıdakiler ile değiştirin:

    # Build Docker image for this app, to be published to Docker Registry
    pool:
      vmImage: 'ubuntu-latest'
    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 yapılandırırsanız ve görüntüyü bu kayıt defterine göndermek istiyorsanız, .vsts-ci.yml dosyanın içeriğini aşağıdaki kodla değiştirin:

    # Build Docker image for this app to be published to Azure Container Registry
    pool:
      vmImage: 'ubuntu-latest'
    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 deponuzdaki Ana dala gönderin.

  3. Azure Container Registry kullanıyorsanız, Azure portal kayıt defterini önceden oluşturduğunuzdan emin olun. Azure portal içindeki kayıt defteri ayarlarının erişim tuşları bölümünde gösterilen yönetici kullanıcı adını ve parolasını kopyalayın.

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

    • Aracı havuzu:
      • Dockerıd: değeri DockerHub Için DOCKER ıd veya Azure Container Registry için Yönetici Kullanıcı adı olarak ayarlayın.
      • Dockerpassword: değeri DockerHub için parolanızı veya Azure Container Registry yönetici parolasını ayarlayın.
    • YAML dosya yolu:
  5. Yeni bir derlemeyi kuyruğa alın ve bir Docker görüntüsünü oluşturup kayıt defterinize ve test sonuçlarına Azure DevOps.

YAML derlemeleri TFS 'de henüz kullanılabilir değil.

Ekler desteği

Test Sonuçları Yayımla görevi, aşağıdaki biçimler için Test çalıştırmasının ve test sonuçlarının ekleri için destek sağlar. Ortak projeler için 2 GB toplam ek destekliyoruz.

Visual Studio Test (TRX)

Kapsam Tür Yol
Test çalıştırması Veri toplayıcısı /TestRun/resultsummary/CollectorDataEntries/Collector/uriattachments/uriattachment/a.exe ["href"]. Deeri
Test sonucu /TestRun/resultsummary/ResultFiles/resultfile5attributes ["Path"]. Deeri
Kod Kapsamı /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes ["Binaryfile"]. Value ve/TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes ["Pdbdosya"]. Deeri
Test sonucu Veri toplayıcılar /TestRun/results/unittestresult/CollectorDataEntries/Collector/uriattachments/uriattachment/a.exe ["href"]. Value veya/TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes ["href"]. Değer veya/TestRun/results/TestResultAggregation/CollectorDataEntries/Collector/uriattachments/uriattachment/a.exe ["href"]. Deeri
Test sonucu /TestRun/results/unittestresult/ResultFiles/resultfile.exe ["Path"]. Value veya/TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes ["Path"]. Değer veya/TestRun/results/TestResultAggregation/ResultFiles/resultfile.exe ["Path"]. Deeri

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 bir seçenektir.

SSS

FQN'nin izin verilen maksimum sınırı nedir?

Maksimum FQN sınırı 512 karakterdir.

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

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

Alt sonuçlar için FQN farklı olacak mı?

Şu anda, veri odaklı testlerden alt sonuçlar karşılık gelen verilerde gösterlanmaz.

Örnek: Bir Test örneğim var: Sepete ürün ekleme Veri 1: Ürün = Veri 2: Product = Foot foot dipnot

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

Açık kaynak

Bu görev, üzerinde açık kaynak GitHub. Geri bildirim ve katkılar açıktır.

Yardım ve destek