การจัดการทางเลือกถือเป็นหัวใจสำคัญของแนวทางแบบโมดูลาร์ของ Trade Federation โดยเฉพาะอย่างยิ่ง ตัวเลือกคือกลไกที่นักพัฒนา ผู้รวมระบบ และนักวิ่งทดสอบสามารถทำงานร่วมกันได้โดยไม่ต้องทำซ้ำงานของกันและกัน พูดง่ายๆ ก็คือ การใช้งานการจัดการตัวเลือกของเราทำให้นักพัฒนาสามารถทำเครื่องหมายสมาชิกคลาส Java ว่าสามารถกำหนดค่าได้ ซึ่ง ณ จุดนี้ค่าของสมาชิกนั้นอาจถูกเสริมหรือแทนที่โดย Integrator และอาจถูกเสริมหรือแทนที่ในภายหลังโดย Test Runner กลไกนี้ใช้ได้กับประเภทอินทรินซิกของ Java ทุกประเภท รวมถึง Map
หรือ Collection
ประเภทอินทรินซิกด้วย
หมายเหตุ: กลไกการจัดการตัวเลือกใช้งานได้กับคลาสที่ใช้อินเทอร์เฟซใดอินเทอร์เฟซหนึ่งที่รวมอยู่ใน Test Lifecycle เท่านั้น และเฉพาะเมื่อคลาสนั้นถูก สร้างอินสแตนซ์ โดยกลไกวงจรการใช้งานเท่านั้น
นักพัฒนา
ในการเริ่มต้น นักพัฒนาจะทำเครื่องหมายสมาชิกด้วยคำอธิบายประกอบ @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 }
นั่นคือทั้งหมดที่จำเป็นสำหรับนักพัฒนาในการตั้งค่าการกำหนดค่าสองจุดสำหรับการทดสอบนั้น จากนั้นพวกเขาสามารถออกไปใช้ mWaitTime
และ mCalls
ได้ตามปกติ โดยไม่ต้องใส่ใจมากนักว่าสามารถกำหนดค่าได้ เนื่องจากฟิลด์ @Option
ถูกตั้งค่าหลังจากคลาสถูกสร้างอินสแตนซ์ แต่ก่อนที่จะเรียกใช้เมธอด run
นั่นเป็นวิธีที่ง่ายสำหรับผู้นำไปใช้ในการตั้งค่าเริ่มต้นสำหรับหรือดำเนินการกรองบางประเภทในฟิลด์ Map
และ Collection
ซึ่งจะต่อท้าย เท่านั้น.
ผู้รวมระบบ
Integrator ทำงานในโลกของการกำหนดค่าซึ่งเขียนในรูปแบบ XML รูปแบบการกำหนดค่าอนุญาตให้ Integrator ตั้งค่า (หรือต่อท้าย) ค่าสำหรับฟิลด์ @Option
ใดๆ ตัวอย่างเช่น สมมติว่า Integrator ต้องการกำหนดการทดสอบเวลาแฝงที่ต่ำกว่าซึ่งเรียกหมายเลขเริ่มต้น เช่นเดียวกับการทดสอบระยะยาวที่เรียกหมายเลขต่างๆ พวกเขาสามารถสร้างคู่ของการกำหนดค่าที่อาจมีลักษณะดังต่อไปนี้:
<?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 ก่อนอื่น พวกเขาจะรันคำสั่ง (นั่นคือ config และอาร์กิวเมนต์ทั้งหมด) พร้อมด้วยคำ run command <name>
(หรือ run <name>
) นอกเหนือจากนั้น พวกเขาสามารถระบุรายการอาร์กิวเมนต์ใดๆ ที่เป็นส่วนหนึ่งของคำสั่ง ซึ่งอาจแทนที่หรือผนวกกับฟิลด์ที่ระบุโดย Lifecycle Objects ภายในแต่ละการกำหนดค่า
หากต้องการรันการทดสอบเวลาแฝงต่ำด้วยหมายเลขโทรศัพท์ many-numbers
ผู้ทดสอบสามารถดำเนินการได้:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
หรือเพื่อให้ได้ผลลัพธ์ที่คล้ายกันจากทิศทางตรงกันข้าม Test Runner สามารถลดเวลารอสำหรับการทดสอบ 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]