การจัดการทางเลือกเป็นหัวใจสำคัญของแนวทางการทำงานแบบแยกส่วนของสหพันธ์การค้า โดยเฉพาะอย่างยิ่ง ตัวเลือก
คือกลไกที่นักพัฒนาซอฟต์แวร์ ผู้ผสานรวม และตัวดำเนินการทดสอบสามารถทำงานร่วมกันได้
ที่ต้องทำซ้ำผลงานของกันและกัน พูดง่ายๆ คือการใช้การจัดการตัวเลือกของเราทำให้
ให้นักพัฒนาแอปทำเครื่องหมายสมาชิกคลาส Java ว่ากำหนดค่าได้ ซึ่งจะใช้ค่าของสมาชิกรายนั้น
อาจจะถูกเสริมหรือลบล้างโดยผู้ผสานรวม และอาจถูกเสริมหรือลบล้างโดย
เครื่องมือดำเนินการทดสอบ กลไกนี้ใช้งานได้กับ JavaScript ทุกประเภท รวมถึง
Map
หรือ Collection
ของประเภทที่แท้จริง
หมายเหตุ: กลไกการจัดการตัวเลือกใช้ได้กับชั้นเรียนที่ใช้หนึ่งใน อินเทอร์เฟซที่รวมอยู่ในวงจรการทดสอบ และเฉพาะเมื่อคลาสนั้น ยืนยันโดยเครื่องจักรในวงจร
นักพัฒนาซอฟต์แวร์
ในการเริ่มต้น นักพัฒนาซอฟต์แวร์จะทำเครื่องหมายสมาชิกที่มี
คำอธิบายประกอบ @Option
รายการ
โดยจะระบุค่า name
และ description
(อย่างน้อย)
ระบุชื่ออาร์กิวเมนต์ที่เชื่อมโยงกับตัวเลือกนั้นและคำอธิบายที่จะแสดง
คอนโซล TF เมื่อเรียกใช้คำสั่งด้วย --help
หรือ --help-all
ตัวอย่างเช่น สมมุติว่าเราต้องการสร้างการทดสอบการใช้งานโทรศัพท์ซึ่งจะแสดง หมายเลขโทรศัพท์ และคาดว่าจะได้รับลำดับสัญญาณเสียง DTMF จากแต่ละหมายเลขหลังจากนั้น เชื่อมต่อ
public class PhoneCallFuncTest extends IRemoteTest { @Option(name = "timeout", description = "How long to wait for connection, in millis") private long mWaitTime = 30 * 1000; // 30 seconds @Option(name = "call", description = "Key: Phone number to attempt. " + "Value: DTMF to expect. May be repeated.") private Map<String, String> mCalls = new HashMap<String, String>; public PhoneCallFuncTest() { mCalls.add("123-456-7890", "01134"); // default }
นี่คือทั้งหมดที่จำเป็นสำหรับนักพัฒนาแอปในการตั้งค่าการกำหนดค่า 2 จุดสำหรับการดำเนินการดังกล่าว
การทดสอบ จากนั้น เขาจึงจะออกไปใช้ mWaitTime
กับ mCalls
ได้ตามปกติ
โดยไม่ต้องใส่ใจมากนักว่าสามารถกำหนดค่าได้ เนื่องจาก
จะมีการตั้งค่าช่อง @Option
หลังจากสร้างอินสแตนซ์คลาส แต่อยู่ก่อน
เรียกเมธอด run
ซึ่งมีวิธีง่ายๆ ให้ผู้ติดตั้งใช้งานตั้งค่าเริ่มต้น
หรือดำเนินการกรองบางอย่างในฟิลด์ Map
และ Collection
ซึ่งเป็น
มิฉะนั้นจะใช้ "ต่อท้ายเท่านั้น"
ผู้รวมบริการ
Integrator จะใช้งานได้ในโลกของการกำหนดค่า ซึ่งเขียนในรูปแบบ XML รูปแบบการกำหนดค่า
อนุญาตให้ผู้ผสานรวมตั้งค่า (หรือต่อท้าย) ค่าสำหรับช่อง @Option
ได้ ตัวอย่างเช่น
สมมติว่าผู้ผสานรวมต้องการกำหนดการทดสอบเวลาในการตอบสนองต่ำที่เรียกใช้หมายเลขเริ่มต้น
ทำการทดสอบเป็นระยะเวลานานที่เรียกใช้หมายเลขต่างๆ สร้างการกำหนดค่าขึ้นมาคู่หนึ่ง
ซึ่งอาจมีลักษณะดังนี้
<?xml version="1.0" encoding="utf-8"?> <configuration description="low-latency default test; low-latency.xml"> <test class="com.example.PhoneCallFuncTest"> <option name="timeout" value="5000" /> </test> </configuration>
<?xml version="1.0" encoding="utf-8"?> <configuration description="call a bunch of numbers; many-numbers.xml"> <test class="com.example.PhoneCallFuncTest"> <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" /> <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" /> <!-- ... --> </test> </configuration>
ตัวดำเนินการทดสอบ
Test Runner ยังเข้าถึงจุดการกำหนดค่าเหล่านี้ผ่านคอนโซล Trade Federation ได้ด้วย
สิ่งแรกที่สำคัญที่สุด โปรแกรมเหล่านี้จะเรียกใช้คำสั่ง (ซึ่งก็คือการกำหนดค่าและอาร์กิวเมนต์ทั้งหมด) ด้วยฟังก์ชัน
วิธีการแบบ run command <name>
(หรือเรียกสั้นๆ ว่า run <name>
)
นอกจากนี้ยังสามารถระบุรายการอาร์กิวเมนต์ที่เป็นส่วนหนึ่งของคําสั่ง ซึ่งอาจแทนที่หรือ
ต่อท้ายช่องที่ระบุโดยออบเจ็กต์ Lifecycle ภายในการกำหนดค่าแต่ละรายการ
ในการเรียกใช้การทดสอบเวลาในการตอบสนองต่ำกับหมายเลขโทรศัพท์ many-numbers
ตัวดำเนินการทดสอบ
สามารถดำเนินการ:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
หรือเพื่อให้ได้ผลลัพธ์ที่คล้ายกันจากทิศทางตรงกันข้าม ตัวดำเนินการทดสอบอาจลดเวลารอได้
สำหรับการทดสอบ many-numbers
:
tf> run many-numbers.xml --timeout 5000
การเรียงลำดับตัวเลือก
คุณอาจสังเกตเห็นว่าการใช้งานที่สำคัญของตัวเลือก call
คือ Map
ดังนั้นเมื่อป้อน --call
ซ้ำในบรรทัดคำสั่ง ค่าดังกล่าวก็จะได้รับการจัดเก็บไว้
ตัวเลือก timeout
ซึ่งมีการติดตั้งใช้งานที่สำคัญของ long
สามารถจัดเก็บได้เพียงค่าเดียวเท่านั้น ดังนั้นระบบจะจัดเก็บเฉพาะค่าสุดท้ายที่ระบุเท่านั้น
--timeout 5 --timeout 10
จะให้ผลลัพธ์ timeout
ที่มี 10
ในกรณีที่มี List
หรือ Collection
เป็นการติดตั้งใช้งานที่สำคัญ
ค่าทั้งหมดจะได้รับการจัดเก็บตามลำดับที่ระบุในบรรทัดคำสั่ง
ตัวเลือกบูลีน
คุณสามารถตั้งค่าตัวเลือกของประเภทพื้นฐานแบบบูลีนเป็น true
ได้โดยการส่งพารามิเตอร์
ชื่อตัวเลือก เช่น --[option-name]
และสามารถตั้งค่าเป็น false
ได้โดยใช้
ไวยากรณ์ --no-[option-name]