ProtoResultReporter

public abstract class ProtoResultReporter
extends Object implements ILogSaverListener, ISupportGranularResults, ITestInvocationListener

java.lang.Object
com.android.tradefed.result.protocol.ProtoResultReporter


ผู้รายงานผลลัพธ์สร้าง Protobuf ของ TestRecord ที่มีผลลัพธ์ทั้งหมดด้านใน ควรเป็น ขยายไปจัดการสิ่งที่ต้องทำกับ Proto สุดท้ายใน processFinalProto(com.android.tradefed.result.proto.TestRecordProto.TestRecord)

สรุป

ช่างก่อสร้างสาธารณะ

ProtoResultReporter()

วิธีการสาธารณะ

final void invocationEnded(long elapsedTime)

รายงานว่าคำขอสิ้นสุดลงแล้ว ไม่ว่าจะสำเร็จหรือเนื่องจากข้อผิดพลาดบางอย่าง

void invocationFailed(FailureDescription failure)

รายงานการเรียกใช้ที่ไม่สมบูรณ์เนื่องจากมีเงื่อนไขข้อผิดพลาดบางอย่าง

void invocationFailed(Throwable cause)

รายงานการเรียกใช้ที่ไม่สมบูรณ์เนื่องจากมีเงื่อนไขข้อผิดพลาดบางอย่าง

void invocationSkipped(SkipReason reason)

รายงานการเรียกใช้ว่าข้าม

final void invocationStarted(IInvocationContext context)

รายงานจุดเริ่มต้นของการเรียกใช้การทดสอบ

final void logAssociation(String dataName, LogFile logFile)

ในบางกรณี บันทึกต้องเชื่อมโยงอย่างมากกับกรอบการทดสอบ แต่โอกาสในการทำเช่นนั้น ดังนั้นใน testLogSaved(String, com.android.tradefed.result.LogDataType, com.android.tradefed.result.InputStreamSource, com.android.tradefed.result.LogFile) โดยตรง Callback ไม่ได้

void processFinalInvocationLogs(TestRecordProto.TestRecord invocationLogs)

ใช้ระเบียนการเรียกใช้เพื่อส่งบันทึกสุดท้ายของการเรียกใช้ทั้งหมดทีละรายการ

void processFinalProto(TestRecordProto.TestRecord finalRecord)

การจัดการ Proto สุดท้ายที่มีผลลัพธ์ทั้งหมด

void processStartInvocation(TestRecordProto.TestRecord invocationStartRecord, IInvocationContext invocationContext)

การจัดการ Proto ของบันทึกการทดสอบการเรียกใช้บางส่วนหลังจาก invocationStarted(com.android.tradefed.invoker.IInvocationContext) เกิดขึ้น

void processTestCaseEnded(TestRecordProto.TestRecord testCaseRecord)

การจัดการ Proto ของระเบียนกรอบการทดสอบที่สรุปผลแล้วหลังจาก ERROR(/#testEnded(com.android.tradefed.result.TestDescription,long,HashMap)) เกิดขึ้น

void processTestCaseStarted(TestRecordProto.TestRecord testCaseStartedRecord)

การจัดการ Proto ของระเบียนกรณีทดสอบบางส่วนหลังจาก testStarted(com.android.tradefed.result.TestDescription, long) เกิดขึ้น

void processTestModuleEnd(TestRecordProto.TestRecord moduleRecord)

การจัดการ Proto ของระเบียนโมดูลที่สรุปผลแล้วหลังจาก testModuleEnded() เกิดขึ้น

void processTestModuleStarted(TestRecordProto.TestRecord moduleStartRecord)

การจัดการ Proto ของระเบียนโมดูลบางส่วนหลังจาก testModuleStarted(com.android.tradefed.invoker.IInvocationContext) เกิดขึ้น

void processTestRunEnded(TestRecordProto.TestRecord runRecord, boolean moduleInProgress)

การจัดการ Proto ของบันทึกการเรียกใช้ที่เสร็จสิ้นแล้วหลังจากวันที่ ERROR(/#testRunEnded(long,HashMap)) เกิดขึ้น

void processTestRunStarted(TestRecordProto.TestRecord runStartedRecord)

การจัดการ Proto ของบันทึกการเรียกใช้การทดสอบบางส่วนหลังจาก testRunStarted(String, int) เกิดขึ้น

void setGranularResults(boolean granularResults)
void setInlineRecordOfChildren(boolean inline)
boolean supportGranularResults()

แสดงค่า "จริง" หากผู้รายงานรองรับผลการค้นหาแบบละเอียด หรือเป็นเท็จ

final void testAssumptionFailure(TestDescription test, String trace)

เรียกใช้เมื่อตัวบ่งชี้การทดสอบแบบอะตอมระบุว่ามีเงื่อนไขที่เป็นเท็จ

final void testAssumptionFailure(TestDescription test, FailureDescription failure)

เรียกใช้เมื่อตัวบ่งชี้การทดสอบแบบอะตอมระบุว่ามีเงื่อนไขที่เป็นเท็จ

final void testEnded(TestDescription test, long endTime, testMetrics)

ใช้แทน ERROR(/#testEnded(com.android.tradefed.result.TestDescription,Map)) ที่เราสามารถระบุเวลาสิ้นสุดได้ โดยตรง

void testEnded(TestDescription test, testMetrics)

รายงานการสิ้นสุดการดำเนินการของกรอบการทดสอบแต่ละรายการ

final void testFailed(TestDescription test, FailureDescription failure)

รายงานความล้มเหลวของกรอบการทดสอบแต่ละรายการ

final void testFailed(TestDescription test, String trace)

รายงานความล้มเหลวของกรอบการทดสอบแต่ละรายการ

final void testIgnored(TestDescription test)

เรียกใช้เมื่อการทดสอบจะไม่ทำงาน โดยทั่วไปเนื่องจากวิธีการทดสอบมีคำอธิบายประกอบด้วย org.junit. ignore

final void testModuleEnded()

รายงานเมื่อสิ้นสุดการเรียกใช้โมดูล

final void testModuleStarted(IInvocationContext moduleContext)

รายงานช่วงเริ่มต้นของโมดูลที่ทำงานอยู่

final void testRunEnded(long elapsedTimeMillis, runMetrics)

สิ้นสุดการทดสอบรายงาน

final void testRunFailed(FailureDescription failure)

การเรียกใช้การทดสอบรายงานล้มเหลวเนื่องจากความล้มเหลวที่อธิบายไว้โดย FailureDescription

final void testRunFailed(String errorMessage)

การดำเนินการทดสอบรายงานไม่สำเร็จเนื่องจากข้อผิดพลาดร้ายแรง

void testRunStarted(String runName, int testCount, int attemptNumber)

รายงานการเริ่มต้นการทดสอบ

final void testRunStarted(String runName, int testCount)

รายงานการเริ่มต้นการทดสอบ

void testRunStarted(String runName, int testCount, int attemptNumber, long startTime)

รายงานการเริ่มต้นการทดสอบ

final void testSkipped(TestDescription test, SkipReason reason)

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

final void testStarted(TestDescription test, long startTime)

ใช้แทน testStarted(com.android.tradefed.result.TestDescription) ซึ่งเราจะระบุเวลาที่ทดสอบด้วย เริ่ม รวมกับ ERROR(/#testEnded(com.android.tradefed.result.TestDescription,long,Map)) เพื่อการวัดผลที่แม่นยำ

final void testStarted(TestDescription test)

รายงานจุดเริ่มต้นของกรอบการทดสอบแต่ละรายการ

วิธีการป้องกัน

TestRecordProto.ChildReference createModuleChildReference(TestRecordProto.TestRecord record)

สร้างการอ้างอิงย่อยสำหรับโมดูล

ช่างก่อสร้างสาธารณะ

ProtoResultReporter

public ProtoResultReporter ()

วิธีการสาธารณะ

สิ้นสุดการเรียกใช้

public final void invocationEnded (long elapsedTime)

รายงานว่าคำขอสิ้นสุดลงแล้ว ไม่ว่าจะสำเร็จหรือเนื่องจากข้อผิดพลาดบางอย่าง

จะถูกเรียกโดยอัตโนมัติโดยเฟรมเวิร์ก TradeFederation

พารามิเตอร์
elapsedTime long: เวลาที่ผ่านไปของการเรียกใช้ หน่วยเป็นมิลลิวินาที

การเรียกใช้ล้มเหลว

public void invocationFailed (FailureDescription failure)

รายงานการเรียกใช้ที่ไม่สมบูรณ์เนื่องจากมีเงื่อนไขข้อผิดพลาดบางอย่าง

จะถูกเรียกโดยอัตโนมัติโดยเฟรมเวิร์ก TradeFederation

พารามิเตอร์
failure FailureDescription: FailureDescription ที่อธิบายสาเหตุของความล้มเหลว

การเรียกใช้ล้มเหลว

public void invocationFailed (Throwable cause)

รายงานการเรียกใช้ที่ไม่สมบูรณ์เนื่องจากมีเงื่อนไขข้อผิดพลาดบางอย่าง

จะถูกเรียกโดยอัตโนมัติโดยเฟรมเวิร์ก TradeFederation

พารามิเตอร์
cause Throwable: สาเหตุ Throwable ของความล้มเหลว

ข้ามการเรียกใช้

public void invocationSkipped (SkipReason reason)

รายงานการเรียกใช้ว่าข้าม

พารามิเตอร์
reason SkipReason

เริ่มคำขอแล้ว

public final void invocationStarted (IInvocationContext context)

รายงานจุดเริ่มต้นของการเรียกใช้การทดสอบ

จะถูกเรียกโดยอัตโนมัติโดยเฟรมเวิร์ก TradeFederation ผู้รายงานต้องลบล้าง เพื่อรองรับการรายงานอุปกรณ์หลายเครื่อง

พารามิเตอร์
context IInvocationContext: ข้อมูลเกี่ยวกับคำขอ

การเชื่อมโยงบันทึก

public final void logAssociation (String dataName, 
                LogFile logFile)

ในบางกรณี บันทึกต้องเชื่อมโยงอย่างมากกับกรอบการทดสอบ แต่โอกาสในการทำเช่นนั้น ดังนั้นใน testLogSaved(String, com.android.tradefed.result.LogDataType, com.android.tradefed.result.InputStreamSource, com.android.tradefed.result.LogFile) โดยตรง Callback ไม่ได้ ดังนั้น Callback นี้จึงช่วยให้เกิดการเชื่อมโยงที่แข็งแกร่ง อย่างชัดเจน

พารามิเตอร์
dataName String: ชื่อของข้อมูล

logFile LogFile: LogFile ที่บันทึกไว้ก่อนหน้านี้และควรเชื่อมโยงกับ กรอบการทดสอบ

ProcessFinalInvocationLogs

public void processFinalInvocationLogs (TestRecordProto.TestRecord invocationLogs)

ใช้ระเบียนการเรียกใช้เพื่อส่งบันทึกสุดท้ายของการเรียกใช้ทั้งหมดทีละรายการ

พารามิเตอร์
invocationLogs TestRecordProto.TestRecord: โปรโตคอลที่สมบูรณ์ซึ่งแสดงการเรียกใช้

ProcessFinalProto

public void processFinalProto (TestRecordProto.TestRecord finalRecord)

การจัดการ Proto สุดท้ายที่มีผลลัพธ์ทั้งหมด

พารามิเตอร์
finalRecord TestRecordProto.TestRecord: โปรโตคอลที่เสร็จสมบูรณ์ที่มีผลลัพธ์การเรียกใช้ทั้งหมด

ProcessStartInvocation

public void processStartInvocation (TestRecordProto.TestRecord invocationStartRecord, 
                IInvocationContext invocationContext)

การจัดการ Proto ของบันทึกการทดสอบการเรียกใช้บางส่วนหลังจาก invocationStarted(com.android.tradefed.invoker.IInvocationContext) เกิดขึ้น

พารามิเตอร์
invocationStartRecord TestRecordProto.TestRecord: Proto บางส่วนที่สร้างขึ้นหลังจาก invocationStart แล้ว

invocationContext IInvocationContext: การเรียกใช้ IInvocationContext

กระบวนการ TestCaseEnded

public void processTestCaseEnded (TestRecordProto.TestRecord testCaseRecord)

การจัดการ Proto ของระเบียนกรอบการทดสอบที่สรุปผลแล้วหลังจาก ERROR(/#testEnded(com.android.tradefed.result.TestDescription,long,HashMap)) เกิดขึ้น

พารามิเตอร์
testCaseRecord TestRecordProto.TestRecord: ต้นแบบที่สมบูรณ์ซึ่งแสดงกรอบการทดสอบ

กระบวนการ TestCaseStarted

public void processTestCaseStarted (TestRecordProto.TestRecord testCaseStartedRecord)

การจัดการ Proto ของระเบียนกรณีทดสอบบางส่วนหลังจาก testStarted(com.android.tradefed.result.TestDescription, long) เกิดขึ้น

พารามิเตอร์
testCaseStartedRecord TestRecordProto.TestRecord: โปรโตคอลบางส่วนที่แสดงถึงกรอบการทดสอบ

กระบวนการทดสอบโมดูลสิ้นสุด

public void processTestModuleEnd (TestRecordProto.TestRecord moduleRecord)

การจัดการ Proto ของระเบียนโมดูลที่สรุปผลแล้วหลังจาก testModuleEnded() เกิดขึ้น

พารามิเตอร์
moduleRecord TestRecordProto.TestRecord: Proto ที่เสร็จสมบูรณ์ซึ่งแสดงโมดูล

กระบวนการทดสอบโมดูลเริ่มต้นแล้ว

public void processTestModuleStarted (TestRecordProto.TestRecord moduleStartRecord)

การจัดการ Proto ของระเบียนโมดูลบางส่วนหลังจาก testModuleStarted(com.android.tradefed.invoker.IInvocationContext) เกิดขึ้น

พารามิเตอร์
moduleStartRecord TestRecordProto.TestRecord: โปรโตคอลบางส่วนที่แสดงถึงโมดูล

กระบวนการทดสอบสิ้นสุดแล้ว

public void processTestRunEnded (TestRecordProto.TestRecord runRecord, 
                boolean moduleInProgress)

การจัดการ Proto ของบันทึกการเรียกใช้ที่เสร็จสิ้นแล้วหลังจากวันที่ ERROR(/#testRunEnded(long,HashMap)) เกิดขึ้น

พารามิเตอร์
runRecord TestRecordProto.TestRecord: Proto ที่เสร็จสมบูรณ์ซึ่งแสดงการเรียกใช้

moduleInProgress boolean: ระบุว่าโมดูลอยู่ระหว่างดำเนินการหรือไม่

ProcessTestRunStarted

public void processTestRunStarted (TestRecordProto.TestRecord runStartedRecord)

การจัดการ Proto ของบันทึกการเรียกใช้การทดสอบบางส่วนหลังจาก testRunStarted(String, int) เกิดขึ้น

พารามิเตอร์
runStartedRecord TestRecordProto.TestRecord: โปรโตคอลบางส่วนที่แสดงถึงการเรียกใช้

setGranularResults

public void setGranularResults (boolean granularResults)

พารามิเตอร์
granularResults boolean

ตั้งค่าในบรรทัดบันทึกข้อมูลเด็ก

public void setInlineRecordOfChildren (boolean inline)

พารามิเตอร์
inline boolean

supportGranularResults

public boolean supportGranularResults ()

แสดงค่า "จริง" หากผู้รายงานรองรับผลการค้นหาแบบละเอียด หรือเป็นเท็จ

คิกรีเทิร์น
boolean

testAssumptionFailure

public final void testAssumptionFailure (TestDescription test, 
                String trace)

เรียกใช้เมื่อตัวบ่งชี้การทดสอบแบบอะตอมระบุว่ามีเงื่อนไขที่เป็นเท็จ

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

trace String: สแต็กเทรซของความล้มเหลว

testAssumptionFailure

public final void testAssumptionFailure (TestDescription test, 
                FailureDescription failure)

เรียกใช้เมื่อตัวบ่งชี้การทดสอบแบบอะตอมระบุว่ามีเงื่อนไขที่เป็นเท็จ

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

failure FailureDescription: FailureDescription ที่อธิบายความล้มเหลวและบริบท

สิ้นสุดการทดสอบ

public final void testEnded (TestDescription test, 
                long endTime, 
                 testMetrics)

ใช้แทน ERROR(/#testEnded(com.android.tradefed.result.TestDescription,Map)) ที่เราสามารถระบุเวลาสิ้นสุดได้ โดยตรง ใช้ร่วมกับ testStarted(com.android.tradefed.result.TestDescription, long) เพื่อการวัดที่แม่นยำ

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

endTime long: เวลาที่การทดสอบสิ้นสุดลง โดยวัดผ่าน System.currentTimeMillis()

testMetrics : เมตริก ERROR(/Map) รายการที่ระบบปล่อยออกมา

สิ้นสุดการทดสอบ

public void testEnded (TestDescription test, 
                 testMetrics)

รายงานการสิ้นสุดการดำเนินการของกรอบการทดสอบแต่ละรายการ

หากไม่มีการเรียกใช้ testFailed(TestDescription, FailureDescription) แสดงว่าการทดสอบนี้ผ่าน แสดงผลคีย์/ค่าทั้งหมดด้วย เมตริกที่อาจส่งออกในระหว่างการดำเนินการของกรอบการทดสอบ

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

testMetrics : เมตริก ERROR(/Map) รายการที่ระบบปล่อยออกมา

การทดสอบล้มเหลว

public final void testFailed (TestDescription test, 
                FailureDescription failure)

รายงานความล้มเหลวของกรอบการทดสอบแต่ละรายการ

จะมีการเรียกระหว่าง testStarted และ testEnded

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

failure FailureDescription: FailureDescription ที่อธิบายความล้มเหลวและบริบท

การทดสอบล้มเหลว

public final void testFailed (TestDescription test, 
                String trace)

รายงานความล้มเหลวของกรอบการทดสอบแต่ละรายการ

จะมีการเรียกระหว่าง testStarted และ testEnded

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

trace String: สแต็กเทรซของความล้มเหลว

ละเว้นการทดสอบแล้ว

public final void testIgnored (TestDescription test)

เรียกใช้เมื่อการทดสอบจะไม่ทำงาน โดยทั่วไปเนื่องจากวิธีการทดสอบมีคำอธิบายประกอบด้วย org.junit. ignore

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

โมดูลทดสอบสิ้นสุดแล้ว

public final void testModuleEnded ()

รายงานเมื่อสิ้นสุดการเรียกใช้โมดูล

testModuleStarted แล้ว

public final void testModuleStarted (IInvocationContext moduleContext)

รายงานช่วงเริ่มต้นของโมดูลที่ทำงานอยู่ Callback นี้เชื่อมโยงกับ testModuleEnded() และไม่บังคับในลำดับ โดยจะใช้ระหว่างการวิ่งที่ใช้ โมดูล: โปรแกรมวิ่งชุดโปรแกรม

พารามิเตอร์
moduleContext IInvocationContext: IInvocationContext ของโมดูล

สิ้นสุดการทดสอบแล้ว

public final void testRunEnded (long elapsedTimeMillis, 
                 runMetrics)

สิ้นสุดการทดสอบรายงาน แก้ไข: เราไม่สามารถมีแผนที่ 2 แบบ<> ที่มีอินเทอร์เฟซหลายประเภท ดังนั้น เราต้องใช้ HashMap ตรงนี้

พารามิเตอร์
elapsedTimeMillis long: เวลาที่อุปกรณ์รายงานเป็นมิลลิวินาทีที่ผ่านไป

runMetrics : คู่คีย์-ค่าที่รายงานเมื่อสิ้นสุดการทดสอบด้วย Metric

testRunFailed

public final void testRunFailed (FailureDescription failure)

การเรียกใช้การทดสอบรายงานล้มเหลวเนื่องจากความล้มเหลวที่อธิบายไว้โดย FailureDescription

พารามิเตอร์
failure FailureDescription: FailureDescription ที่อธิบายความล้มเหลวและบริบท

testRunFailed

public final void testRunFailed (String errorMessage)

การดำเนินการทดสอบรายงานไม่สำเร็จเนื่องจากข้อผิดพลาดร้ายแรง

พารามิเตอร์
errorMessage String: String อธิบายสาเหตุที่ทำให้เรียกใช้ล้มเหลว

เริ่มการทดสอบแล้ว

public void testRunStarted (String runName, 
                int testCount, 
                int attemptNumber)

รายงานการเริ่มต้นการทดสอบ

พารามิเตอร์
runName String: ชื่อการดำเนินการทดสอบ

testCount int: จำนวนการทดสอบทั้งหมดในการทดสอบ

attemptNumber int: หมายเลขคำสั่งซื้อ ซึ่งระบุความพยายามที่แตกต่างกันของ RunName เดียวกัน ซึ่งทำงานหลายครั้ง ค่าความพยายามNumber เป็น 0 และควรเพิ่มขึ้นทุกครั้ง การเรียกใช้ใหม่จะเกิดขึ้น เช่น ทำการทดสอบแบบละเอียด 3 ครั้ง ซึ่งน่าจะได้ทั้งหมด 4 ครั้ง ทำงานภายใต้ runName เดียวกัน และ beginNumber มีค่าตั้งแต่ 0 ถึง 3

เริ่มการทดสอบแล้ว

public final void testRunStarted (String runName, 
                int testCount)

รายงานการเริ่มต้นการทดสอบ

พารามิเตอร์
runName String: ชื่อการดำเนินการทดสอบ

testCount int: จำนวนการทดสอบทั้งหมดในการทดสอบ

เริ่มการทดสอบแล้ว

public void testRunStarted (String runName, 
                int testCount, 
                int attemptNumber, 
                long startTime)

รายงานการเริ่มต้นการทดสอบ

พารามิเตอร์
runName String: ชื่อการดำเนินการทดสอบ

testCount int: จำนวนการทดสอบทั้งหมดในการทดสอบ

attemptNumber int: หมายเลขคำสั่งซื้อ ซึ่งระบุความพยายามที่แตกต่างกันของ RunName เดียวกัน ซึ่งทำงานหลายครั้ง ค่าความพยายามNumber คือ 0 และควรเพิ่มขึ้นทุกครั้งที่ การเรียกใช้ใหม่จะเกิดขึ้น เช่น ทำการทดสอบแบบละเอียด 3 ครั้ง ควรมีการเรียกใช้ทั้งหมด 4 ครั้ง ภายใต้runName เดียวกัน และ beginNumber มีค่าตั้งแต่ 0 ถึง 3

startTime long: เวลาที่การเรียกใช้เริ่มต้น ซึ่งวัดผ่าน System.currentTimeMillis()

ข้ามการทดสอบแล้ว

public final void testSkipped (TestDescription test, 
                SkipReason reason)

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

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

reason SkipReason: SkipReason

เริ่มทดสอบแล้ว

public final void testStarted (TestDescription test, 
                long startTime)

ใช้แทน testStarted(com.android.tradefed.result.TestDescription) ซึ่งเราจะระบุเวลาที่ทดสอบด้วย เริ่ม รวมกับ ERROR(/#testEnded(com.android.tradefed.result.TestDescription,long,Map)) เพื่อการวัดผลที่แม่นยำ

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

startTime long: เวลาที่การทดสอบเริ่มต้นขึ้น วัดผ่าน System.currentTimeMillis()

เริ่มทดสอบแล้ว

public final void testStarted (TestDescription test)

รายงานจุดเริ่มต้นของกรอบการทดสอบแต่ละรายการ อินเทอร์เฟซเก่าควรใช้ testStarted(com.android.tradefed.result.TestDescription) เมื่อใดก็ตามที่เป็นไปได้

พารามิเตอร์
test TestDescription: ระบุการทดสอบ

วิธีการป้องกัน

createModuleChildReference

protected TestRecordProto.ChildReference createModuleChildReference (TestRecordProto.TestRecord record)

สร้างการอ้างอิงย่อยสำหรับโมดูล

พารามิเตอร์
record TestRecordProto.TestRecord

คิกรีเทิร์น
TestRecordProto.ChildReference