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

การจัดการทางเลือกเป็นหัวใจของแนวทางโมดูลาร์ของสหพันธ์การค้า โดยเฉพาะอย่างยิ่ง ตัวเลือกคือกลไกที่ Developer, Integrator และ Test Runner สามารถทำงานร่วมกันได้โดยไม่ต้องทำซ้ำงานของกันและกัน พูดง่ายๆ ก็คือ การใช้งานตัวเลือกการจัดการของเราทำให้นักพัฒนาสามารถทำเครื่องหมายว่าสมาชิกคลาส Java นั้นสามารถกำหนดค่าได้ ซึ่ง ณ จุดนั้น ค่าของสมาชิกนั้นอาจถูกเสริมหรือแทนที่โดย Integrator และอาจเพิ่มหรือแทนที่โดย Test Runner ในภายหลัง กลไกนี้ใช้ได้กับ Java Intrinsic Types ทุกประเภท เช่นเดียวกับ Map s หรือ Collection ของ Intrinsic types

หมายเหตุ: กลไกการจัดการตัวเลือกใช้งานได้เฉพาะกับคลาสที่ใช้อินเทอร์เฟซอย่างใดอย่างหนึ่งที่รวมอยู่ใน 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

Integrator ทำงานในโลกของ Configurations ซึ่งเขียนด้วย 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>

นักวิ่งทดสอบ

นักวิ่งทดสอบยังมีสิทธิ์เข้าถึงจุดกำหนดค่าเหล่านี้ผ่านคอนโซลของสหพันธ์การค้า ก่อนอื่นพวกเขาจะเรียกใช้คำสั่ง (นั่นคือ config และอาร์กิวเมนต์ทั้งหมด) ด้วย run command <name> คำสั่ง (หรือ run <name> สั้น ๆ ว่า <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]

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

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