Zaman duyarlı yazılımları nasıl test edersiniz?


9

Zamana duyarlı olarak, örneğin ayda yalnızca bir kez çalışan bir komut dosyası veya sürekli çalışan ancak ayda yalnızca bir kez belirli bir çıktı veren bir komut dosyası kastediyorum. Açıkçası pek çok durumda test yapabilirsin ama istisnalar var (benim görüşüme göre).

Karşılaştığım son bir örnek, her ayın ikinci gününden son gününe kadar bir cron işi kurmaktı. Bu, cron için ayın doğru gününü elde etmek için cron sekmesine sahip bir kabuk komut dosyası kullanarak gerekliydi:

1 0 [shell command] * * [my script]

Senaryoya aşina değildim ve genel olarak kabuk scriptlerine aşina değildim ve bu yüzden test etmek için ayın sonunu beklemek ve senaryonun doğru bir şekilde çalışıp çalışmadığını görmek dışında iyi bir yolu yoktu (aslında benim çözümüm bir ortak yaptığım cron ve kabuk komut dosyaları hakkında çok şey bilen işçi).

Bu nedenle, zamana duyarlı komut dosyalarını test etmek için yararlı bir çalışma olup olmadığını merak ediyorum.


3
Bunu bir sanal makinede çalıştırabilir ve sistem saatini, komut dosyasının çalışması gereken günden önceki gece yarısı gibi uygun bir zamana veya bunun gibi bir şeye ayarlayabilirsiniz.
Vitor Py

2
crontab düzenli kabuk komut dosyalarını çalıştırırsa, komut dosyasını el ile yürütebilirsiniz (ne yapacağından korkuyorsanız bir sanal alanda veya
vm'de

2
Cevabınız sizin özel durumunuz için aşırıya kaçmış olabilir: Sadece senaryoyu çalıştırın. Ancak daha büyük sorunun sanallaştırma ve enstrümantasyon gibi çözümlere ihtiyacı olacaktır.
Macneil

Yanıtlar:


7

Birim testine ek olarak, işletim sistemine özgü bir sorunla başa çıkmak için otomatik testler ayarlamak için iki strateji daha vardır:

  • Sanallaştırma : Tam olarak istediğiniz yapılandırmalarla birkaç OS görüntüsü (örneğin, VMWare kullanarak) kurarsınız , test etmek için ikili dosyayı otomatik olarak çekmenin bir yolunu ayarlarsınız (genellikle VM'nin alanına özel bir dizin takarak) ve ardından Ölçek.

Veya:

  • Enstrümantasyon : ifProgramınıza manuel olarak programın farklı davranmasını sağlayacak özel koşullar ekleyin . Unix altında bu, belirli bir ortam değişkeninin (örneğin) ayarlanıp ayarlanmadığını kontrol ederek yapılır FOOBAR_TEST_TIME_WITH_T=500. Otomatik testleriniz daha sonra ihtiyacınız olanı yürütmek için sadece ortam değişkenlerinin farklı ayarlarını ve farklı ortam değişkenlerini kullanır.

Etkileşimleriniz kütüphane düzeyinde ifade edilebiliyorsa, sanallaştırma ("kütüphane" işletim sistemi çekirdeği ise) veya bir enstrümantasyon tekniği olarak düşünebileceğiniz farklı kütüphanelere de bağlanabilirsiniz. Her iki terim de kullanılabilir, ancak günümüzde kullanılan sanallaştırma terimi neredeyse her zaman VMWare gibi bir şey anlamına gelir. Özel olarak hazır değerleri döndürmek veya belirli etkileşimleri yeniden çalıştırmak için bir kütüphane sahte veya saplama yaklaşımı olacaktır.

Dosya sisteminin dolu olması gibi diğer istenen efektleri almak için ikili dosyalarınızı yeniden yazabilen otomatik enstrümantasyon araçları da vardır.

Genel olarak, amacınız hataları bulmaktır. Dosya sisteminin aşırı dolması gibi garip durumları kontrol etmek için, programınızı manuel olarak enstrüman haline getirerek sanallaştırma veya manuel makine yapılandırma yoluna nadiren gidebilirsiniz.


senin 'kütüphane sanallaştırma' daha alay, ya da daha doğrusu, alay kitaplığı olarak bilinen olduğunu düşünüyorum.
Javier

10

En etkili - Test ettiğiniz makinenin tarihini değiştirin. Çalışması gerektiğinde biraz önce ayarlayın ve ne zaman başladığını ve doğru çalıştığını doğrulayın. Ancak, birden fazla makine varsa veya şirketiniz üzerinde herhangi bir kontrole sahip olmayan kaynaklar gerekiyorsa bu her zaman mümkün değildir. Ancak bunu birkaç ay boyunca yaptığınızdan ve Şubat'ı test etmek için yılı birkaç kez değiştirdiğinizden emin olun.


1
sınırlı bir süre için (n değerlendirme) lisansı yüklü bir yazılımınız varsa, saatin yanıp sönmesi bu yazılımların yürütülmesini engellemelerini tetikleyebilir.
Marjan Venema

Bazı şirketlerde, ağa giriş yapılan tüm iş istasyonları "sunucu" süresinden 5 dakika sapmamalıdır, aksi takdirde iş istasyonu kilitlenir. Bana oldu :-)
OnesimusUbound

1

Senaryonuzu bilmiyorum, ama tarihi ayarlayabileceğim bir çeşit parametre kullanmaya çalışıyorum. Sizin durumunuzda, herhangi bir tarih belirtilmemişse, varsayılan olarak ay sonuna kadar. Kodunuzda date parametresini alın ve bugün iki gün öncesindeyse çalıştırın. Sadece test etmekle kalmayacaksınız (şu andan iki gün sonra bir tarihte geçecek), aynı zamanda bir şeyin normal şartlar altında çalışmasını engellediği takdirde (elektrik kesintisi, sunucu kapalı vb.)


1

Crontab'dan bahsettiğinizden beri, bir nix ortamında koştuğunuzu varsayıyorum. Bu durumda, libfaketime göz atmanın zaman ayırmaya değer olacağını düşünüyorum:
http://www.code-wizards.com/projects/libfaketime/

LD_PRELOAD büyüsü sayesinde, arayüzle eşleştikleri sürece kütüphane fonksiyonlarının özel versiyonlarını yükleyebiliriz. Libfaketime'ın yaptığı şey, zaman sistemi çağrılarının, ortam değişkenleri aracılığıyla davranışlarını özelleştirmenize izin veren yük sürümlerini yüklemesidir. Time () öğesini, koddaki başka birini etkilemeden geçerli koddan sabit kodlanmış bir değer veya ofset döndürmeye zorlayabilirsiniz.


0

Birçok nesiller için oldukça fazla test edildiğinden ("üretim testi"), cron'u test etmeye çok fazla ihtiyaç yoktur. Elbette, bir kabuk komut dosyası ile çalışıyorsanız, sanal makinede tarih / saati ayarlayabilirsiniz.

Bununla başa çıkmanın tercih edilen yolu, zamanı taklit etmek için bir programlama hilesi veya başka bir şey kullanarak "saati alay etmek" tir. Kabuk komut dosyalarında $ {: -} sözdizimini bir ortam değişkeninde ayarlanmış bir tarihi kullanmak ve zorunlu değilse gerçek zamana geri dönmek için kullanabilirsiniz.

Diğer dillerde sahte kütüphaneler kullanıyoruz ya da 24 saat soyutlama yapıyoruz.

Sahte saat iyidir, çünkü testinizi manuel olarak ayarlamak yerine otomatikleştirebilirsiniz. Komut dosyasını / kodu daha sonra değiştirmek söz konusu olduğunda bu çok büyük bir avantajdır ve hala çalışıp çalışmadığını kolayca anlayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.