Spesifikasi lengkap tentang lingkungan eksekusi pengujian.
Latar belakang
Bahasa Bazel BUILD mencakup aturan yang dapat digunakan untuk menentukan program pengujian otomatis dalam banyak bahasa.
Pengujian dijalankan menggunakan bazel test
.
Pengguna juga dapat menjalankan biner pengujian secara langsung. Tindakan ini diizinkan, tetapi tidak didukung, karena pemanggilan tersebut tidak akan mematuhi mandat yang dijelaskan di bawah.
Pengujian harus bersifat hermetik: artinya, pengujian hanya boleh mengakses resource yang memiliki dependensi yang dideklarasikan. Jika pengujian tidak kebetulan tepat, pengujian tersebut tidak akan memberikan hasil yang dapat direproduksi secara historis. Hal ini dapat menjadi masalah yang signifikan untuk menemukan penyebab (menentukan perubahan yang merusak pengujian), auditabilitas teknik rilis, dan isolasi resource pengujian (framework pengujian otomatis seharusnya tidak DDOS server karena beberapa pengujian kebetulan berbicara dengannya).
Tujuan
Tujuan halaman ini adalah untuk secara resmi menetapkan lingkungan runtime dan perilaku Bazel pengujian yang diharapkan. Aturan ini juga akan memberlakukan persyaratan pada runner pengujian dan sistem build.
Spesifikasi lingkungan pengujian membantu penulis pengujian menghindari ketergantungan pada perilaku yang belum ditetapkan, sehingga infrastruktur pengujian lebih leluasa untuk membuat perubahan implementasi. Spesifikasi tersebut memperketat beberapa lubang yang saat ini memungkinkan banyak pengujian lulus, meskipun tidak bersifat hermetik, deterministik, dan reentran.
Halaman ini ditujukan untuk menjadi normatif dan otoritatif. Jika spesifikasi ini dan perilaku test runner yang tidak setuju, spesifikasi akan diprioritaskan.
Spesifikasi yang Diusulkan
Kata kunci "HARUS", "TIDAK PERLU", "DIPERLUKAN", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "recommended", "MAY", dan "OPTIONAL" harus ditafsirkan seperti yang dijelaskan dalam IETF RFC 2119.
Tujuan pengujian
Tujuan pengujian Bazel adalah untuk mengonfirmasi beberapa properti file sumber yang diperiksa ke dalam repositori. (Di halaman ini, "file sumber" mencakup data pengujian, output emas, dan data lainnya yang disimpan di bawah kontrol versi.) Satu pengguna menulis pengujian untuk menyatakan invarian yang diharapkan akan dipertahankan. Pengguna lain menjalankan pengujian nanti untuk memeriksa apakah invarian rusak. Jika pengujian bergantung pada variabel selain file sumber (non-hermetic), nilainya akan berkurang, karena pengguna nantinya tidak dapat memastikan perubahan yang mereka buat salah saat pengujian berhenti lulus.
Oleh karena itu, hasil pengujian hanya boleh bergantung pada:
- file sumber tempat pengujian memiliki dependensi yang dideklarasikan
- produk sistem build tempat pengujian memiliki dependensi yang dideklarasikan
- resource yang perilakunya dijamin oleh runner pengujian agar tetap konstan
Saat ini, perilaku tersebut tidak diterapkan. Namun, runner pengujian berhak menambahkan penerapan tersebut di masa mendatang.
Peran sistem build
Aturan pengujian sejalan dengan aturan biner karena setiap aturan harus menghasilkan program yang dapat dieksekusi. Untuk beberapa bahasa, ini adalah program stub yang menggabungkan harness khusus bahasa dengan kode pengujian. Aturan pengujian juga harus menghasilkan output lain. Selain file pengujian utama yang dapat dieksekusi, runner pengujian akan memerlukan manifes runfiles, file input yang harus disediakan untuk pengujian saat runtime, dan mungkin memerlukan informasi jenis, ukuran, dan tag pengujian.
Sistem build dapat menggunakan runfile untuk mengirimkan kode serta data. (Hal ini dapat digunakan sebagai pengoptimalan untuk membuat setiap biner pengujian lebih kecil dengan berbagi file di seluruh pengujian, seperti melalui penggunaan penautan dinamis.) Sistem build harus memastikan bahwa file yang dapat dieksekusi yang dihasilkan memuat file ini melalui image runfile yang disediakan oleh runner pengujian, bukan referensi hardcode ke lokasi absolut di hierarki sumber atau output.
Peran runner pengujian
Dari sudut pandang runner pengujian, setiap pengujian adalah program yang dapat
dipanggil dengan execve()
. Mungkin ada cara lain untuk menjalankan pengujian; misalnya,
IDE mungkin memungkinkan eksekusi pengujian Java dalam proses. Namun, hasil
menjalankan pengujian sebagai proses mandiri harus dianggap otoritatif. Jika
proses pengujian berjalan hingga selesai dan berhenti secara normal dengan kode keluar
nol, pengujian akan lulus. Hasil lainnya akan dianggap gagal. Secara
khusus, menulis salah satu string PASS
atau FAIL
ke stdout tidak
bermanfaat bagi runner pengujian.
Jika pengujian memakan waktu terlalu lama untuk dijalankan, melebihi beberapa batas resource, atau runner pengujian mendeteksi perilaku terlarang, pengujian dapat memilih untuk menghentikan pengujian dan memperlakukan operasi sebagai kegagalan. Runner tidak boleh melaporkan pengujian sebagai berhasil setelah mengirim sinyal ke proses pengujian atau turunannya.
Seluruh target pengujian (bukan metode atau pengujian individu) diberi jumlah
waktu terbatas untuk menyelesaikan pengujian. Batas waktu untuk pengujian didasarkan pada atribut
timeout
-nya
berdasarkan tabel berikut:
timeout | Batas Waktu (dtk) |
---|---|
video singkat | 60 |
longgar | 300 |
long | 900 |
abadi | 3600 |
Pengujian yang tidak secara eksplisit menentukan waktu tunggu memiliki satu tersirat berdasarkan
size
pengujian sebagai berikut:
ukuran | Label waktu tunggu tersirat |
---|---|
small | video singkat |
medium | longgar |
large | long |
sangat besar | abadi |
Pengujian "besar" tanpa setelan waktu tunggu eksplisit akan diberikan 900 detik untuk dijalankan. Pengujian "sedang" dengan waktu tunggu "pendek" akan dialokasikan 60 detik.
Tidak seperti timeout
, size
juga menentukan asumsi penggunaan puncak
resource lainnya (seperti RAM) saat menjalankan pengujian secara lokal, seperti yang dijelaskan dalam
Definisi umum.
Semua kombinasi label size
dan timeout
adalah legal, sehingga pengujian "besar" dapat dideklarasikan memiliki waktu tunggu "singkat". Anggap saja ini akan sangat cepat memicu
hal-hal yang mengerikan.
Pengujian dapat segera dilakukan, terlepas dari waktu tunggu. Pengujian tidak dikenai sanksi untuk waktu tunggu yang terlalu banyak, meskipun ada peringatan yang diberikan: Anda biasanya harus menetapkan waktu tunggu yang sesingkat mungkin tanpa menimbulkan gangguan.
Waktu tunggu pengujian dapat diganti dengan tanda bazel --test_timeout
saat
berjalan secara manual dalam kondisi yang diketahui lambat. Nilai
--test_timeout
dalam detik. Misalnya, --test_timeout=120
menetapkan waktu tunggu pengujian menjadi dua menit.
Ada juga batas bawah yang direkomendasikan untuk waktu tunggu pengujian sebagai berikut:
timeout | Waktu minimum (dtk) |
---|---|
video singkat | 0 |
longgar | 30 |
long | 300 |
abadi | 900 |
Misalnya, jika pengujian "sedang" selesai dalam 5,5 detik, pertimbangkan untuk menyetel timeout =
"short"
atau size = "small"
. Penggunaan opsi command line --test_verbose_timeout_warnings
bazel akan menampilkan pengujian yang ukuran yang ditentukan terlalu besar.
Ukuran dan waktu tunggu pengujian ditentukan dalam file BUILD sesuai dengan spesifikasi di sini. Jika tidak ditentukan, ukuran pengujian akan ditetapkan secara default ke "medium".
Jika proses utama pengujian keluar, tetapi beberapa turunannya masih berjalan, runner pengujian harus menganggap proses tersebut selesai dan menghitungnya sebagai berhasil atau gagal berdasarkan kode keluar yang diamati dari proses utama. Runner pengujian dapat menghentikan proses yang menyimpang. Pengujian tidak boleh membocorkan proses dengan cara ini.
Sharding pengujian
Pengujian dapat diparalelkan melalui sharding pengujian. Lihat
--test_sharding_strategy
dan shard_count
untuk
mengaktifkan sharding pengujian. Jika sharding diaktifkan, runner pengujian akan diluncurkan satu kali
per shard. Variabel lingkungan TEST_TOTAL_SHARDS
adalah jumlah shard, dan TEST_SHARD_INDEX
adalah indeks shard, mulai dari 0. Pelari menggunakan informasi ini untuk memilih pengujian
yang akan dijalankan - misalnya, menggunakan strategi round robin. Tidak semua runner pengujian mendukung
sharding. Jika mendukung sharding, runner harus membuat atau memperbarui
tanggal terakhir diubah dari file yang ditentukan oleh
TEST_SHARD_STATUS_FILE
. Sebaliknya, jika
--incompatible_check_sharding_support
diaktifkan, Bazel akan gagal dalam pengujian jika di-sharding.
Kondisi awal
Saat menjalankan pengujian, runner pengujian harus menetapkan kondisi awal tertentu.
Runner pengujian harus memanggil setiap pengujian dengan jalur ke file yang dapat dieksekusi yang ada di
argv[0]
. Jalur ini harus bersifat relatif dan berada di bawah direktori pengujian saat ini (yang ada di hierarki runfiles, lihat di bawah). Runner pengujian tidak boleh meneruskan argumen lain ke pengujian kecuali pengguna memintanya secara eksplisit.
Blok lingkungan awal harus disusun sebagai berikut:
Variabel | Nilai | Status |
---|---|---|
HOME |
nilai $TEST_TMPDIR |
disarankan |
LANG |
tidak disetel | wajib |
LANGUAGE |
tidak disetel | wajib |
LC_ALL |
tidak disetel | wajib |
LC_COLLATE |
tidak disetel | wajib |
LC_CTYPE |
tidak disetel | wajib |
LC_MESSAGES |
tidak disetel | wajib |
LC_MONETARY |
tidak disetel | wajib |
LC_NUMERIC |
tidak disetel | wajib |
LC_TIME |
tidak disetel | wajib |
LD_LIBRARY_PATH |
daftar direktori yang dipisahkan tanda titik dua yang berisi library bersama | opsional |
JAVA_RUNFILES |
nilai $TEST_SRCDIR |
tidak digunakan lagi |
LOGNAME |
nilai $USER |
wajib |
PATH |
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. |
direkomendasikan |
PWD |
$TEST_SRCDIR/workspace-name |
direkomendasikan |
SHLVL |
2 |
disarankan |
TEST_INFRASTRUCTURE_FAILURE_FILE |
jalur absolut ke file pribadi dalam direktori yang dapat ditulis (File ini hanya boleh digunakan untuk melaporkan kegagalan yang berasal dari infrastruktur pengujian, bukan sebagai mekanisme umum untuk melaporkan kegagalan pengujian). Dalam konteks ini, infrastruktur pengujian didefinisikan sebagai sistem atau library yang tidak khusus untuk pengujian, tetapi dapat menyebabkan kegagalan pengujian dengan tidak berfungsi. Baris pertama adalah nama komponen infrastruktur pengujian yang menyebabkan kegagalan, yang kedua adalah deskripsi kegagalan yang dapat dibaca manusia. Baris tambahan akan diabaikan.) | opsional |
TEST_LOGSPLITTER_OUTPUT_FILE |
jalur absolut ke file pribadi dalam direktori yang dapat ditulis (digunakan untuk menulis log protobuffer LogSplitter) | opsional |
TEST_PREMATURE_EXIT_FILE |
jalur absolut ke file pribadi dalam direktori yang dapat ditulis (digunakan untuk
menangkap panggilan ke exit() ) |
opsional |
TEST_RANDOM_SEED |
Jika opsi --runs_per_test digunakan,
TEST_RANDOM_SEED akan ditetapkan ke run number
(dimulai dengan 1) untuk setiap pengujian individual. |
opsional |
TEST_RUN_NUMBER |
Jika opsi --runs_per_test digunakan,
TEST_RUN_NUMBER akan ditetapkan ke run number
(dimulai dengan 1) untuk setiap pengujian individual. |
opsional |
TEST_TARGET |
Nama target yang sedang diuji | opsional |
TEST_SIZE |
Pengujian size |
opsional |
TEST_TIMEOUT |
Pengujian timeout dalam hitungan detik |
opsional |
TEST_SHARD_INDEX |
indeks shard, jika sharding digunakan |
opsional |
TEST_SHARD_STATUS_FILE |
jalur file untuk menyentuh guna menunjukkan dukungan untuk sharding |
opsional |
TEST_SRCDIR |
jalur absolut ke dasar hierarki runfiles | wajib |
TEST_TOTAL_SHARDS |
total
shard count ,
jika sharding digunakan |
opsional |
TEST_TMPDIR |
jalur absolut ke direktori pribadi yang dapat ditulis | wajib |
TEST_WORKSPACE |
nama ruang kerja repositori lokal | opsional |
TEST_UNDECLARED_OUTPUTS_DIR |
jalur absolut ke direktori pribadi yang dapat ditulis (digunakan untuk menulis output pengujian yang tidak dideklarasikan). File apa pun yang ditulis ke
direktori TEST_UNDECLARED_OUTPUTS_DIR akan dibuat menjadi zip dan
ditambahkan ke file outputs.zip di bagian
bazel-testlogs . |
opsional |
TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR |
jalur absolut ke direktori pribadi yang dapat ditulis (digunakan untuk menulis
anotasi .part dan .pb output output pengujian yang tidak dideklarasikan). |
opsional |
TEST_WARNINGS_OUTPUT_FILE |
jalur absolut ke file pribadi dalam direktori yang dapat ditulis (digunakan untuk menulis peringatan target pengujian) | opsional |
TESTBRIDGE_TEST_ONLY |
nilai
--test_filter ,
jika ditentukan |
opsional |
TZ |
UTC |
wajib |
USER |
nilai getpwuid(getuid())->pw_name |
wajib |
XML_OUTPUT_FILE |
Lokasi tempat tindakan pengujian harus menulis file output XML hasil pengujian. Jika tidak, Bazel akan menghasilkan file output XML default yang menggabungkan log pengujian sebagai bagian dari tindakan pengujian. Skema XML didasarkan pada skema hasil pengujian JUnit. | opsional |
BAZEL_TEST |
Menandakan bahwa file yang dapat dieksekusi sedang didorong oleh bazel test |
wajib |
Lingkungan mungkin berisi entri tambahan. Pengujian tidak boleh bergantung pada keberadaan, ketiadaan, atau nilai variabel lingkungan yang tidak tercantum di atas.
Direktori kerja awal harus berupa $TEST_SRCDIR/$TEST_WORKSPACE
.
Id proses saat ini, ID grup proses, ID sesi, dan ID proses induk belum ditetapkan. Prosesnya mungkin atau mungkin bukan pemimpin grup proses atau pemimpin sesi. Proses ini mungkin memiliki terminal kontrol, atau tidak. Prosesnya mungkin memiliki nol atau beberapa proses turunan yang sedang berjalan atau belum. Proses ini tidak boleh memiliki beberapa thread saat kode pengujian memperoleh kontrol.
Deskripsi file 0 (stdin
) harus terbuka untuk dibaca, tetapi item yang dilampirkan tidak ditentukan. Pengujian tidak boleh membacanya. Deskripsi file 1 (stdout
) dan 2
(stderr
) harus terbuka untuk ditulis, tetapi elemen yang dilampirkan tidak
ditentukan. Sumber data bisa berupa terminal, pipa, file reguler, atau apa pun
yang dapat digunakan untuk menulis karakter. Mereka dapat berbagi entri dalam tabel file terbuka (artinya tidak dapat mencari secara independen). Pengujian tidak boleh mewarisi deskriptor file terbuka lainnya.
umask awal harus 022
atau 027
.
Tidak ada alarm atau timer interval yang akan tertunda.
Masker awal dari sinyal yang diblokir akan kosong. Semua sinyal akan ditetapkan ke tindakan defaultnya.
Batas resource awal, baik virtual maupun hardware, harus ditetapkan sebagai berikut:
Resource | Batas |
---|---|
RLIMIT_AS |
tak terbatas |
RLIMIT_CORE |
belum ditetapkan |
RLIMIT_CPU |
tak terbatas |
RLIMIT_DATA |
tak terbatas |
RLIMIT_FSIZE |
tak terbatas |
RLIMIT_LOCKS |
tak terbatas |
RLIMIT_MEMLOCK |
tak terbatas |
RLIMIT_MSGQUEUE |
belum ditetapkan |
RLIMIT_NICE |
belum ditetapkan |
RLIMIT_NOFILE |
minimal 1024 |
RLIMIT_NPROC |
belum ditetapkan |
RLIMIT_RSS |
tak terbatas |
RLIMIT_RTPRIO |
belum ditetapkan |
RLIMIT_SIGPENDING |
belum ditetapkan |
RLIMIT_STACK |
tidak terbatas, atau 2044 KB <= rlim <= 8192 KB |
Waktu proses awal (seperti yang ditampilkan oleh times()
) dan pemakaian resource
(seperti yang ditampilkan oleh getrusage()
) tidak ditentukan.
Kebijakan dan prioritas penjadwalan awal tidak ditentukan.
Peran sistem host
Selain aspek konteks pengguna di bawah kontrol langsung runner pengujian, sistem operasi tempat eksekusi pengujian harus memenuhi properti tertentu agar pengujian yang dijalankan valid.
Filesystem
Direktori utama yang diamati oleh pengujian dapat berupa direktori utama sungguhan.
/proc
akan dipasang.
Semua alat build harus ada di jalur absolut pada /usr
yang digunakan oleh
penginstalan lokal.
Jalur yang dimulai dengan /home
mungkin tidak tersedia. Pengujian tidak boleh mengakses
jalur tersebut.
/tmp
akan dapat ditulis, tetapi pengujian harus menghindari penggunaan jalur ini.
Pengujian tidak boleh mengasumsikan bahwa jalur konstan apa pun tersedia untuk penggunaan eksklusif.
Pengujian tidak boleh mengasumsikan bahwa waktu diaktifkan untuk semua sistem file yang terpasang.
Pengguna dan grup
Root pengguna, tak seorang pun, dan pengujian unit harus ada. Root grup, tidak seorang pun, dan eng harus ada.
Pengujian harus dijalankan sebagai pengguna non-root. ID pengguna yang sebenarnya dan efektif harus sama; demikian pula untuk ID grup. Selain itu, ID pengguna, ID grup, nama pengguna, dan nama grup saat ini tidak ditentukan. Kumpulan ID grup tambahan tidak ditentukan.
ID pengguna dan ID grup saat ini harus memiliki nama yang sesuai yang dapat diambil dengan getpwuid()
dan getgrgid()
. Hal yang sama mungkin tidak berlaku untuk ID grup tambahan.
Pengguna saat ini harus memiliki direktori utama. Item tersebut tidak dapat ditulis. Pengujian tidak boleh mencoba menulis ke sana.
Networking
Nama host tidak ditentukan. Tanda ini mungkin berisi atau tidak berisi titik. Menyelesaikan nama host harus memberikan alamat IP host saat ini. Mengatasi masalah nama host setelah titik pertama juga harus berfungsi. Nama host localhost harus di-resolve.
Referensi lainnya
Pengujian diberikan setidaknya satu core CPU. Opsi lainnya mungkin tersedia, tetapi hal ini tidak dijamin. Aspek performa lainnya dari inti ini tidak ditetapkan. Anda dapat meningkatkan reservasi ke jumlah inti CPU yang lebih tinggi dengan menambahkan tag "cpu:n" (n adalah bilangan positif) ke aturan pengujian. Jika mesin memiliki total CPU yang lebih sedikit dari yang diminta, Bazel akan tetap menjalankan pengujian. Jika pengujian menggunakan sharding, setiap shard akan memesan jumlah inti CPU yang ditentukan di sini.
Pengujian dapat membuat subproses, tetapi tidak membuat grup atau sesi proses.
Ada batasan jumlah file input yang dapat digunakan oleh pengujian. Batas ini dapat berubah, tetapi saat ini berada dalam rentang puluhan ribu input.
Waktu dan tanggal
Waktu dan tanggal saat ini tidak ditentukan. Zona waktu sistem belum ditentukan.
X Windows mungkin tersedia atau tidak tersedia. Pengujian yang memerlukan server X harus memulai Xvfb.
Menguji interaksi dengan sistem file
Semua jalur file yang ditentukan dalam variabel lingkungan pengujian mengarah ke suatu tempat di sistem file lokal, kecuali jika ditentukan lain.
Pengujian hanya boleh membuat file dalam direktori yang ditentukan oleh
$TEST_TMPDIR
dan $TEST_UNDECLARED_OUTPUTS_DIR
(jika ditetapkan).
Direktori ini pada awalnya akan kosong.
Pengujian tidak boleh berupaya menghapus, melakukan chmod, atau mengubah direktori ini.
Direktori ini mungkin berupa link simbolis.
Jenis sistem file $TEST_TMPDIR/.
tetap tidak ditentukan.
Pengujian juga dapat menulis file .part ke
$TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR
untuk menganotasi file output yang tidak dideklarasikan.
Dalam kasus yang jarang terjadi, pengujian mungkin dipaksa untuk membuat file dalam /tmp
. Misalnya, batas panjang jalur untuk soket domain Unix biasanya memerlukan pembuatan soket di bagian /tmp
. Bazel tidak akan dapat
melacak file tersebut; pengujian itu sendiri harus berhati-hati dengan kebetulan, menggunakan jalur
unik untuk menghindari konflik dengan pengujian lain yang berjalan secara bersamaan dan proses
non-pengujian, serta membersihkan file yang dibuatnya di /tmp
.
Beberapa framework pengujian yang populer, seperti
JUnit4 TemporaryFolder
atau Go TempDir
, memiliki
caranya sendiri untuk membuat direktori sementara pada /tmp
. Framework pengujian ini
menyertakan fungsi yang membersihkan file di /tmp
, sehingga Anda dapat menggunakannya
meskipun membuat file di luar TEST_TMPDIR
.
Pengujian harus mengakses input melalui mekanisme runfiles, atau bagian lain dari lingkungan eksekusi yang secara khusus dimaksudkan untuk menyediakan file input.
Pengujian tidak boleh mengakses output lain dari sistem build di jalur yang disimpulkan dari lokasi eksekusinya sendiri.
Tidak ditentukan apakah hierarki runfile berisi file reguler, link
simbol, atau campuran. Hierarki runfiles mungkin berisi symlink ke direktori.
Pengujian harus menghindari penggunaan jalur berisi komponen ..
dalam hierarki
file file.
Tidak ada direktori, file, atau symlink dalam hierarki runfile (termasuk jalur yang
melintasi symlink) yang dapat ditulis. (Oleh karena itu, direktori kerja
awal tidak boleh dapat ditulis.) Pengujian tidak boleh berasumsi bahwa ada bagian dari
runfile yang dapat ditulis, atau dimiliki oleh pengguna saat ini (misalnya, chmod
dan chgrp
mungkin
gagal).
Hierarki runfile (termasuk jalur yang melintasi symlink) tidak boleh berubah selama eksekusi uji. Direktori induk dan pemasangan sistem file tidak boleh berubah dengan cara apa pun yang memengaruhi hasil penyelesaian jalur dalam hierarki file run.
Untuk menangkap exit awal, pengujian dapat membuat file di jalur yang ditentukan oleh TEST_PREMATURE_EXIT_FILE
saat memulai dan menghapusnya saat keluar. Jika Bazel melihat
file saat pengujian selesai, Google akan menganggap bahwa pengujian telah berakhir sebelum waktunya dan
menandainya sebagai gagal.
Konvensi tag
Beberapa tag dalam aturan pengujian memiliki arti khusus. Lihat juga
Bazel Build Encyclopedia tentang atribut tags
.
Tag | Arti |
---|---|
exclusive |
tidak menjalankan pengujian lain secara bersamaan |
external |
pengujian memiliki dependensi eksternal; nonaktifkan cache pengujian |
large |
Konvensi test_suite ; rangkaian pengujian besar |
manual * |
jangan sertakan target pengujian dalam pola target karakter pengganti seperti
:... , :* , atau :all |
medium |
Konvensi test_suite ; rangkaian pengujian sedang |
small |
Konvensi test_suite ; rangkaian pengujian kecil |
smoke |
Konvensi test_suite ; berarti aturan tersebut harus dijalankan sebelum
melakukan perubahan kode ke dalam sistem kontrol versi |
File run
Berikut ini, asumsikan ada aturan *_binary() yang berlabel
//foo/bar:unittest
, dengan dependensi runtime pada aturan yang diberi label
//deps/server:server
.
Lokasi
Direktori runfiles untuk //foo/bar:unittest
target adalah direktori
$(WORKSPACE)/$(BINDIR)/foo/bar/unittest.runfiles
. Jalur ini disebut sebagai runfiles_dir
.
Dependensi
Direktori runfiles dideklarasikan sebagai dependensi waktu kompilasi pada
aturan *_binary()
. Direktori runfiles itu sendiri bergantung pada kumpulan file build yang memengaruhi aturan *_binary()
atau dependensi waktu kompilasi atau runtime. Mengubah file sumber tidak akan memengaruhi struktur
direktori runfile, sehingga tidak akan memicu build ulang apa pun.
Daftar Isi
Direktori runfiles berisi hal berikut:
- Symlink ke dependensi runtime: setiap OutputFile dan CommandRule yang
merupakan dependensi runtime dari aturan
*_binary()
direpresentasikan oleh satu symlink di direktori runfiles. Nama symlink adalah$(WORKSPACE)/package_name/rule_name
. Misalnya, symlink untuk server akan diberi nama$(WORKSPACE)/deps/server/server
, dan jalur lengkapnya adalah$(WORKSPACE)/foo/bar/unittest.runfiles/$(WORKSPACE)/deps/server/server
. Tujuan symlink adalah OutputFileName() dari OutputFile atau CommandRule, yang dinyatakan sebagai jalur absolut. Dengan demikian, tujuan symlink mungkin adalah$(WORKSPACE)/linux-dbg/deps/server/42/server
. - Symlinks ke sub-runfile: untuk setiap
*_binary()
Z yang merupakan dependensi runtime*_binary()
C, ada link kedua di direktori runfiles C ke runfile Z. Nama symlink adalah$(WORKSPACE)/package_name/rule_name.runfiles
. Target symlink adalah direktori runfiles. Misalnya, semua sub-program memiliki direktori runfile yang sama.