Bagikan melalui


PublishTestResults@2 - Menerbitkan tugas Hasil Pengujian v2

Menerbitkan hasil pengujian ke Azure Pipelines.

Terbitkan Hasil Pengujian ke Azure Pipelines/TFS.

Sintaks

# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #failTaskOnFailureToPublishResults: false # boolean. Fail if there is failure in publishing test results. Default: false.
    #failTaskOnMissingResultsFile: false # boolean. Fail if no result files are found. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish Test Results to Azure Pipelines/TFS.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.

Input

testResultsFormat - Format hasil pengujian
Alias input: testRunner. string. Wajib diisi. Nilai yang diizinkan: JUnit, NUnit, VSTest, XUnit, CTest. Nilai default: JUnit.

Menentukan format file hasil yang ingin Anda terbitkan. Format berikut didukung: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) dan xUnit 2.


testResultsFormat - Format hasil pengujian
Alias input: testRunner. string. Wajib diisi. Nilai yang diizinkan: JUnit, NUnit, VSTest, XUnit. Nilai default: JUnit.

Menentukan format file hasil yang ingin Anda terbitkan. Format berikut didukung: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) dan xUnit 2.


testResultsFiles - File hasil pengujian
string. Wajib diisi. Nilai default: **/TEST-*.xml.

Menentukan satu atau beberapa file hasil pengujian.

  • Anda dapat menggunakan kartubebas folder tunggal (*) dan kartubebas rekursif (**). Misalnya, **/TEST-*.xml mencari semua file XML yang namanya dimulai dengan TEST- di semua subdirektori. Jika menggunakan VSTest sebagai format hasil pengujian, jenis file harus diubah menjadi .trx misalnya **/TEST-*.trx
  • Beberapa jalur dapat ditentukan, dipisahkan oleh baris baru.
  • Selain itu menerima pola minimatch.

Misalnya, !TEST[1-3].xml mengecualikan file bernama TEST1.xml, , TEST2.xmlatau TEST3.xml.


searchFolder - folder Search
string. Nilai default: $(System.DefaultWorkingDirectory).

Pilihan. Menentukan folder untuk mencari file hasil pengujian.


mergeTestResults - Menggabungkan hasil pengujian
boolean. Nilai default: false.

Ketika nilai boolean ini adalah true, tugas melaporkan hasil pengujian dari semua file terhadap satu eksekusi pengujian. Jika nilainya adalah false, tugas membuat uji coba terpisah untuk setiap file hasil pengujian.

Catatan

Gunakan pengaturan hasil pengujian penggabungan untuk menggabungkan file dari kerangka kerja pengujian yang sama untuk memastikan pemetaan hasil dan durasi dihitung dengan benar.


failTaskOnFailedTests - Gagal jika ada kegagalan pengujian
boolean. Nilai default: false.

Opsional. Ketika nilai boolean ini adalah true, tugas akan gagal jika salah satu pengujian dalam file hasil ditandai sebagai gagal. Defaultnya adalah false, yang hanya akan menerbitkan hasil dari file hasil.


failTaskOnFailureToPublishResults - Gagal jika ada kegagalan dalam menerbitkan hasil pengujian
boolean. Nilai default: false.

Ketika true, gagal tugas jika ada kegagalan dalam menerbitkan hasil pengujian.


failTaskOnMissingResultsFile - Gagal jika tidak ada file hasil yang ditemukan
boolean. Nilai default: false.

Gagalkan tugas jika tidak ada file hasil yang ditemukan.


testRunTitle - Judul uji coba
string.

Pilihan. Menentukan nama untuk uji coba yang akan dilaporkan hasilnya. Nama variabel yang dideklarasikan dalam alur build atau rilis dapat digunakan.


buildPlatform - Bangun Platform
Alias input: platform. string.

Pilihan. Menentukan platform build tempat uji coba harus dilaporkan. Contohnya: x64 atau x86. Jika Anda menentukan variabel untuk platform dalam tugas build Anda, gunakan di sini.


buildConfiguration - Konfigurasi Build
Alias input: configuration. string.

Pilihan. Menentukan konfigurasi build tempat uji coba harus dilaporkan. Contohnya: Debug atau Release. Jika Anda menentukan variabel untuk konfigurasi dalam tugas build Anda, gunakan di sini.


publishRunAttachments - Mengunggah file hasil pengujian
boolean. Nilai default: true.

Pilihan. Ketika nilai boolean ini adalah true, tugas mengunggah semua file hasil pengujian sebagai lampiran ke eksekusi pengujian.


Opsi kontrol tugas

Semua tugas memiliki opsi kontrol selain input tugas mereka. Untuk informasi selengkapnya, lihat Opsi kontrol dan properti tugas umum.

Variabel output

Tidak ada.

Keterangan

Tugas ini menerbitkan hasil pengujian ke Azure Pipelines atau TFS saat pengujian dijalankan untuk memberikan pengalaman pelaporan dan analitik pengujian yang komprehensif. Anda dapat menggunakan runner pengujian pilihan Anda yang mendukung format hasil yang Anda butuhkan. Format hasil yang didukung termasuk CTest, JUnit (termasuk PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX), dan xUnit 2.

Tugas bawaan lainnya, seperti tugas Visual Studio Test dan tugas Dot NetCore CLI secara otomatis menerbitkan hasil pengujian ke alur. Tugas seperti Ant, Maven, Gulp, Grunt, dan Xcode menyediakan hasil penerbitan sebagai opsi dalam tugas, atau membangun pustaka seperti Cobertura dan JaCoCo. Jika Anda menggunakan salah satu tugas ini, Anda tidak memerlukan tugas Terbitkan Hasil Pengujian terpisah di alur.

Hasil pengujian yang diterbitkan ditampilkan di tab Pengujian di ringkasan alur. Hasilnya membantu Anda mengukur kualitas alur, meninjau keterlacakan, memecahkan masalah kegagalan, dan mendorong kepemilikan kegagalan.

Contoh berikut menunjukkan tugas dikonfigurasi untuk menerbitkan hasil pengujian.

Buka halaman riwayat pengujian

Anda juga dapat menggunakan tugas ini dalam alur build untuk menerbitkan hasil cakupan kode yang dihasilkan saat menjalankan pengujian ke Azure Pipelines atau TFS untuk mendapatkan pelaporan cakupan.

Prasyarat

Jika Anda menggunakan agen yang dihost sendiri Windows, komputer Anda harus menginstal prasyarat ini:

Default tugas

Opsi default menggunakan format JUnit untuk menerbitkan hasil pengujian. Saat menggunakan VSTest sebagai testRunner, opsi testResultsFiles harus diubah menjadi **/TEST-*.trx.

testResultsFormat adalah alias untuk nama input testRunner . File hasil dapat diproduksi oleh beberapa runner, bukan hanya runner tertentu. Misalnya, format hasil jUnit didukung oleh banyak runner dan bukan hanya jUnit.

Untuk menerbitkan hasil pengujian untuk Python menggunakan YAML, lihat Python di bagian Ekosistem dari topik ini, yang juga menyertakan contoh untuk bahasa lain.

Pemetaan format hasil

Tabel ini mencantumkan bidang yang dilaporkan di tab Pengujian dalam ringkasan build atau rilis, dan pemetaan terkait dengan atribut dalam format hasil pengujian yang didukung.

Cakupan Bidang Uji Visual Studio (TRX)
Uji coba Judul Judul uji coba yang ditentukan dalam tugas
Tanggal dimulai /TestRun/Times.Attributes["start"]. Nilai
Tanggal selesai /TestRun/Times.Attributes["finish"]. Nilai
Durasi Tanggal selesai - Tanggal dimulai
Lampiran Lihat bagian dukungan Lampiran di bawah ini
Hasil pengujian Judul /TestRun/Results/UnitTestResult.Attributes["testName"]. Nilai Atau /TestRun/Results/WebTestResult.Attributes["testName"]. Nilai Atau /TestRun/Results/TestResultAggregation.Attributes["testName"]. Nilai
Tanggal dimulai /TestRun/Results/UnitTestResult.Attributes["startTime"]. Nilai Atau /TestRun/Results/WebTestResult.Attributes["startTime"]. Nilai Atau /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Nilai
Tanggal selesai /TestRun/Results/UnitTestResult.Attributes["startTime"]. Nilai + /TestRun/Results/UnitTestResult.Attributes["duration"]. Nilai Atau /TestRun/Results/WebTestResult.Attributes["startTime"]. Nilai + /TestRun/Results/WebTestResult.Attributes["duration"]. Nilai Atau /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Nilai + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Nilai
Durasi /TestRun/Results/UnitTestResult.Attributes["duration"]. Nilai Atau /TestRun/Results/WebTestResult.Attributes["duration"]. Nilai Atau /TestRun/Results/TestResultAggregation.Attributes["duration"]. Nilai
Pemilik /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Nilai
Hasil /TestRun/Results/UnitTestResult.Attributes["outcome"]. Nilai Atau /TestRun/Results/WebTestResult.Attributes["outcome"]. Nilai Atau /TestRun/Results/TestResultAggregation.Attributes["outcome"]. Nilai
Pesan kesalahan /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText Or /testRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText Or /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText
Pelacakan tumpukan /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText Or /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText Or /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
Lampiran Lihat bagian dukungan Lampiran di bawah ini
Log konsol /TestRun/Results/UnitTestResult/Output/StdOut.InnerText Atau /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText Or /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Log kesalahan konsol /TestRun/Results/UnitTestResult/Output/StdErr.InnerText Atau /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText Or /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Nama agen /TestRun/Results/UnitTestResult.Attributes["computerName"]. Nilai Atau /TestRun/Results/WebTestResult.Attributes["computerName"]. Nilai Atau /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Nilai
File pengujian /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Nilai
Prioritas /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Nilai

Catatan

Durasi hanya digunakan saat Tanggal dimulai dan Tanggal selesai tidak tersedia.

Format nama yang sepenuhnya memenuhi syarat untuk testName adalah Namespace.Testclass.Methodname dengan batas karakter 512. Jika pengujian didorong data dan memiliki parameter, batas karakter akan menyertakan parameter.

Saat menerbitkan hasil pengujian, Anda mungkin mendapatkan kesalahan ini: Gagal menerbitkan hasil pengujian: Prioritas Tidak Valid yang ditentukan

Kesalahan ini terjadi jika salah satu metode pengujian memiliki prioritas yang ditetapkan di atas 255, perbaiki prioritas metode pengujian dalam kode dan jalankan pengujian lagi. Anda dapat meninjau file trx yang dihasilkan untuk melihat semua pengujian yang memiliki prioritas lebih besar dari 255.

Dukungan lampiran

Tugas Terbitkan Hasil Pengujian menyediakan dukungan untuk lampiran untuk uji coba dan hasil pengujian untuk format berikut. Untuk proyek publik, kami mendukung 2GB dari total lampiran.

Pengujian Visual Studio (TRX)

Cakupan Jenis Jalur
Uji coba Pengumpul Data /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Nilai
Hasil Uji /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. Nilai
Cakupan Kode /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Nilai Dan /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Nilai
Hasil pengujian Pengumpul Data /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Nilai Atau /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Nilai Atau /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Nilai
Hasil Uji /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"]. Nilai Atau /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Nilai Atau /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Nilai

Catatan

Opsi untuk mengunggah file hasil pengujian sebagai lampiran adalah opsi default dalam tugas, berlaku untuk semua format.

Contoh

Docker

Untuk aplikasi berbasis Docker, ada banyak cara untuk membangun aplikasi Anda dan menjalankan pengujian:

  • Membangun dan menguji dalam alur build: build dan pengujian yang dijalankan dalam alur dan hasil pengujian diterbitkan menggunakan tugas Terbitkan Hasil Pengujian .
  • Membangun dan menguji dengan Dockerfile multi-tahap: build dan pengujian dijalankan di dalam kontainer menggunakan file Docker multi-tahap, karena hasil pengujian tersebut tidak diterbitkan kembali ke alur.
  • Bangun, uji, dan terbitkan hasil dengan Dockerfile: build dan pengujian yang dijalankan di dalam kontainer, dan hasilnya diterbitkan kembali ke alur. Lihat contoh di bawah ini.

Membuat, menguji, dan menerbitkan hasil dengan file Docker

Dalam pendekatan ini, Anda membangun kode dan menjalankan pengujian di dalam kontainer menggunakan file Docker. Hasil pengujian kemudian disalin ke host untuk diterbitkan ke alur. Untuk menerbitkan hasil pengujian ke Azure Pipelines, Anda bisa menggunakan tugas Terbitkan Hasil Pengujian . Gambar akhir akan diterbitkan ke Docker atau Azure Container Registry.

Mendapatkan kode
  1. Buat Dockerfile.build file di akar direktori proyek Anda dengan yang berikut ini:

    # 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
    

    File ini berisi instruksi untuk membuat kode dan menjalankan pengujian. Pengujian kemudian disalin ke file testresults.trx di dalam kontainer.

  2. Untuk membuat gambar akhir sesecil mungkin, hanya berisi artefak runtime dan penyebaran, ganti konten yang ada Dockerfile dengan yang berikut ini:

    # 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"]
    
Menentukan alur build
  1. Jika Anda memiliki akun Docker Hub, dan ingin mendorong gambar ke registri .vsts-ci.docker.yml Docker Anda, ganti konten file dengan yang berikut ini:

    # 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)
    

    Atau, jika Anda mengonfigurasi Azure Container Registry dan ingin mendorong gambar ke registri tersebut.vsts-ci.yml, ganti konten file dengan yang berikut:

    # 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. Dorong perubahan ke cabang utama di repositori Anda.

  3. Jika Anda menggunakan Azure Container Registry, pastikan Anda telah membuat registri sebelumnya di portal Azure. Salin nama pengguna dan kata sandi admin yang diperlihatkan di bagian Kunci akses dari pengaturan registri di portal Azure.

  4. Perbarui alur build Anda dengan yang berikut ini

    • Kumpulan agen: Hosted Ubuntu 1604
      • dockerId: Atur nilai ke ID Docker Anda untuk DockerHub atau nama pengguna admin untuk Azure Container Registry.
      • dockerPassword: Atur nilai ke kata sandi Anda untuk DockerHub atau kata sandi admin Azure Container Registry.
    • Jalur file YAML: /.vsts-ci.docker.yml
  5. Antrekan build baru dan watch membuat dan mendorong gambar Docker ke registri Anda dan hasil pengujian ke Azure DevOps.

Persyaratan

Persyaratan Deskripsi
Jenis alur YAML, Build klasik, Rilis klasik
Berjalan pada Agen, DeploymentGroup
Permintaan Tidak ada
Kemampuan Tugas ini tidak memenuhi tuntutan apa pun untuk tugas berikutnya dalam pekerjaan.
Pembatasan perintah Apa pun
Variabel yang dapat diatur Apa pun
Versi agen 2.0.0 atau lebih tinggi
Kategori tugas Uji