การจัดการตัวเลือกใน Tradefed

การจัดการทางเลือกถือเป็นหัวใจสำคัญของแนวทางแบบโมดูลาร์ของ 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]

ดูสิ่งนี้ด้วย

ส่งผ่านตัวเลือกไปยังชุดและโมดูล