เขียนรันเนอร์ทดสอบ IRemoteTest แบบชาร์ด เขียนรันเนอร์ทดสอบ IRemoteTest แบบชาร์ด เขียนรันเนอร์ทดสอบ IRemoteTest แบบชาร์ด เขียนรันเนอร์ทดสอบ IRemoteTest แบบชาร์ด

เมื่อเขียนโปรแกรมทดสอบ สิ่งสำคัญคือต้องคำนึงถึงความสามารถในการปรับขนาด ถามตัวเองว่า "ถ้านักวิ่งทดสอบของฉันต้องเรียกใช้กรณีทดสอบ 200K" จะใช้เวลานานเท่าใด

Sharding เป็นหนึ่งในคำตอบที่มีอยู่ใน Trade Federation จำเป็นต้องแบ่งการทดสอบทั้งหมดที่นักวิ่งต้องการออกเป็นหลายส่วนที่สามารถขนานกันได้

หน้านี้อธิบายวิธีทำให้นักวิ่งของคุณแบ่งส่วนได้สำหรับ Tradefed

อินเทอร์เฟซที่จะใช้

อินเทอร์เฟซเดียวที่สำคัญที่สุดในการนำไปใช้เพื่อให้ TF พิจารณาว่าสามารถแบ่งส่วนได้คือ IShardableTest ซึ่งมีสองวิธี: split(int numShard) และ split()

หากชาร์ดดิ้งของคุณขึ้นอยู่กับจำนวนของชาร์ดที่ร้องขอ คุณควรใช้ split(int numShard) มิฉะนั้นให้ใช้ split()

เมื่อดำเนินการคำสั่งทดสอบ TF ด้วยพารามิเตอร์การแบ่งกลุ่ม --shard-count และ --shard-index TF จะวนซ้ำผ่าน IRemoteTest ทั้งหมดเพื่อค้นหาคำสั่งที่ใช้ IShardableTest หากพบ จะเรียกใช้ split เพื่อรับวัตถุ IRemoteTest ใหม่เพื่อเรียกใช้ชุดย่อยของกรณีทดสอบสำหรับชิ้นส่วนเฉพาะ

ฉันควรรู้อะไรบ้างเกี่ยวกับการใช้งานแบบแยกส่วน

  • นักวิ่งของคุณอาจแตกได้ตามเงื่อนไขบางประการเท่านั้น ในกรณีนั้นคืนค่า null เมื่อคุณไม่ได้ชาร์ด
  • พยายามแยกให้มากที่สุดเท่าที่จะทำได้: แยกนักวิ่งของคุณออกเป็นหน่วยการดำเนินการที่เหมาะสม มันขึ้นอยู่กับนักวิ่งของคุณจริงๆ ตัวอย่างเช่น: HostTest แบ่งเป็นส่วนย่อยที่ระดับคลาส คลาสทดสอบแต่ละประเภทจะถูกจัดแยกส่วนย่อย
  • หากเหมาะสม ให้เพิ่มตัวเลือกบางอย่างเพื่อควบคุมการแบ่งกลุ่มเล็กน้อย ตัวอย่างเช่น: AndroidJUnitTest มี ajur-max-shard เพื่อระบุจำนวนสูงสุดของส่วนแบ่งที่สามารถแยกได้ โดยไม่คำนึงถึงจำนวนที่ร้องขอ

การใช้งานตัวอย่างโดยละเอียด

นี่คือตัวอย่างข้อมูลโค้ดที่ใช้ IShardableTest ที่คุณสามารถอ้างอิงได้ โค้ดฉบับเต็มมีให้ที่

/**
 * Runs all instrumentation found on current device.
 */
@OptionClass(alias = "installed-instrumentation")
public class InstalledInstrumentationsTest
        implements IDeviceTest, IResumableTest, IShardableTest {
    ...

    /** {@inheritDoc} */
    @Override
    public Collection<IRemoteTest> split(int shardCountHint) {
        if (shardCountHint > 1) {
            Collection<IRemoteTest> shards = new ArrayList<>(shardCountHint);
            for (int index = 0; index < shardCountHint; index++) {
                shards.add(getTestShard(shardCountHint, index));
            }
            return shards;
        }
        // Nothing to shard
        return null;
    }

    private IRemoteTest getTestShard(int shardCount, int shardIndex) {
        InstalledInstrumentationsTest shard = new InstalledInstrumentationsTest();
        try {
            OptionCopier.copyOptions(this, shard);
        } catch (ConfigurationException e) {
            CLog.e("failed to copy instrumentation options: %s", e.getMessage());
        }
        shard.mShardIndex = shardIndex;
        shard.mTotalShards = shardCount;
        return shard;
    }
    ...
}

ตัวอย่างนี้สร้างอินสแตนซ์ใหม่ของตัวเองและตั้งค่าพารามิเตอร์ชาร์ดให้กับมัน อย่างไรก็ตาม ตรรกะการแยกอาจแตกต่างกันโดยสิ้นเชิงจากการทดสอบหนึ่งไปยังอีกการทดสอบหนึ่ง และตราบใดที่มันเป็นค่ากำหนดและให้ผลรวมของชุดย่อยที่ละเอียดถี่ถ้วน มันก็ไม่เป็นไร

ความเป็นอิสระ

เศษต้องเป็นอิสระ! ชิ้นส่วนสองชิ้นที่สร้างขึ้นจากการใช้การ split ในนักวิ่งของคุณไม่ควรมีการพึ่งพาซึ่งกันและกันหรือใช้ทรัพยากรร่วมกัน

การแยกชิ้นส่วนจะต้องมีการกำหนด! นี่เป็นข้อบังคับเช่นกัน ด้วยเงื่อนไขเดียวกัน วิธี split ของคุณควรส่งคืนรายการเศษที่เหมือนกันในลำดับเดียวกันเสมอ

หมายเหตุ: เนื่องจากชาร์ดแต่ละรายการสามารถทำงานบนอินสแตนซ์ TF ที่ split ต่างกันได้ จึงจำเป็นอย่างยิ่งที่จะต้องแน่ใจว่าการแยกลอจิกให้ชุดย่อยที่แยกจากกันและแยกจากกันทั้งหมดในลักษณะที่กำหนดขึ้น

แบ่งการทดสอบในเครื่อง

หากต้องการแบ่งการทดสอบบน TF ในเครื่อง คุณสามารถเพิ่มตัวเลือก --shard-count ในบรรทัดคำสั่งได้

tf >run host --class com.android.tradefed.UnitTests --shard-count 3

จากนั้น TF จะสร้างคำสั่งสำหรับแต่ละชิ้นส่วนโดยอัตโนมัติและเรียกใช้งาน

tf >l i
Command Id  Exec Time  Device          State
3           0m:03      [null-device-2]  running stub on build 0 (shard 1 of 3)
3           0m:03      [null-device-1]  running stub on build 0 (shard 0 of 3)
3           0m:03      [null-device-3]  running stub on build 0 (shard 2 of 3)

การรวมผลการทดสอบ

เนื่องจาก TF ไม่ได้ทำการรวบรวมผลการทดสอบใดๆ สำหรับการเรียกใช้แบบแยกส่วน คุณต้องตรวจสอบให้แน่ใจว่าบริการการรายงานของคุณรองรับ

,

เมื่อเขียนโปรแกรมทดสอบ สิ่งสำคัญคือต้องคำนึงถึงความสามารถในการปรับขนาด ถามตัวเองว่า "ถ้านักวิ่งทดสอบของฉันต้องเรียกใช้กรณีทดสอบ 200K" จะใช้เวลานานเท่าใด

Sharding เป็นหนึ่งในคำตอบที่มีอยู่ใน Trade Federation จำเป็นต้องแบ่งการทดสอบทั้งหมดที่นักวิ่งต้องการออกเป็นหลายส่วนที่สามารถขนานกันได้

หน้านี้อธิบายวิธีทำให้นักวิ่งของคุณแบ่งส่วนได้สำหรับ Tradefed

อินเทอร์เฟซที่จะใช้

อินเทอร์เฟซเดียวที่สำคัญที่สุดในการนำไปใช้เพื่อให้ TF พิจารณาว่าสามารถแบ่งส่วนได้คือ IShardableTest ซึ่งมีสองวิธี: split(int numShard) และ split()

หากชาร์ดดิ้งของคุณขึ้นอยู่กับจำนวนของชาร์ดที่ร้องขอ คุณควรใช้ split(int numShard) มิฉะนั้นให้ใช้ split()

เมื่อดำเนินการคำสั่งทดสอบ TF ด้วยพารามิเตอร์การแบ่งกลุ่ม --shard-count และ --shard-index TF จะวนซ้ำผ่าน IRemoteTest ทั้งหมดเพื่อค้นหาคำสั่งที่ใช้ IShardableTest หากพบ จะเรียกใช้ split เพื่อรับวัตถุ IRemoteTest ใหม่เพื่อเรียกใช้ชุดย่อยของกรณีทดสอบสำหรับชิ้นส่วนเฉพาะ

ฉันควรรู้อะไรบ้างเกี่ยวกับการใช้งานแบบแยกส่วน

  • นักวิ่งของคุณอาจแตกได้ตามเงื่อนไขบางประการเท่านั้น ในกรณีนั้นคืนค่า null เมื่อคุณไม่ได้ชาร์ด
  • พยายามแยกให้มากที่สุดเท่าที่จะทำได้: แยกนักวิ่งของคุณออกเป็นหน่วยการดำเนินการที่เหมาะสม มันขึ้นอยู่กับนักวิ่งของคุณจริงๆ ตัวอย่างเช่น: HostTest แบ่งเป็นส่วนย่อยที่ระดับคลาส คลาสทดสอบแต่ละประเภทจะถูกจัดแยกส่วนย่อย
  • หากเหมาะสม ให้เพิ่มตัวเลือกบางอย่างเพื่อควบคุมการแบ่งกลุ่มเล็กน้อย ตัวอย่างเช่น: AndroidJUnitTest มี ajur-max-shard เพื่อระบุจำนวนสูงสุดของส่วนแบ่งที่สามารถแยกได้ โดยไม่คำนึงถึงจำนวนที่ร้องขอ

การใช้งานตัวอย่างโดยละเอียด

นี่คือตัวอย่างข้อมูลโค้ดที่ใช้ IShardableTest ที่คุณสามารถอ้างอิงได้ โค้ดฉบับเต็มมีให้ที่

/**
 * Runs all instrumentation found on current device.
 */
@OptionClass(alias = "installed-instrumentation")
public class InstalledInstrumentationsTest
        implements IDeviceTest, IResumableTest, IShardableTest {
    ...

    /** {@inheritDoc} */
    @Override
    public Collection<IRemoteTest> split(int shardCountHint) {
        if (shardCountHint > 1) {
            Collection<IRemoteTest> shards = new ArrayList<>(shardCountHint);
            for (int index = 0; index < shardCountHint; index++) {
                shards.add(getTestShard(shardCountHint, index));
            }
            return shards;
        }
        // Nothing to shard
        return null;
    }

    private IRemoteTest getTestShard(int shardCount, int shardIndex) {
        InstalledInstrumentationsTest shard = new InstalledInstrumentationsTest();
        try {
            OptionCopier.copyOptions(this, shard);
        } catch (ConfigurationException e) {
            CLog.e("failed to copy instrumentation options: %s", e.getMessage());
        }
        shard.mShardIndex = shardIndex;
        shard.mTotalShards = shardCount;
        return shard;
    }
    ...
}

ตัวอย่างนี้สร้างอินสแตนซ์ใหม่ของตัวเองและตั้งค่าพารามิเตอร์ชาร์ดให้กับมัน อย่างไรก็ตาม ตรรกะการแยกอาจแตกต่างกันโดยสิ้นเชิงจากการทดสอบหนึ่งไปยังอีกการทดสอบหนึ่ง และตราบใดที่มันเป็นค่ากำหนดและให้ผลรวมของชุดย่อยที่ละเอียดถี่ถ้วน มันก็ไม่เป็นไร

ความเป็นอิสระ

เศษต้องเป็นอิสระ! ชิ้นส่วนสองชิ้นที่สร้างขึ้นจากการใช้การ split ในนักวิ่งของคุณไม่ควรมีการพึ่งพาซึ่งกันและกันหรือใช้ทรัพยากรร่วมกัน

การแยกชิ้นส่วนจะต้องมีการกำหนด! นี่เป็นข้อบังคับเช่นกัน ด้วยเงื่อนไขเดียวกัน วิธี split ของคุณควรส่งคืนรายการเศษที่เหมือนกันในลำดับเดียวกันเสมอ

หมายเหตุ: เนื่องจากชาร์ดแต่ละรายการสามารถทำงานบนอินสแตนซ์ TF ที่ split ต่างกันได้ จึงจำเป็นอย่างยิ่งที่จะต้องแน่ใจว่าการแยกลอจิกให้ชุดย่อยที่แยกจากกันและแยกจากกันทั้งหมดในลักษณะที่กำหนดขึ้น

แบ่งการทดสอบในเครื่อง

หากต้องการแบ่งการทดสอบบน TF ในเครื่อง คุณสามารถเพิ่มตัวเลือก --shard-count ในบรรทัดคำสั่งได้

tf >run host --class com.android.tradefed.UnitTests --shard-count 3

จากนั้น TF จะสร้างคำสั่งสำหรับแต่ละชิ้นส่วนโดยอัตโนมัติและเรียกใช้งาน

tf >l i
Command Id  Exec Time  Device          State
3           0m:03      [null-device-2]  running stub on build 0 (shard 1 of 3)
3           0m:03      [null-device-1]  running stub on build 0 (shard 0 of 3)
3           0m:03      [null-device-3]  running stub on build 0 (shard 2 of 3)

การรวมผลการทดสอบ

เนื่องจาก TF ไม่ได้ทำการรวบรวมผลการทดสอบใดๆ สำหรับการเรียกใช้แบบแยกส่วน คุณต้องตรวจสอบให้แน่ใจว่าบริการการรายงานของคุณรองรับ

,

เมื่อเขียนโปรแกรมทดสอบ สิ่งสำคัญคือต้องคำนึงถึงความสามารถในการปรับขนาด ถามตัวเองว่า "ถ้านักวิ่งทดสอบของฉันต้องเรียกใช้กรณีทดสอบ 200K" จะใช้เวลานานเท่าใด

Sharding เป็นหนึ่งในคำตอบที่มีอยู่ใน Trade Federation จำเป็นต้องแบ่งการทดสอบทั้งหมดที่นักวิ่งต้องการออกเป็นหลายส่วนที่สามารถขนานกันได้

หน้านี้อธิบายวิธีทำให้นักวิ่งของคุณแบ่งส่วนได้สำหรับ Tradefed

อินเทอร์เฟซที่จะใช้

อินเทอร์เฟซเดียวที่สำคัญที่สุดในการนำไปใช้เพื่อให้ TF พิจารณาว่าสามารถแบ่งส่วนได้คือ IShardableTest ซึ่งมีสองวิธี: split(int numShard) และ split()

หากชาร์ดดิ้งของคุณขึ้นอยู่กับจำนวนของชาร์ดที่ร้องขอ คุณควรใช้ split(int numShard) มิฉะนั้นให้ใช้ split()

เมื่อดำเนินการคำสั่งทดสอบ TF ด้วยพารามิเตอร์การแบ่งกลุ่ม --shard-count และ --shard-index TF จะวนซ้ำผ่าน IRemoteTest ทั้งหมดเพื่อค้นหาคำสั่งที่ใช้ IShardableTest หากพบ จะเรียกใช้ split เพื่อรับวัตถุ IRemoteTest ใหม่เพื่อเรียกใช้ชุดย่อยของกรณีทดสอบสำหรับชิ้นส่วนเฉพาะ

ฉันควรรู้อะไรบ้างเกี่ยวกับการใช้งานแบบแยกส่วน

  • นักวิ่งของคุณอาจแตกได้ตามเงื่อนไขบางประการเท่านั้น ในกรณีนั้นคืนค่า null เมื่อคุณไม่ได้ชาร์ด
  • พยายามแยกให้มากที่สุดเท่าที่จะทำได้: แยกนักวิ่งของคุณออกเป็นหน่วยการดำเนินการที่เหมาะสม มันขึ้นอยู่กับนักวิ่งของคุณจริงๆ ตัวอย่างเช่น: HostTest แบ่งเป็นส่วนย่อยที่ระดับคลาส คลาสทดสอบแต่ละประเภทจะถูกจัดแยกส่วนย่อย
  • หากเหมาะสม ให้เพิ่มตัวเลือกบางอย่างเพื่อควบคุมการแบ่งกลุ่มเล็กน้อย ตัวอย่างเช่น: AndroidJUnitTest มี ajur-max-shard เพื่อระบุจำนวนสูงสุดของส่วนแบ่งที่สามารถแยกได้ โดยไม่คำนึงถึงจำนวนที่ร้องขอ

การใช้งานตัวอย่างโดยละเอียด

นี่คือตัวอย่างข้อมูลโค้ดที่ใช้ IShardableTest ที่คุณสามารถอ้างอิงได้ โค้ดฉบับเต็มมีให้ที่

/**
 * Runs all instrumentation found on current device.
 */
@OptionClass(alias = "installed-instrumentation")
public class InstalledInstrumentationsTest
        implements IDeviceTest, IResumableTest, IShardableTest {
    ...

    /** {@inheritDoc} */
    @Override
    public Collection<IRemoteTest> split(int shardCountHint) {
        if (shardCountHint > 1) {
            Collection<IRemoteTest> shards = new ArrayList<>(shardCountHint);
            for (int index = 0; index < shardCountHint; index++) {
                shards.add(getTestShard(shardCountHint, index));
            }
            return shards;
        }
        // Nothing to shard
        return null;
    }

    private IRemoteTest getTestShard(int shardCount, int shardIndex) {
        InstalledInstrumentationsTest shard = new InstalledInstrumentationsTest();
        try {
            OptionCopier.copyOptions(this, shard);
        } catch (ConfigurationException e) {
            CLog.e("failed to copy instrumentation options: %s", e.getMessage());
        }
        shard.mShardIndex = shardIndex;
        shard.mTotalShards = shardCount;
        return shard;
    }
    ...
}

ตัวอย่างนี้สร้างอินสแตนซ์ใหม่ของตัวเองและตั้งค่าพารามิเตอร์ชาร์ดให้กับมัน อย่างไรก็ตาม ตรรกะการแยกอาจแตกต่างกันโดยสิ้นเชิงจากการทดสอบหนึ่งไปยังอีกการทดสอบหนึ่ง และตราบใดที่มันเป็นค่ากำหนดและให้ผลรวมของชุดย่อยที่ละเอียดถี่ถ้วน มันก็ไม่เป็นไร

ความเป็นอิสระ

เศษต้องเป็นอิสระ! ชิ้นส่วนสองชิ้นที่สร้างขึ้นจากการใช้การ split ในนักวิ่งของคุณไม่ควรมีการพึ่งพาซึ่งกันและกันหรือใช้ทรัพยากรร่วมกัน

การแยกชิ้นส่วนจะต้องมีการกำหนด! นี่เป็นข้อบังคับเช่นกัน ด้วยเงื่อนไขเดียวกัน วิธี split ของคุณควรส่งคืนรายการเศษที่เหมือนกันในลำดับเดียวกันเสมอ

หมายเหตุ: เนื่องจากชาร์ดแต่ละรายการสามารถทำงานบนอินสแตนซ์ TF ที่ split ต่างกันได้ จึงจำเป็นอย่างยิ่งที่จะต้องแน่ใจว่าการแยกลอจิกให้ชุดย่อยที่แยกจากกันและแยกจากกันทั้งหมดในลักษณะที่กำหนดขึ้น

แบ่งการทดสอบในเครื่อง

หากต้องการแบ่งการทดสอบบน TF ในเครื่อง คุณสามารถเพิ่มตัวเลือก --shard-count ในบรรทัดคำสั่งได้

tf >run host --class com.android.tradefed.UnitTests --shard-count 3

จากนั้น TF จะสร้างคำสั่งสำหรับแต่ละชิ้นส่วนโดยอัตโนมัติและเรียกใช้งาน

tf >l i
Command Id  Exec Time  Device          State
3           0m:03      [null-device-2]  running stub on build 0 (shard 1 of 3)
3           0m:03      [null-device-1]  running stub on build 0 (shard 0 of 3)
3           0m:03      [null-device-3]  running stub on build 0 (shard 2 of 3)

การรวมผลการทดสอบ

เนื่องจาก TF ไม่ได้ทำการรวบรวมผลการทดสอบใดๆ สำหรับการเรียกใช้แบบแยกส่วน คุณต้องตรวจสอบให้แน่ใจว่าบริการการรายงานของคุณรองรับ

,

เมื่อเขียนโปรแกรมทดสอบ สิ่งสำคัญคือต้องคำนึงถึงความสามารถในการปรับขนาด ถามตัวเองว่า "ถ้านักวิ่งทดสอบของฉันต้องเรียกใช้กรณีทดสอบ 200K" จะใช้เวลานานเท่าใด

Sharding เป็นหนึ่งในคำตอบที่มีอยู่ใน Trade Federation จำเป็นต้องแบ่งการทดสอบทั้งหมดที่นักวิ่งต้องการออกเป็นหลายส่วนที่สามารถขนานกันได้

หน้านี้อธิบายวิธีทำให้นักวิ่งของคุณแบ่งส่วนได้สำหรับ Tradefed

อินเทอร์เฟซที่จะใช้

อินเทอร์เฟซที่สำคัญที่สุดเพียงหนึ่งเดียวที่จะนำไปใช้เพื่อให้ TF พิจารณาว่าแบ่งส่วนได้คือ IShardableTest ซึ่งมีสองวิธี: split(int numShard) และ split()

หากชาร์ดดิ้งของคุณขึ้นอยู่กับจำนวนของชาร์ดที่ร้องขอ คุณควรใช้ split(int numShard) มิฉะนั้นให้ใช้ split()

เมื่อดำเนินการคำสั่งทดสอบ TF ด้วยพารามิเตอร์การแบ่งกลุ่ม --shard-count และ --shard-index TF จะวนซ้ำผ่าน IRemoteTest ทั้งหมดเพื่อค้นหาคำสั่งที่ใช้ IShardableTest หากพบ จะเรียกใช้ split เพื่อรับวัตถุ IRemoteTest ใหม่เพื่อเรียกใช้ชุดย่อยของกรณีทดสอบสำหรับชิ้นส่วนเฉพาะ

ฉันควรรู้อะไรบ้างเกี่ยวกับการใช้งานแบบแยกส่วน

  • นักวิ่งของคุณอาจแตกได้ตามเงื่อนไขบางประการเท่านั้น ในกรณีนั้นคืนค่า null เมื่อคุณไม่ได้ชาร์ด
  • พยายามแยกให้มากที่สุดเท่าที่จะทำได้: แยกนักวิ่งของคุณออกเป็นหน่วยการดำเนินการที่เหมาะสม มันขึ้นอยู่กับนักวิ่งของคุณจริงๆ ตัวอย่างเช่น: HostTest แบ่งเป็นส่วนย่อยที่ระดับคลาส คลาสทดสอบแต่ละประเภทจะถูกจัดแยกส่วนย่อย
  • หากเหมาะสม ให้เพิ่มตัวเลือกบางอย่างเพื่อควบคุมการแบ่งกลุ่มเล็กน้อย ตัวอย่างเช่น: AndroidJUnitTest มี ajur-max-shard เพื่อระบุจำนวนสูงสุดของส่วนแบ่งที่สามารถแยกได้ โดยไม่คำนึงถึงจำนวนที่ร้องขอ

การใช้งานตัวอย่างโดยละเอียด

นี่คือตัวอย่างข้อมูลโค้ดที่ใช้ IShardableTest ที่คุณสามารถอ้างอิงได้ โค้ดฉบับเต็มมีให้ที่

/**
 * Runs all instrumentation found on current device.
 */
@OptionClass(alias = "installed-instrumentation")
public class InstalledInstrumentationsTest
        implements IDeviceTest, IResumableTest, IShardableTest {
    ...

    /** {@inheritDoc} */
    @Override
    public Collection<IRemoteTest> split(int shardCountHint) {
        if (shardCountHint > 1) {
            Collection<IRemoteTest> shards = new ArrayList<>(shardCountHint);
            for (int index = 0; index < shardCountHint; index++) {
                shards.add(getTestShard(shardCountHint, index));
            }
            return shards;
        }
        // Nothing to shard
        return null;
    }

    private IRemoteTest getTestShard(int shardCount, int shardIndex) {
        InstalledInstrumentationsTest shard = new InstalledInstrumentationsTest();
        try {
            OptionCopier.copyOptions(this, shard);
        } catch (ConfigurationException e) {
            CLog.e("failed to copy instrumentation options: %s", e.getMessage());
        }
        shard.mShardIndex = shardIndex;
        shard.mTotalShards = shardCount;
        return shard;
    }
    ...
}

ตัวอย่างนี้สร้างอินสแตนซ์ใหม่ของตัวเองและตั้งค่าพารามิเตอร์ชาร์ดให้กับมัน อย่างไรก็ตาม ตรรกะการแยกอาจแตกต่างกันโดยสิ้นเชิงจากการทดสอบหนึ่งไปยังอีกการทดสอบหนึ่ง และตราบใดที่มันเป็นค่ากำหนดและให้ผลรวมของชุดย่อยที่ละเอียดถี่ถ้วน มันก็ไม่เป็นไร

ความเป็นอิสระ

เศษต้องเป็นอิสระ! ชิ้นส่วนสองชิ้นที่สร้างขึ้นจากการใช้การ split ในนักวิ่งของคุณไม่ควรมีการพึ่งพาซึ่งกันและกันหรือใช้ทรัพยากรร่วมกัน

การแยกชิ้นส่วนจะต้องมีการกำหนด! นี่เป็นข้อบังคับเช่นกัน ด้วยเงื่อนไขเดียวกัน วิธี split ของคุณควรส่งคืนรายการเศษที่เหมือนกันในลำดับเดียวกันเสมอ

หมายเหตุ: เนื่องจากชาร์ดแต่ละรายการสามารถทำงานบนอินสแตนซ์ TF ที่ split ต่างกันได้ จึงจำเป็นอย่างยิ่งที่จะต้องแน่ใจว่าการแยกลอจิกให้ชุดย่อยที่แยกจากกันและแยกย่อยโดยรวมในลักษณะที่กำหนดขึ้น

แบ่งการทดสอบในเครื่อง

หากต้องการแบ่งการทดสอบบน TF ในเครื่อง คุณสามารถเพิ่มตัวเลือก --shard-count ในบรรทัดคำสั่งได้

tf >run host --class com.android.tradefed.UnitTests --shard-count 3

จากนั้น TF จะสร้างคำสั่งสำหรับแต่ละชิ้นส่วนโดยอัตโนมัติและเรียกใช้งาน

tf >l i
Command Id  Exec Time  Device          State
3           0m:03      [null-device-2]  running stub on build 0 (shard 1 of 3)
3           0m:03      [null-device-1]  running stub on build 0 (shard 0 of 3)
3           0m:03      [null-device-3]  running stub on build 0 (shard 2 of 3)

การรวมผลการทดสอบ

เนื่องจาก TF ไม่ได้ทำการรวบรวมผลการทดสอบใดๆ สำหรับการเรียกใช้แบบแยกส่วน คุณต้องตรวจสอบให้แน่ใจว่าบริการการรายงานของคุณรองรับ