คุณจะทดสอบซอฟต์แวร์ที่ไวต่อเวลาได้อย่างไร


9

ตามเวลาที่ละเอียดอ่อนฉันหมายถึงตัวอย่างสคริปต์ที่ทำงานเพียงเดือนละครั้งหรือสคริปต์ที่ทำงานอย่างต่อเนื่อง แต่ให้ผลลัพธ์ที่แน่นอนเพียงเดือนละครั้ง เห็นได้ชัดว่าคุณสามารถทดสอบหน่วยสำหรับกรณีจำนวนมาก แต่มีข้อยกเว้น (ในความเข้าใจของฉัน)

ตัวอย่างล่าสุดที่ฉันพบคือตั้งค่างาน cron เพื่อทำงานในวันที่สองถึงวันสุดท้ายของทุกเดือน สิ่งนี้จำเป็นต้องใช้เชลล์สคริปต์พร้อมแท็บ cron เพื่อให้ได้วันที่ถูกต้องของเดือนสำหรับ cron สิ่งที่ชอบ:

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

ฉันไม่คุ้นเคยกับสคริปต์และไม่คุ้นเคยกับเชลล์สคริปต์โดยทั่วไปดังนั้นจึงไม่มีวิธีที่ดีในการทดสอบนอกจากรอสิ้นเดือนเพื่อมาและดูว่าสคริปต์ทำงานอย่างถูกต้องหรือไม่ (จริง ๆ แล้วโซลูชันของฉันคือการหาเพื่อน คนงานที่รู้มากขึ้นเกี่ยวกับ cron และ shell scripting ที่ฉันทำ)

ดังนั้นฉันอยากรู้ว่ามีวิธีแก้ไขที่มีประโยชน์สำหรับการทดสอบสคริปต์ที่ละเอียดอ่อนเวลาหรือไม่


3
คุณสามารถรันสิ่งนี้บน VM และตั้งค่าเวลาของระบบเป็นแบบสะดวกเช่นเที่ยงคืนก่อนวันที่สคริปต์ควรทำงานหรือสิ่งนั้น
Vitor Py

2
crontab เรียกใช้งานเชลล์สคริปต์ปกติคุณสามารถรันสคริปต์ด้วยมือ (ในแซนด์บ็อกซ์หรือ vm ถ้าคุณกลัวว่ามันจะทำอะไร) โดยไม่ต้องรอ crontab
crasic

2
คำตอบของฉันอาจ overkill สำหรับกรณีเฉพาะของคุณ: เพียงเรียกใช้สคริปต์ แต่คำถามที่ใหญ่กว่านั้นต้องการโซลูชันเช่นการจำลองเสมือนและเครื่องมือวัด
Macneil

คำตอบ:


7

นอกเหนือจากการทดสอบหน่วยแล้วยังมีอีกสองกลยุทธ์สำหรับการตั้งค่าการทดสอบอัตโนมัติเพื่อจัดการกับปัญหาเฉพาะของระบบปฏิบัติการ:

  • การจำลองเสมือน : คุณตั้งค่าอิมเมจ OS หลายรายการ (ตัวอย่างเช่นการใช้VMWare ) ด้วยการกำหนดค่าที่แน่นอนที่คุณต้องการตั้งค่าวิธีการดึงไบนารีเพื่อทดสอบโดยอัตโนมัติ (โดยปกติจะติดตั้งไดเรกทอรีพิเศษลงในพื้นที่ของ VM) ทดสอบ.

หรือ:

  • การประพันธ์ดนตรี : เพิ่มifเงื่อนไขพิเศษลงในโปรแกรมของคุณด้วยตนเองซึ่งจะทำให้โปรแกรมทำงานแตกต่างกัน FOOBAR_TEST_TIME_WITH_T=500ภายใต้ระบบปฏิบัติการยูนิกซ์นี้จะทำได้โดยการตรวจสอบถ้าตัวแปรสภาพแวดล้อมบางอย่างที่มีการตั้งค่าเช่น การทดสอบอัตโนมัติของคุณจะใช้การตั้งค่าตัวแปรสภาพแวดล้อมและตัวแปรสภาพแวดล้อมที่แตกต่างกันเพื่อดำเนินการตามที่คุณต้องการ

คุณสามารถเชื่อมโยงไปยังไลบรารีต่าง ๆ ได้หากการโต้ตอบของคุณสามารถแสดงในระดับไลบรารีซึ่งคุณอาจคิดว่าเป็น virtualization (ถ้า "library" เป็นเคอร์เนลระบบปฏิบัติการ) หรือเป็นเทคนิคการใช้เครื่องมือ อาจใช้คำศัพท์ทั้งคู่แม้ว่าคำว่าเวอร์ชวลไลเซชันเสมือนที่ใช้ในปัจจุบันมักจะหมายถึงบางสิ่งบางอย่างเช่น VMWare ห้องสมุดเฉพาะสำหรับการกลับค่ากระป๋องใหม่หรือทำงานปฏิสัมพันธ์ที่เฉพาะเจาะจงจะเป็นเยาะเย้ยหรือต้นขั้ววิธี

นอกจากนี้ยังมีเครื่องมือเครื่องมืออัตโนมัติซึ่งสามารถเขียนไบนารีของคุณเพื่อรับเอฟเฟกต์อื่น ๆ ที่ต้องการเช่นระบบไฟล์ที่เต็ม

โดยรวมแล้วเป้าหมายของคุณคือการหาจุดบกพร่อง ในการตรวจสอบกรณีแปลก ๆ เช่นระบบไฟล์ที่เต็มไปด้วยวิธีที่ง่ายที่สุดและยังคงมีประสิทธิภาพในการใช้งานโปรแกรมของคุณเองไปสู่ ​​virtualization หรือกำหนดค่าเครื่องด้วยตนเอง


ฉันคิดว่า 'ไลบรารี่ virtualization' ของคุณเป็นที่รู้จักกันดีว่าเป็นการเยาะเย้ยหรือใช้ไลบรารี่จำลอง
Javier

10

มีประสิทธิภาพมากที่สุด - เปลี่ยนวันที่ของเครื่องที่คุณกำลังทดสอบ ตั้งไว้ก่อนหน้าเล็กน้อยเมื่อต้องการใช้งานและตรวจสอบเมื่อมันเริ่มทำงานและทำงานได้อย่างถูกต้อง สิ่งนี้ไม่สามารถทำได้เสมอไปหากมีเครื่องหลายเครื่องที่เกี่ยวข้องหรือหากจำเป็นต้องใช้ทรัพยากรซึ่ง บริษัท ของคุณไม่สามารถควบคุมได้ ตรวจสอบให้แน่ใจว่าคุณกำลังทำมันเป็นเวลาหลายเดือนและให้แน่ใจว่าคุณเปลี่ยนปีสองสามครั้งเพื่อทดสอบกุมภาพันธ์


1
หากคุณมีซอฟต์แวร์ที่ติดตั้งโดยมีสิทธิ์ใช้งาน (การประเมิน n) ในเวลา จำกัด การติดตั้งนาฬิกาอาจทำให้พวกเขาปิดกั้นการทำงาน
Marjan Venema

ในบาง บริษัท เวิร์กสเตชันทั้งหมดที่เข้าสู่เครือข่ายไม่ควรเบี่ยงเบนจาก "เซิร์ฟเวอร์" เวลา 5 นาทีมิฉะนั้นเวิร์กสเตชันจะล็อค เกิดขึ้นกับฉัน :-)
OnesimusUnbound

1

ฉันไม่รู้เกี่ยวกับสคริปต์ของคุณ แต่ฉันพยายามใช้พารามิเตอร์บางอย่างที่ฉันสามารถกำหนดวันที่ได้ ในกรณีของคุณหากไม่ได้รับวันที่เริ่มต้นถึงสิ้นเดือน ในรหัสของคุณใช้พารามิเตอร์วันที่และเรียกใช้ถ้าวันนี้เป็นสองวันก่อน ไม่เพียง แต่คุณจะสามารถทดสอบได้ (ผ่านในวันที่สองวันนับจากนี้) แต่ยังเรียกใช้ในวันถัดไปในกรณีที่บางสิ่งบางอย่างทำให้ไม่สามารถทำงานได้ภายใต้สถานการณ์ปกติ (ไฟฟ้าขัดข้อง, เซิร์ฟเวอร์ขัดข้อง ฯลฯ )


1

ตั้งแต่ที่คุณพูดถึง crontab ฉันคิดว่าคุณกำลังทำงานในระบบ nix ในกรณีนั้นฉันคิดว่ามันจะคุ้มค่าที่คุณจะได้ลองใช้ libfaketime:
http://www.code-wizards.com/projects/libfaketime/

ด้วยความมหัศจรรย์ของ LD_PRELOAD เราสามารถโหลดฟังก์ชั่นห้องสมุดรุ่นที่กำหนดเองได้ตราบใดที่มันเข้ากับอินเตอร์เฟส สิ่งที่ libfaketime ทำคือโหลดเวอร์ชันของการเรียกระบบเวลาที่อนุญาตให้คุณปรับแต่งพฤติกรรมของพวกเขาผ่านตัวแปรสภาพแวดล้อม คุณสามารถบังคับให้เวลา () เพื่อส่งคืนค่าฮาร์ดโค้ดหรือออฟเซ็ตจากเวลาปัจจุบันโดยไม่ส่งผลกระทบต่อคนอื่นในกล่อง


0

ไม่จำเป็นต้องทดสอบ cron มากนักเนื่องจากมีการทดสอบ ("การทดสอบการผลิต") มาหลายชั่วอายุคนแล้ว แน่นอนถ้าคุณทำงานกับเชลล์สคริปต์คุณอาจกำหนดวันที่ / เวลาในเครื่องเสมือน

วิธีที่ดีที่สุดในการจัดการกับเรื่องนี้คือ "เยาะเย้ยนาฬิกา" โดยใช้เคล็ดลับการเขียนโปรแกรมอย่างใดอย่างหนึ่งหรืออย่างอื่นเพื่อปลอมเวลา ในเชลล์สคริปต์คุณสามารถใช้ไวยากรณ์ $ {: -} เพื่อใช้ชุดวันที่ในตัวแปรสภาพแวดล้อมและถอยกลับตามเวลาจริงหากไม่ได้ถูกบังคับ

ในภาษาอื่นเราใช้ห้องสมุดจำลองหรือสร้างสิ่งที่เป็นนามธรรมตลอดเวลา

นาฬิกาจำลองนั้นดีเพราะคุณสามารถทำให้เป็นแบบอัตโนมัติแทนที่จะต้องตั้งค่าการทดสอบด้วยตนเอง นี่คือประโยชน์ที่ดีมากเมื่อพูดถึงการแก้ไขสคริปต์ / รหัสในภายหลังและคุณสามารถบอกได้อย่างง่ายดายว่ามันยังใช้งานได้หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.