Bagikan melalui


Menjalankan pengujian secara paralel menggunakan tugas Uji Visual Studio

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Menjalankan pengujian untuk memvalidasi perubahan pada kode adalah kunci untuk mempertahankan kualitas. Agar praktik integrasi berkelanjutan berhasil, penting bagi Anda untuk memiliki rangkaian pengujian yang baik yang dijalankan dengan setiap build. Namun, ketika basis kode tumbuh, rangkaian pengujian regresi cenderung tumbuh juga dan menjalankan tes regresi penuh dapat memakan waktu lama. Terkadang, pengujian itu sendiri mungkin berjalan lama - ini biasanya terjadi jika Anda menulis tes end-to-end. Ini mengurangi kecepatan pengiriman nilai pelanggan karena alur tidak dapat memproses build dengan cukup cepat.

Menjalankan pengujian secara paralel adalah cara yang bagus untuk meningkatkan efisiensi alur CI/CD. Ini dapat dilakukan dengan mudah dengan menggunakan kapasitas tambahan yang ditawarkan oleh cloud. Artikel ini membahas bagaimana Anda dapat mengonfigurasi tugas Visual Studio Test untuk menjalankan pengujian secara paralel dengan menggunakan beberapa agen.

Prasyarat

Biasakan diri Anda dengan konsep agen dan pekerjaan. Untuk menjalankan beberapa pekerjaan secara paralel, Anda harus mengonfigurasi beberapa agen. Anda juga memerlukan pekerjaan paralel yang memadai.

Menguji irisan

Tugas Uji Visual Studio (versi 2) dirancang untuk bekerja dengan mulus dengan pengaturan pekerjaan paralel. Ketika pekerjaan alur yang berisi tugas Visual Studio Test (disebut sebagai "tugas VSTest" untuk kesederhanaan) dikonfigurasi untuk berjalan pada beberapa agen secara paralel, ia secara otomatis mendeteksi bahwa beberapa agen terlibat dan membuat irisan pengujian yang dapat dijalankan secara paralel di seluruh agen ini.

Tugas dapat dikonfigurasi untuk membuat irisan pengujian agar sesuai dengan persyaratan yang berbeda seperti batching berdasarkan jumlah pengujian dan agen, waktu berjalan pengujian sebelumnya, atau lokasi pengujian dalam rakitan.

Opsi batching

Opsi ini dijelaskan di bagian berikut.

Pemotongan sederhana berdasarkan jumlah tes dan agen

Pengaturan ini menggunakan algoritma pemotongan sederhana untuk membagi jumlah pengujian 'T' di seluruh agen 'N' sehingga setiap agen menjalankan pengujian T/N. Misalnya, jika rangkaian pengujian Anda berisi 1000 pengujian, dan Anda menggunakan dua agen untuk pekerjaan paralel, setiap agen akan menjalankan 500 pengujian. Atau Anda dapat mengurangi jumlah waktu yang diperlukan untuk menjalankan pengujian lebih lanjut dengan menggunakan delapan agen, dalam hal ini setiap agen menjalankan 125 pengujian secara paralel.

Opsi ini biasanya digunakan ketika semua pengujian memiliki waktu berjalan yang sama. Jika waktu pengujian berjalan tidak serupa, agen mungkin tidak digunakan secara efektif karena beberapa agen mungkin menerima irisan dengan beberapa pengujian yang berjalan lama, sementara agen lain mungkin menerima irisan dengan tes jangka pendek dan selesai jauh lebih awal dari agen lainnya.

Pemotongan berdasarkan waktu pengujian yang berjalan sebelumnya

Pengaturan ini mempertimbangkan waktu berjalan sebelumnya untuk membuat irisan pengujian sehingga setiap irisan memiliki waktu berjalan yang kira-kira sama. Pengujian jangka pendek akan di-batch bersama-sama, sementara pengujian jangka panjang akan dialokasikan untuk memisahkan irisan.

Opsi ini harus digunakan ketika pengujian dalam rakitan tidak memiliki dependensi, dan tidak perlu berjalan pada agen yang sama. Opsi ini menghasilkan pemanfaatan agen yang paling efisien karena setiap agen mendapatkan jumlah 'pekerjaan' yang sama dan semuanya selesai pada waktu yang hampir bersamaan.

Pengirisan berdasarkan rakitan pengujian

Pengaturan ini menggunakan algoritma pemotongan sederhana yang membagi jumlah rakitan pengujian (atau file) 'A' di seluruh agen 'N', sehingga setiap agen menjalankan pengujian dari rakitan A/N. Jumlah pengujian dalam rakitan tidak diperhitungkan saat menggunakan opsi ini. Misalnya, jika rangkaian pengujian Anda berisi sepuluh rakitan pengujian dan Anda menggunakan dua agen untuk pekerjaan paralel, setiap agen akan menerima lima rakitan pengujian untuk dijalankan. Anda dapat mengurangi jumlah waktu yang diperlukan untuk menjalankan pengujian lebih lanjut dengan menggunakan lima agen, dalam hal ini setiap agen mendapatkan dua rakitan pengujian untuk dijalankan.

Opsi ini harus digunakan ketika pengujian dalam rakitan memiliki dependensi atau menggunakan AssemblyInitialize dan AssemblyCleanup, atau metode ClassInitialize ClassCleanup , untuk mengelola status dalam kode pengujian Anda.

Menjalankan pengujian secara paralel dalam alur build klasik

Jika Anda memiliki rangkaian pengujian besar atau pengujian integrasi jangka panjang untuk dijalankan di alur build klasik Anda, gunakan langkah-langkah berikut.

Catatan

Untuk menggunakan kemampuan multi-agen dalam alur build dengan server TFS lokal, Anda harus menggunakan TFS 2018 Update 2 atau versi yang lebih baru.

  1. Bangun pekerjaan menggunakan satu agen. Buat proyek Visual Studio dan terbitkan artefak build menggunakan tugas yang diperlihatkan dalam gambar berikut. Ini menggunakan pengaturan pekerjaan default (agen tunggal, tidak ada pekerjaan paralel).

    buildJobSingleAgent

  2. Jalankan pengujian secara paralel menggunakan beberapa agen:

    • Menambahkan pekerjaan agen

      AddAgentJobBuild

    • Konfigurasikan pekerjaan untuk menggunakan beberapa agen secara paralel. Contoh di sini menggunakan tiga agen.

      ParallelTestJobBuild

      Tip

      Untuk pengujian paralel secara besar-besaran, Anda dapat menentukan sebanyak 99 agen.

    • Tambahkan tugas Unduh Artefak Build ke pekerjaan. Langkah ini adalah tautan antara pekerjaan build dan pekerjaan pengujian, dan diperlukan untuk memastikan bahwa biner yang dihasilkan dalam pekerjaan build tersedia pada agen yang digunakan oleh pekerjaan pengujian untuk menjalankan pengujian. Pastikan bahwa tugas diatur untuk mengunduh artefak yang dihasilkan oleh 'Build saat ini' dan nama artefak sama dengan nama artefak yang digunakan dalam tugas Terbitkan Artefak Build dalam pekerjaan build.

      DownloadBuildArtifacts

    • Tambahkan tugas Visual Studio Test dan konfigurasikan untuk menggunakan strategi pemotongan yang diperlukan.

Menyiapkan pekerjaan untuk pengujian paralel di alur YAML

parallel Tentukan strategi dalam job dan tunjukkan berapa banyak pekerjaan yang harus dikirim. Anda dapat menentukan sebanyak 99 agen untuk meningkatkan pengujian untuk suite pengujian besar.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

Untuk informasi selengkapnya, lihat Skema YAML - Pekerjaan.

Menjalankan pengujian secara paralel dalam alur rilis klasik

Gunakan langkah-langkah berikut jika Anda memiliki rangkaian pengujian besar atau pengujian fungsional yang berjalan lama untuk dijalankan setelah menyebarkan aplikasi Anda. Misalnya, Anda mungkin ingin menyebarkan aplikasi web dan menjalankan pengujian Selenium di browser untuk memvalidasi fungsionalitas aplikasi.

Catatan

Untuk menggunakan kemampuan multi-agen dalam alur rilis dengan server TFS lokal, Anda harus menggunakan TFS 2017 Update 1 atau versi yang lebih baru.

  1. Menyebarkan aplikasi menggunakan satu agen. Gunakan Azure Deployment: Membuat atau Memperbarui Grup Sumber Daya atau tugas Azure App Service Deploy untuk menyebarkan aplikasi web ke layanan Azure App. Ini menggunakan pengaturan pekerjaan default (agen tunggal, tidak ada pekerjaan paralel).

    DeployApp1Agent

  2. Jalankan pengujian secara paralel menggunakan beberapa agen:

    • Menambahkan pekerjaan agen

      AddAgentJobRM

    • Konfigurasikan pekerjaan untuk menggunakan beberapa agen secara paralel. Contoh di sini menggunakan tiga agen.

      ParallelTestJobRM

      Tip

      Untuk pengujian paralel secara besar-besaran, Anda dapat menentukan sebanyak 99 agen.

    • Tambahkan tugas tambahan apa pun yang harus dijalankan sebelum tugas pengujian Visual Studio dijalankan. Misalnya, jalankan skrip PowerShell untuk menyiapkan data apa pun yang diperlukan oleh pengujian Anda.

      Tip

      Pekerjaan dalam alur rilis mengunduh semua artefak yang ditautkan ke alur rilis secara default. Untuk menghemat waktu, Anda dapat mengonfigurasi pekerjaan untuk mengunduh hanya artefak pengujian yang diperlukan oleh pekerjaan. Misalnya, biner aplikasi web tidak diharuskan untuk menjalankan pengujian Selenium dan mengunduhnya dapat dilewati jika aplikasi dan artefak pengujian diterbitkan secara terpisah oleh alur build Anda.

    • Tambahkan tugas Visual Studio Test dan konfigurasikan untuk menggunakan strategi pemotongan yang diperlukan.

      Tip

      Jika mesin pengujian tidak menginstal Visual Studio, Anda dapat menggunakan tugas Penginstal Platform Uji Visual Studio untuk memperoleh versi platform pengujian yang diperlukan.

Pengujian paralel secara masif dengan menggabungkan pekerjaan alur paralel dengan eksekusi pengujian paralel

Ketika pekerjaan paralel digunakan dalam alur, ia menggunakan beberapa mesin (agen) untuk menjalankan setiap pekerjaan secara paralel. Kerangka kerja pengujian dan runner juga menyediakan kemampuan untuk menjalankan pengujian secara paralel pada satu komputer, biasanya dengan membuat beberapa proses atau utas yang dijalankan secara paralel. Fitur paralelisme dapat dikombinasikan secara berlapis untuk mencapai pengujian paralel besar-besaran. Dalam konteks tugas Uji Visual Studio, paralelisme dapat digabungkan dengan cara berikut:

  1. Paralelisme ditawarkan oleh kerangka kerja pengujian. Semua kerangka kerja pengujian modern seperti MSTest v2, NUnit, xUnit, dan lainnya memberikan kemampuan untuk menjalankan pengujian secara paralel. Biasanya, pengujian dalam rakitan dijalankan secara paralel. Kerangka kerja pengujian ini berinteraksi dengan platform Visual Studio Test menggunakan adaptor pengujian dan kerangka kerja pengujian, bersama dengan adaptor yang sesuai, dan bekerja dalam proses host pengujian yang dibuat Platform Pengujian Visual Studio saat pengujian dijalankan. Oleh karena itu, paralelisasi pada lapisan ini berada dalam proses untuk semua kerangka kerja dan adaptor.

  2. Paralelisme yang ditawarkan oleh Visual Studio Test Platform (vstest.console.exe). Visual Studio Test Platform dapat menjalankan rakitan pengujian secara paralel. Pengguna vstest.console.exe akan mengenali ini sebagai sakelar /paralel. Hal ini dilakukan dengan meluncurkan proses host pengujian pada setiap inti yang tersedia, dan menyerahkannya pengujian dalam rakitan untuk dieksekusi. Ini berfungsi untuk kerangka kerja apa pun yang memiliki adaptor pengujian untuk platform pengujian Visual Studio karena unit paralelisasi adalah rakitan pengujian atau file pengujian. Ini, ketika dikombinasikan dengan paralelisme yang ditawarkan oleh kerangka kerja pengujian (dijelaskan di atas), memberikan tingkat paralelisasi maksimum saat pengujian berjalan pada satu agen dalam alur.

  3. Paralelisme yang ditawarkan oleh tugas Visual Studio Test (VSTest). Tugas VSTest mendukung menjalankan pengujian secara paralel di beberapa agen (atau mesin). Irisan pengujian dibuat, dan setiap agen menjalankan satu irisan sekaligus. Tiga strategi pemotongan yang berbeda, jika dikombinasikan dengan paralelisme yang ditawarkan oleh platform pengujian dan kerangka kerja pengujian (seperti yang dijelaskan di atas), menghasilkan hal-hal berikut:

    • Pengirisan berdasarkan jumlah tes dan agen. Irisan sederhana di mana pengujian dikelompokkan dalam irisan berukuran sama. Iringan berisi pengujian dari satu atau beberapa rakitan. Uji eksekusi pada agen kemudian sesuai dengan paralelisme yang dijelaskan dalam 1 dan 2 di atas.

    • Pemotongan berdasarkan waktu berjalan sebelumnya. Berdasarkan waktu sebelumnya untuk menjalankan tes, dan jumlah agen yang tersedia, pengujian dikelompokkan ke dalam irisan sehingga setiap irisan memerlukan waktu eksekusi yang kira-kira sama. Iringan berisi pengujian dari satu atau beberapa rakitan. Uji eksekusi pada agen kemudian sesuai dengan paralelisme yang dijelaskan dalam 1 dan 2 di atas.

    • Pengirisan berdasarkan rakitan. Iringan adalah rakitan pengujian, dan berisi tes yang semuanya termasuk dalam rakitan yang sama. Eksekusi pada agen kemudian sesuai dengan paralelisme yang dijelaskan dalam 1 dan 2 di atas. Namun, 2 mungkin tidak terjadi jika agen hanya menerima satu rakitan untuk dijalankan.

Bantuan dan dukungan