Maksud saya sensitif waktu misalnya, skrip yang hanya berjalan sebulan sekali atau skrip yang berjalan terus-menerus tetapi memberikan output tertentu hanya sebulan sekali. Jelas Anda dapat menguji unit untuk banyak kasus tetapi ada pengecualian (dalam pemahaman saya).
Contoh terakhir yang saya temui adalah mengatur pekerjaan cron untuk dijalankan pada hari kedua hingga terakhir setiap bulan. Ini diperlukan menggunakan skrip shell dengan tab cron untuk mendapatkan hari yang benar di bulan tersebut untuk cron, seperti:
1 0 [shell command] * * [my script]
Saya tidak terbiasa dengan skrip dan tidak terbiasa dengan skrip shell secara umum sehingga tidak memiliki cara yang baik untuk mengujinya selain menunggu akhir bulan yang akan datang dan melihat apakah skrip dieksekusi dengan benar (sebenarnya solusi saya adalah menemukan sebuah co- pekerja yang tahu lebih banyak tentang cron dan shell scripting yang saya lakukan).
Jadi saya ingin tahu apakah ada pekerjaan yang berguna untuk menguji skrip sensitif waktu.
Jawaban:
Selain pengujian unit, ada dua strategi lain untuk menyiapkan tes otomatis untuk menangani masalah spesifik OS:
Atau:
if
kondisi khusus ke program Anda yang akan membuat program berperilaku berbeda. Di bawah Unix, ini akan dilakukan dengan memeriksa jika variabel lingkungan tertentu diatur, sepertiFOOBAR_TEST_TIME_WITH_T=500
. Pengujian otomatis Anda kemudian hanya akan menggunakan pengaturan variabel lingkungan yang berbeda, dan variabel lingkungan yang berbeda, untuk menjalankan apa yang Anda butuhkan.Anda juga dapat menautkan ke pustaka yang berbeda, jika interaksi Anda dapat diekspresikan di tingkat pustaka, yang dapat Anda anggap sebagai virtualisasi (jika "pustaka" adalah kernel OS) atau sebagai teknik instrumentasi. Kedua istilah tersebut dapat digunakan, meskipun istilah virtualisasi seperti yang digunakan saat ini hampir selalu berarti sesuatu seperti VMWare. Perpustakaan khusus untuk mengembalikan nilai kalengan atau menjalankan kembali interaksi spesifik akan menjadi pendekatan tiruan atau rintisan .
Ada juga alat instrumentasi otomatis, yang dapat menulis ulang binari Anda untuk mendapatkan efek lain yang diinginkan, seperti sistem file menjadi penuh.
Secara keseluruhan, tujuan Anda adalah menemukan bug. Untuk memeriksa kasus-kasus aneh seperti sistem file yang overfull, itu paling mudah dan masih efektif untuk hanya secara manual instrumen program Anda, pergi virtualisasi atau rute konfigurasi mesin manual jarang jika pernah.
sumber
Yang paling efektif - Ubah tanggal mesin yang Anda uji. Tetapkan sedikit sebelum sebelum dijalankan, dan verifikasi kapan dimulai dan berjalan dengan benar. Namun ini tidak selalu memungkinkan jika ada beberapa mesin yang terlibat, atau, jika sumber daya diperlukan sehingga perusahaan Anda tidak memiliki kendali atas. Pastikan Anda melakukannya selama beberapa bulan, dan pastikan Anda mengubah tahun untuk menguji Februari.
sumber
Saya tidak tahu tentang skrip Anda, tetapi saya mencoba menggunakan semacam parameter tempat saya dapat mengatur tanggal. Dalam kasus Anda, jika tidak ada tanggal yang diberikan, default ke akhir bulan. Dalam kode Anda, ambil parameter tanggal dan jalankan jika hari ini adalah dua hari sebelumnya. Anda tidak hanya akan dapat mengujinya (melewati tanggal dua hari dari sekarang), tetapi juga menjalankan hari berikutnya seandainya ada sesuatu yang mencegahnya berjalan dalam keadaan normal (listrik mati, server mati, dll.).
sumber
Karena Anda menyebutkan crontab, saya menganggap Anda berjalan di lingkungan nix. Dalam hal ini, saya pikir itu akan bernilai saat Anda untuk memeriksa libfaketime:
http://www.code-wizards.com/projects/libfaketime/
Melalui keajaiban LD_PRELOAD, kami dapat memuat versi khusus fungsi pustaka selama cocok dengan antarmuka. Apa yang dilakukan libfaketime adalah memuat versi panggilan sistem waktu yang memungkinkan Anda untuk menyesuaikan perilaku mereka melalui variabel lingkungan. Anda dapat memaksa waktu () untuk mengembalikan nilai kode-keras atau offset dari waktu saat ini, semua tanpa mempengaruhi orang lain di dalam kotak.
sumber
Tidak perlu banyak untuk menguji cron, karena sudah cukup banyak diuji ("uji produksi") selama beberapa generasi. Tentu saja, jika Anda bekerja dengan skrip shell, Anda dapat mengatur tanggal / waktu dalam mesin virtual.
Cara yang disukai untuk menangani ini adalah "mengejek jam", menggunakan satu trik pemrograman atau lainnya untuk memalsukan waktu. Dalam skrip shell Anda dapat menggunakan sintaks $ {: -} untuk menggunakan tanggal yang ditetapkan dalam variabel lingkungan, dan kembali pada waktu aktual jika itu tidak dipaksa.
Dalam bahasa lain kami menggunakan perpustakaan tiruan atau membangun abstraksi sepanjang waktu.
Jam tiruan itu bagus karena Anda dapat mengotomatiskannya daripada harus mengatur tes secara manual. Ini adalah manfaat yang sangat besar ketika harus memodifikasi skrip / kode nanti dan Anda dapat dengan mudah mengetahui apakah itu masih berfungsi atau tidak.
sumber