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

การจัดการตัวเลือกเป็นหัวใจสำคัญของแนวทางแบบโมดูลของ Trade Federation โดยเฉพาะอย่างยิ่ง ตัวเลือกเป็นกลไกที่นักพัฒนาซอฟต์แวร์ ผู้ผสานรวม และ Test Runner สามารถทํางานร่วมกันได้โดยไม่ต้องทํางานซ้ำกัน กล่าวโดยย่อคือ การใช้การจัดการตัวเลือกของเราช่วยให้นักพัฒนาซอฟต์แวร์ทําเครื่องหมายสมาชิกคลาส Java ว่ากําหนดค่าได้ เมื่อถึงจุดนั้น ผู้ผสานรวมจะเพิ่มหรือลบล้างค่าของสมาชิกนั้นได้ และ Test Runner จะเพิ่มหรือลบล้างค่าดังกล่าวในภายหลัง กลไกนี้ใช้ได้กับประเภทอินทริเนนต์ของ Java ทั้งหมด รวมถึงอินสแตนซ์ 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 ได้ง่าย ซึ่งปกติแล้วจะเป็นการเพิ่มต่อท้ายเท่านั้น

ผู้รวมบริการ

ผู้ผสานรวมจะทํางานในโลกของการกำหนดค่าซึ่งเขียนด้วย XML รูปแบบการกําหนดค่าช่วยให้ผู้ผสานรวมกําหนด (หรือเพิ่ม) ค่าสําหรับช่อง @Option ได้ ตัวอย่างเช่น สมมติว่าผู้ผสานรวมต้องการกำหนดการทดสอบที่มีเวลาในการตอบสนองต่ำลงซึ่งเรียกหมายเลขเริ่มต้น รวมถึงการทดสอบที่ทำงานต่อเนื่องเป็นเวลานานซึ่งเรียกหมายเลขต่างๆ ผู้ใช้อาจสร้างการกําหนดค่า 2 รายการที่มีลักษณะดังนี้

<?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

นอกจากนี้ Test Runner ยังมีสิทธิ์เข้าถึงจุดกำหนดค่าเหล่านี้ผ่านคอนโซลของ Trade Federation ด้วย สิ่งแรกสุดคือเรียกใช้คําสั่ง (นั่นคือการกําหนดค่าและอาร์กิวเมนต์ทั้งหมด) ด้วยคำสั่ง run command <name> (หรือ run <name> สั้นๆ) นอกจากนี้ ยังระบุรายการอาร์กิวเมนต์ที่เป็นส่วนหนึ่งของคําสั่งได้ ซึ่งสามารถแทนที่หรือต่อท้ายช่องที่ระบุโดยออบเจ็กต์วงจรภายในการกําหนดค่าแต่ละรายการ

หากต้องการทำการทดสอบเวลาในการตอบสนองต่ำด้วยหมายเลขโทรศัพท์ 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]

ดูเพิ่มเติม

ส่งตัวเลือกไปยังชุดและข้อบังคับ