การพัฒนาที่ขับเคลื่อนด้วยการทดสอบสำหรับการปรับใช้โครงสร้างพื้นฐาน?


11

ฉันใช้หุ่นเชิดเพื่อปรับใช้โครงสร้างพื้นฐานและงานส่วนใหญ่ที่ฉันทำคือกับ บริษัท Web 2.0 ที่มุ่งเน้นการพัฒนาที่ขับเคลื่อนด้วยการทดสอบสำหรับเว็บแอปพลิเคชันของพวกเขา ใครบ้างที่นี่ใช้วิธีการทดสอบขับเคลื่อนเพื่อพัฒนาการกำหนดค่าเซิร์ฟเวอร์ของพวกเขา? คุณใช้เครื่องมืออะไรในการทำสิ่งนี้? การทดสอบของคุณลึกแค่ไหน?

คำตอบ:


3

ผมไม่คิดว่าคุณสามารถใช้ทดสอบขับเคลื่อนการพัฒนา แต่คุณสามารถลองทดสอบหน่วยบนเซิร์ฟเวอร์ใหม่ได้อย่างแน่นอน

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

อาจใช้สคริปต์ python เพื่อเชื่อมต่อกับฐานข้อมูลเว็บเพจและบริการ ssh แล้วส่ง PASS / FAIL กลับมา จะเป็นการเริ่มต้นที่ดีสำหรับคุณ

หรือคุณอาจรวมมันเข้ากับโซลูชันการตรวจสอบเช่น Zenoss, Nagios หรือ Munin จากนั้นคุณสามารถทดสอบระหว่างการปรับใช้ และตรวจสอบระหว่างการผลิต


ฉันแค่ +1 ความคิดเห็นทั้งหมดที่นี่ ว้าว.
โจเซฟ Kern

1

ฉันคิดว่าโจเซฟเคอร์นอยู่ในแนวทางที่ถูกต้องด้วยเครื่องมือตรวจสอบ วัฏจักร TDD ทั่วไปคือ: เขียนการทดสอบใหม่ที่ล้มเหลวจากนั้นอัปเดตระบบเพื่อให้การทดสอบที่มีอยู่ทั้งหมดผ่าน สิ่งนี้จะง่ายต่อการปรับใช้กับ Nagios: เพิ่มการตรวจสอบความล้มเหลวกำหนดค่าเซิร์ฟเวอร์เรียกใช้การตรวจสอบทั้งหมดอีกครั้ง ลองคิดดูสิฉันเคยทำแบบนี้บ้างแล้ว

หากคุณต้องการฮาร์ดคอร์จริงๆคุณต้องแน่ใจว่าได้เขียนสคริปต์เพื่อตรวจสอบทุกแง่มุมที่เกี่ยวข้องของการกำหนดค่าเซิร์ฟเวอร์ ระบบการตรวจสอบเช่น Nagios อาจไม่เกี่ยวข้องกับบางระบบ (เช่นคุณอาจไม่ "เฝ้าดู" เวอร์ชั่นระบบปฏิบัติการของคุณ) แต่ไม่มีเหตุผลที่คุณไม่สามารถมิกซ์แอนด์แมทช์ได้ตามความเหมาะสม


1
ฉันข้ามขั้นตอนหนึ่งในวัฏจักร TDD ที่เป็นที่ยอมรับ: การสร้างใหม่ สำหรับผู้ดูแลเซิร์ฟเวอร์นี้จะคล้ายกับการโยกย้ายหรือการกระจายบริการเพื่อให้เกิดการกำหนดค่าที่ดีขึ้นหลังจากการเปลี่ยนแปลงแต่ละครั้ง: ฉันคิดว่านี่เป็นคำบรรยายลักษณะงานที่ค่อนข้างดีสำหรับผู้ดูแลระบบส่วนใหญ่ในปัจจุบัน
Zac Thompson

วิธีนี้ส่วนใหญ่เป็นสิ่งที่ฉันทำอยู่แล้ว (แม้ว่า s / Nagios / Zabbix /) อย่างไรก็ตามการเปลี่ยนแปลงเหล่านี้ไปสู่การผลิตโดยตรงและรู้สึกว่าฉันสามารถทำได้ดีกว่า
Jon Topper

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

1

แม้ว่าฉันจะไม่สามารถทำ TDD กับหุ่นกระบอกได้ แต่เราก็มีวงจรที่ดีพอที่จะป้องกันการเปลี่ยนแปลงจากการผลิตโดยไม่ต้องทดสอบ เรามีการตั้งค่าหุ่นกระบอกสองตัวหนึ่งตัวหนึ่งคือหุ่นกระบอกผลิตของเราและอีกอย่างคือหุ่นกระบอกพัฒนาของเรา เราใช้ "สภาพแวดล้อม" ของ Puppet เพื่อตั้งค่าต่อไปนี้:

  • สภาพแวดล้อมการพัฒนา (หนึ่งสำหรับแต่ละคนที่ทำงานกับหุ่นกระบอก)
  • สภาพแวดล้อมการทดสอบ
  • สภาพแวดล้อมการผลิต

นักพัฒนาแอปพลิเคชันของเราทำงานบนเครื่องเสมือนจริงซึ่งได้รับการกำหนดค่า Puppet จากสภาพแวดล้อม "การทดสอบ" ของ Puppetmaster เมื่อเรากำลังพัฒนาหุ่นกระบอกเรามักจะตั้งค่า VM เพื่อทำหน้าที่เป็นลูกค้าทดสอบในระหว่างกระบวนการพัฒนาและชี้ไปที่สภาพแวดล้อมการพัฒนาส่วนบุคคลของเรา เมื่อเรามีความสุขกับการแสดงออกของเราแล้วเราจะผลักพวกเขาไปสู่สภาพแวดล้อมการทดสอบที่ซึ่งผู้พัฒนาแอพพลิเคชั่นจะได้รับการเปลี่ยนแปลงใน VMs ของพวกเขา - พวกเขามักจะบ่นเสียงดังเมื่อมีบางสิ่งแตก :-)

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

เมื่อการเปลี่ยนแปลงผ่านไปแล้วนั่นคือพวกเขาจะไม่ทำลายเครื่องจักรของนักพัฒนาแอปพลิเคชันและพวกเขาจะไม่สร้างผลลัพธ์ที่ไม่พึงประสงค์ในบันทึกของกระบวนการ puppetd "noop" ของเครื่องจักรที่ใช้ในการผลิต เรามีกลไกการย้อนกลับเพื่อให้เราสามารถเปลี่ยนกลับเป็นเวอร์ชันก่อนหน้า


1

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

สำหรับงานการกำหนดค่าหลายขั้นตอนแรกคือการทดสอบว่าสามารถแยกวิเคราะห์การกำหนดค่าโดยบริการ บริการหลายแห่งมีสิ่งอำนวยความสะดวกให้ทำเช่นนี้ Nagios มีโหมด preflight, cfagent ไม่มีการกระทำ, apache, sudo, bind, และอื่น ๆ อีกมากมายมีสิ่งอำนวยความสะดวกที่คล้ายกัน นี่เป็นพื้นฐานสำหรับการกำหนดค่า

ตัวอย่างเช่นหากคุณใช้ apache และแยกไฟล์ปรับแต่งสำหรับชิ้นส่วนที่แตกต่างกันคุณสามารถทดสอบชิ้นส่วนได้เช่นกันโดยใช้ไฟล์ httpd.conf อื่น ๆ จากนั้นคุณสามารถทดสอบว่าเว็บเซิร์ฟเวอร์ในเครื่องทดสอบให้ผลลัพธ์ที่ถูกต้องที่นั่น

ทุกขั้นตอนในแบบที่คุณทำตามรูปแบบพื้นฐานเดียวกัน เขียนการทดสอบทำแบบทดสอบการทำซ้ำงานที่คุณทำ ตามที่กล่าวไว้ข้างต้นเมื่อติดตามเส้นทางนี้การทดสอบอาจไม่ล้มเหลวในลักษณะของ TDD ที่ยอมรับ

Rik


1

ฉันเชื่อว่าลิงก์ต่อไปนี้อาจเป็นที่สนใจ

  1. cucumber-nagios - โครงการที่ให้คุณเปลี่ยนชุดCucumberเป็น Nagios plugin และมาพร้อมกับคำจำกัดความขั้นตอนสำหรับ SSH, DNS, Ping, AMQP และประเภท "execute command" ประเภทของงาน
    http://auxesis.github.com/cucumber- nagios /
    http://www.slideshare.net/auxesis/behaviour-driven-monitoring-with-cucumbernagios-2444224
    http://agilesysadmin.net/cucumber-nagios

  2. นอกจากนี้ยังมีความพยายามบางอย่างในด้าน Puppet / Python http://www.devco.net/archives/2010/03/27/infrastructure_testing_with_mcollective_and_cucumber.php

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