REST Resource: projects.histories.executions.steps

แหล่งข้อมูล: ขั้นตอน

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

ขั้นตอนสามารถทับซ้อนกันได้ (เช่น สองขั้นตอนอาจมีเวลาเริ่มต้นเท่ากัน หากการดำเนินการบางอย่างทำพร้อมกัน)

นี่คือตัวอย่าง ลองพิจารณาว่าเรามีบิลด์ต่อเนื่องที่กำลังดำเนินการทดสอบสำหรับการวนซ้ำแต่ละครั้ง ขั้นตอนการทำงานจะมีลักษณะดังนี้: - ผู้ใช้สร้างการดำเนินการด้วย id 1 - ผู้ใช้สร้าง TestExecutionStep ด้วย id 100 สำหรับการดำเนินการ 1 - ผู้ใช้อัปเดต TestExecutionStep ด้วย id 100 เพื่อเพิ่มบันทึก xml แบบดิบ + บริการแยกวิเคราะห์บันทึก xml และส่งกลับ TestExecutionStep ด้วย อัปเดตผลการทดสอบแล้ว - ผู้ใช้อัปเดตสถานะของ TestExecutionStep ด้วย id 100 เป็น COMPLETE

ขั้นตอนสามารถอัปเดตได้จนกว่าสถานะจะถูกตั้งค่าเป็นเสร็จสมบูรณ์ ซึ่ง ณ จุดนั้นจะไม่เปลี่ยนรูป

การเป็นตัวแทน JSON
{
  "stepId": string,
  "creationTime": {
    object (Timestamp)
  },
  "completionTime": {
    object (Timestamp)
  },
  "name": string,
  "description": string,
  "state": enum (State),
  "outcome": {
    object (Outcome)
  },
  "hasImages": boolean,
  "labels": {
    string: string,
    ...
  },
  "dimensionValue": {
    string: string,
    ...
  },
  "runDuration": {
    object (Duration)
  },
  "deviceUsageDuration": {
    object (Duration)
  },
  "multiStep": {
    object (MultiStep)
  },

  // Union field step can be only one of the following:
  "testExecutionStep": {
    object (TestExecutionStep)
  },
  "toolExecutionStep": {
    object (ToolExecutionStep)
  }
  // End of list of possible types for union field step.
}
เขตข้อมูล
stepId

string

ตัวระบุที่ไม่ซ้ำกันภายในการดำเนินการสำหรับขั้นตอนนี้

ส่งคืน INVALID_ARGUMENT หากฟิลด์นี้ถูกตั้งค่าหรือเขียนทับโดยผู้เรียก

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง/อัปเดต: ไม่เคยตั้งค่า
creationTime

object ( Timestamp )

เวลาที่ขั้นตอนถูกสร้างขึ้น

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง/อัปเดต: ไม่เคยตั้งค่า
completionTime

object ( Timestamp )

เวลาที่สถานะขั้นตอนถูกตั้งค่าให้เสร็จสมบูรณ์

ค่านี้จะถูกตั้งค่าโดยอัตโนมัติเมื่อสถานะเปลี่ยนเป็นเสร็จสมบูรณ์

  • ในการตอบสนอง: ตั้งค่าว่าสถานะการดำเนินการเสร็จสมบูรณ์หรือไม่
  • ในคำขอสร้าง/อัปเดต: ไม่เคยตั้งค่า
name

string

ชื่อสั้นๆ ที่มนุษย์สามารถอ่านได้เพื่อแสดงใน UI สูงสุด 100 ตัวอักษร ตัวอย่างเช่น: ทำความสะอาดบิลด์

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

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง: ตั้งค่าเสมอ
  • ในคำขออัปเดต: ไม่เคยตั้งค่า
description

string

คำอธิบายของเครื่องมือนี้ ตัวอย่างเช่น: mvn clean package -D skikTests=true

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยคำขอสร้าง/อัปเดต
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น
state

enum ( State )

สถานะเริ่มต้นคือ IN_PROGRESS การเปลี่ยนสถานะทางกฎหมายเพียงอย่างเดียวคือ * IN_PROGRESS -> COMPLETE

PRECONDITION_FAILED จะถูกส่งคืนหากมีการร้องขอการเปลี่ยนแปลงที่ไม่ถูกต้อง

สามารถสร้างขั้นตอนด้วยสถานะที่ตั้งค่าเป็นเสร็จสมบูรณ์ได้ สถานะสามารถตั้งค่าให้เสร็จสมบูรณ์ได้เพียงครั้งเดียวเท่านั้น PRECONDITION_FAILED จะถูกส่งกลับหากสถานะถูกตั้งค่าเป็น COMPLETE หลายครั้ง

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น
outcome

object ( Outcome )

การจำแนกผลลัพธ์ เช่น ความสำเร็จหรือความล้มเหลว

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยคำขอสร้าง/อัปเดต
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น
hasImages

boolean

ไม่ว่าผลลัพธ์ใดๆ ของขั้นตอนนี้เป็นรูปภาพที่สามารถดึงภาพขนาดย่อด้วย thumbnails.list ได้หรือไม่

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง/อัปเดต: ไม่เคยตั้งค่า
labels

map (key: string, value: string)

คู่คีย์/ค่าที่ผู้ใช้ระบุซึ่งเชื่อมโยงกับขั้นตอน

ผู้ใช้มีหน้าที่รับผิดชอบในการจัดการเนมสเปซของคีย์ เพื่อไม่ให้คีย์ชนกันโดยไม่ได้ตั้งใจ

INVALID_ARGUMENT จะถูกส่งกลับหากจำนวนป้ายกำกับเกิน 100 หรือหากความยาวของคีย์หรือค่าใดๆ เกิน 100 อักขระ

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่จำเป็น; คู่คีย์/ค่าใหม่จะถูกเพิ่มลงในแผนที่ และค่าใหม่สำหรับคีย์ที่มีอยู่จะอัปเดตค่าของคีย์นั้น

วัตถุที่มีรายการ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

dimensionValue

map (key: string, value: string)

หากการดำเนินการที่มีขั้นตอนนี้มีชุดการกำหนดมิติข้อมูล ฟิลด์นี้จะอนุญาตให้รายการย่อยระบุค่าของมิติได้

คีย์ต้องตรงกับ size_definition ของการดำเนินการทุกประการ

ตัวอย่างเช่น หากการดำเนินการมี dimension_definition = ['attempt', 'device'] ขั้นตอนจะต้องกำหนดค่าสำหรับมิติเหล่านั้น เช่น dimensionValue = ['attempt': '1', 'device': 'Nexus 6']

หากขั้นตอนไม่มีส่วนร่วมในมิติหนึ่งของเมทริกซ์ ค่าสำหรับมิตินั้นควรเป็นสตริงว่าง ตัวอย่างเช่น หากการทดสอบรายการใดรายการหนึ่งดำเนินการโดยรันเนอร์ที่ไม่รองรับการลองใหม่ ขั้นตอนอาจมี dimensionValue = ['attempt': '', 'device': 'Nexus 6']

หากขั้นตอนไม่ได้มีส่วนร่วมในมิติใดๆ ของเมทริกซ์ ก็อาจทำให้ sizeValue ไม่ได้ตั้งค่า

PRECONDITION_FAILED จะถูกส่งคืนหากไม่มีคีย์ใด ๆ อยู่ใน dimensions_definition ของการดำเนินการ

PRECONDITION_FAILED จะถูกส่งคืนหากขั้นตอนอื่นในการดำเนินการนี้มีชื่อและ sizeValue เหมือนกันอยู่แล้ว แต่แตกต่างกันในฟิลด์ข้อมูลอื่น เช่น ฟิลด์ step แตกต่างกัน

PRECONDITION_FAILED จะถูกส่งกลับหากมีการตั้งค่า sizeValue และมี dimensions_definition ในการดำเนินการซึ่งไม่ได้ระบุว่าเป็นหนึ่งในคีย์

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยการสร้าง
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่เคยตั้งค่า

วัตถุที่มีรายการ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

runDuration

object ( Duration )

ขั้นตอนนี้ใช้เวลานานเท่าใดจึงจะทำงาน

หากไม่ได้ตั้งค่า ค่านี้จะถูกตั้งค่าเป็นความแตกต่างระหว่าง CreationTime และ FinishTime เมื่อขั้นตอนถูกตั้งค่าเป็นสถานะ COMPLETE ในบางกรณี เหมาะสมที่จะตั้งค่านี้แยกจากกัน: ตัวอย่างเช่น หากขั้นตอนถูกสร้างขึ้น แต่การดำเนินการที่แสดงนั้นถูกจัดคิวไว้สองสามนาทีก่อนที่จะดำเนินการ จะเป็นการเหมาะสมที่จะไม่รวมเวลาที่ใช้ในคิวไว้ในขั้นตอนนั้น วิ่งระยะเวลา

PRECONDITION_FAILED จะถูกส่งคืนหากมีคนพยายามตั้งค่า runDuration ในขั้นตอนที่ได้ตั้งค่าฟิลด์นี้ไว้แล้ว

  • ในการตอบสนอง: นำเสนอหากตั้งค่าไว้ก่อนหน้านี้; ปรากฏอยู่ในขั้นตอนที่เสร็จสมบูรณ์เสมอ
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่จำเป็น
deviceUsageDuration

object ( Duration )

มีการใช้ทรัพยากรอุปกรณ์มากน้อยเพียงใดในการทดสอบ

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

PRECONDITION_FAILED จะถูกส่งคืนหากมีคนพยายามตั้งค่า device_usage ในขั้นตอนที่ได้ตั้งค่าฟิลด์นี้ไว้แล้ว

  • ในการตอบสนอง: นำเสนอหากตั้งค่าไว้ก่อนหน้านี้
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่จำเป็น
multiStep

object ( MultiStep )

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

  • ในการตอบสนอง: นำเสนอหากตั้งค่าไว้ก่อนหน้านี้
  • ในคำขอสร้าง: เป็นทางเลือก ให้ตั้งค่า iff ขั้นตอนนี้ถูกดำเนินการมากกว่าหนึ่งครั้ง
  • ในคำขออัปเดต: ไม่จำเป็น

step สนามยูเนี่ยน

step สามารถเป็นได้เพียงอย่างใดอย่างหนึ่งต่อไปนี้:

testExecutionStep

object ( TestExecutionStep )

การประหารชีวิตของนักวิ่งทดสอบ

toolExecutionStep

object ( ToolExecutionStep )

การดำเนินการของเครื่องมือ (ใช้สำหรับขั้นตอนที่เราไม่สนับสนุนอย่างชัดเจน)

ทดสอบการดำเนินการขั้นตอน

ขั้นตอนที่แสดงถึงการทดสอบที่กำลังรันอยู่

ยอมรับไฟล์ ant-junit xml ซึ่งจะถูกแยกวิเคราะห์ผลการทดสอบที่มีโครงสร้างโดยบริการ เส้นทางไฟล์ Xml ได้รับการอัปเดตเพื่อที่จะเพิ่มไฟล์ต่อท้าย แต่ไม่สามารถลบได้

ผู้ใช้ยังสามารถเพิ่มผลการทดสอบด้วยตนเองโดยใช้ฟิลด์ test_result

การเป็นตัวแทน JSON
{
  "testSuiteOverviews": [
    {
      object (TestSuiteOverview)
    }
  ],
  "toolExecution": {
    object (ToolExecution)
  },
  "testIssues": [
    {
      object (TestIssue)
    }
  ],
  "testTiming": {
    object (TestTiming)
  }
}
เขตข้อมูล
testSuiteOverviews[]

object ( TestSuiteOverview )

รายการเนื้อหาภาพรวมของชุดทดสอบ ซึ่งอาจแยกวิเคราะห์จากบันทึก xUnit XML โดยเซิร์ฟเวอร์ หรืออัปโหลดโดยผู้ใช้โดยตรง ควรเรียกใช้การอ้างอิงนี้เมื่อมีการแยกวิเคราะห์หรืออัปโหลดชุดทดสอบโดยสมบูรณ์เท่านั้น

จำนวนภาพรวมชุดทดสอบสูงสุดที่อนุญาตต่อขั้นตอนคือ 1,000

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่เคย (ใช้วิธีการกำหนดเอง publishXunitXmlFiles แทน)
toolExecution

object ( ToolExecution )

แสดงถึงการดำเนินการของนักวิ่งทดสอบ

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

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น
testIssues[]

object ( TestIssue )

ปัญหาที่พบในระหว่างการดำเนินการทดสอบ

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

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยการสร้างหรืออัปเดต
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น
testTiming

object ( TestTiming )

การแบ่งจังหวะเวลาของการดำเนินการทดสอบ

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยการสร้างหรืออัปเดต
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น

เครื่องมือการดำเนินการ

การดำเนินการตามเครื่องมือที่กำหนดเอง อาจเป็นตัวดำเนินการทดสอบหรือเครื่องมือในการคัดลอกสิ่งประดิษฐ์หรือปรับใช้โค้ด

การเป็นตัวแทน JSON
{
  "commandLineArguments": [
    string
  ],
  "toolLogs": [
    {
      object (FileReference)
    }
  ],
  "exitCode": {
    object (ToolExitCode)
  },
  "toolOutputs": [
    {
      object (ToolOutputReference)
    }
  ]
}
เขตข้อมูล
commandLineArguments[]

string

บรรทัดคำสั่งโทเค็นแบบเต็มรวมถึงชื่อโปรแกรม (เทียบเท่ากับ argv ในโปรแกรม C)

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยคำขอสร้าง
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่เคยตั้งค่า
toolLogs[]

object ( FileReference )

การอ้างอิงถึงบันทึกข้อความธรรมดาจะแสดงการทำงานของเครื่องมือ

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

จำนวนบันทึกเครื่องมือสูงสุดที่อนุญาตต่อขั้นตอนคือ 1,000

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยคำขอสร้าง/อัปเดต
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่บังคับ ค่าใดๆ ที่ระบุจะถูกผนวกเข้ากับรายการที่มีอยู่
exitCode

object ( ToolExitCode )

รหัสทางออกการเรียกใช้เครื่องมือ ฟิลด์นี้จะถูกตั้งค่าเมื่อออกจากเครื่องมือแล้ว

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยคำขอสร้าง/อัปเดต
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่บังคับ ข้อผิดพลาด FAILED_PRCONDITION จะถูกส่งกลับหากมีการตั้งค่า exitCode แล้ว
toolOutputs[]

object ( ToolOutputReference )

การอ้างอิงถึงไฟล์ทึบแสงของเอาต์พุตรูปแบบใดๆ โดยการใช้เครื่องมือ

จำนวนเอาต์พุตเครื่องมือสูงสุดที่อนุญาตต่อขั้นตอนคือ 1,000

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยคำขอสร้าง/อัปเดต
  • ในคำขอสร้าง: ไม่จำเป็น
  • ในคำขออัปเดต: ไม่บังคับ ค่าใดๆ ที่ระบุจะถูกผนวกเข้ากับรายการที่มีอยู่

เครื่องมือExitCode

รหัสออกจากการทำงานของเครื่องมือ

การเป็นตัวแทน JSON
{
  "number": integer
}
เขตข้อมูล
number

integer

รหัสทางออกการเรียกใช้เครื่องมือ ค่า 0 หมายความว่าการดำเนินการสำเร็จ

  • ในการตอบสนอง: ตั้งค่าไว้เสมอ
  • ในคำขอสร้าง/อัปเดต: ตั้งค่าไว้เสมอ

ปัญหาการทดสอบ

ตรวจพบปัญหาที่เกิดขึ้นระหว่างการดำเนินการทดสอบ

การเป็นตัวแทน JSON
{
  "errorMessage": string,
  "stackTrace": {
    object (StackTrace)
  },
  "warning": {
    object (Any)
  },
  "severity": enum (Severity),
  "type": enum (Type),
  "category": enum (Category)
}
เขตข้อมูล
errorMessage

string

ข้อความสั้นๆ ที่มนุษย์สามารถอ่านได้ซึ่งอธิบายถึงปัญหา ที่จำเป็น.

stackTrace
(deprecated)

object ( StackTrace )

เลิกใช้งานแล้วเพื่อใช้ช่องการติดตามสแต็กภายในคำเตือนเฉพาะ

warning

object ( Any )

ข้อความแจ้งเตือนพร้อมรายละเอียดเพิ่มเติมของปัญหา ควรเป็นข้อความจาก com.google.devtools.toolresults.v1.warnings เสมอ

severity

enum ( Severity )

ความรุนแรงของปัญหา ที่จำเป็น.

type

enum ( Type )

ประเภทของปัญหา ที่จำเป็น.

category

enum ( Category )

ประเภทของปัญหา ที่จำเป็น.

ใดๆ

Any มีข้อความบัฟเฟอร์โปรโตคอลแบบซีเรียลไลซ์ตามอำเภอใจ พร้อมด้วย URL ที่อธิบายประเภทของข้อความซีเรียลไลซ์

ไลบรารี Protobuf ให้การสนับสนุนในการแพ็ก/คลายแพ็กค่าใดๆ ในรูปแบบของฟังก์ชันอรรถประโยชน์หรือวิธีการสร้างเพิ่มเติมประเภทใดก็ได้

ตัวอย่างที่ 1: แพ็คและแกะข้อความในภาษา C++

Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
  ...
}

ตัวอย่างที่ 2: แพ็คและแตกข้อความใน Java

Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
  foo = any.unpack(Foo.class);
}

ตัวอย่างที่ 3: แพ็คและแกะข้อความใน Python

foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
  any.Unpack(foo)
  ...

ตัวอย่างที่ 4: แพ็คและแกะข้อความใน Go

 foo := &pb.Foo{...}
 any, err := ptypes.MarshalAny(foo)
 ...
 foo := &pb.Foo{}
 if err := ptypes.UnmarshalAny(any, foo); err != nil {
   ...
 }

วิธีการแพ็คที่จัดทำโดยไลบรารี protobuf โดยค่าเริ่มต้นจะใช้ 'type.googleapis.com/full.type.name' เป็น URL ประเภท และวิธีการแตกไฟล์จะใช้เฉพาะชื่อประเภทที่ผ่านการรับรองโดยสมบูรณ์หลัง '/' สุดท้ายใน URL ประเภท ตัวอย่างเช่น "foo.bar.com/x/yz" จะให้ชื่อประเภท "yz"

เจสัน

การแสดง JSON ของค่า Any จะใช้การแสดงปกติของข้อความดีซีเรียลไลซ์ที่ฝังอยู่ โดยมี @type ฟิลด์เพิ่มเติมซึ่งมี URL ประเภท ตัวอย่าง:

package google.profile;
message Person {
  string first_name = 1;
  string last_name = 2;
}

{
  "@type": "type.googleapis.com/google.profile.Person",
  "firstName": <string>,
  "lastName": <string>
}

หากประเภทข้อความที่ฝังเป็นที่รู้จักและมีการแสดง JSON แบบกำหนดเอง การแสดงนั้นจะถูกฝังโดยเพิ่ม value ฟิลด์ที่เก็บ JSON แบบกำหนดเอง นอกเหนือจากฟิลด์ @type ตัวอย่าง (สำหรับข้อความ google.protobuf.Duration ):

{
  "@type": "type.googleapis.com/google.protobuf.Duration",
  "value": "1.212s"
}
การเป็นตัวแทน JSON
{
  "typeUrl": string,
  "value": string
}
เขตข้อมูล
typeUrl

string

ชื่อ URL/ทรัพยากรที่ระบุประเภทของข้อความบัฟเฟอร์โปรโตคอลแบบอนุกรมโดยไม่ซ้ำกัน สตริงนี้ต้องมีอักขระ "/" อย่างน้อยหนึ่งตัว ส่วนสุดท้ายของเส้นทางของ URL จะต้องแสดงถึงชื่อแบบเต็มของประเภท (เช่นใน path/google.protobuf.Duration ) ชื่อควรอยู่ในรูปแบบมาตรฐาน (เช่น ไม่ยอมรับการนำหน้า ".")

ในทางปฏิบัติ ทีมมักจะคอมไพล์ล่วงหน้าเป็นไบนารีทุกประเภทที่พวกเขาคาดหวังว่าจะใช้ในบริบทของ Any อย่างไรก็ตาม สำหรับ URL ที่ใช้รูปแบบ http , https หรือไม่มีรูปแบบ คุณสามารถเลือกที่จะตั้งค่าเซิร์ฟเวอร์ประเภทที่แมป URL ประเภทกับคำจำกัดความของข้อความได้ดังนี้:

  • หากไม่มีรูปแบบใดๆ มาให้ ระบบจะถือว่า https
  • HTTP GET บน URL จะต้องให้ค่า google.protobuf.Type ในรูปแบบไบนารี มิฉะนั้นจะทำให้เกิดข้อผิดพลาด
  • แอปพลิเคชันได้รับอนุญาตให้แคชผลการค้นหาตาม URL หรือให้คอมไพล์ล่วงหน้าเป็นไบนารีเพื่อหลีกเลี่ยงการค้นหาใดๆ ดังนั้น ความเข้ากันได้ของไบนารีจำเป็นต้องได้รับการเก็บรักษาไว้เมื่อมีการเปลี่ยนแปลงประเภท (ใช้ชื่อประเภทเวอร์ชันเพื่อจัดการการเปลี่ยนแปลงที่ไม่สมบูรณ์)

หมายเหตุ: ขณะนี้ฟังก์ชันนี้ยังไม่มีในรุ่น protobuf อย่างเป็นทางการ และไม่ได้ใช้สำหรับ URL ประเภทที่ขึ้นต้นด้วย type.googleapis.com

รูปแบบอื่นที่ไม่ใช่ http , https (หรือรูปแบบว่าง) อาจถูกนำมาใช้กับความหมายเฉพาะของการใช้งาน

value

string ( bytes format)

ต้องเป็นบัฟเฟอร์โปรโตคอลแบบอนุกรมที่ถูกต้องของประเภทที่ระบุข้างต้น

สตริงที่เข้ารหัส base64

ความรุนแรง

ความรุนแรงของปัญหา

เอนัม
unspecifiedSeverity ความรุนแรงที่ไม่ได้ระบุเป็นค่าเริ่มต้น ไม่ได้ใช้. สำหรับเวอร์ชันเท่านั้น
info ปัญหาที่ไม่ร้ายแรง โดยให้ข้อมูลบางอย่างแก่ผู้ใช้เกี่ยวกับการทดสอบการทำงาน
suggestion ปัญหาที่ไม่ร้ายแรง โดยให้คำแนะนำแก่ผู้ใช้ในการปรับปรุงประสบการณ์การทดสอบ เช่น การแนะนำให้ใช้ Game Loop
warning ปัญหาที่อาจร้ายแรง
severe ปัญหาที่สำคัญ

พิมพ์

ประเภทของปัญหา

เอนัม
unspecifiedType ประเภทที่ไม่ระบุเริ่มต้น ไม่ได้ใช้. สำหรับเวอร์ชันเท่านั้น
fatalException ปัญหาถือเป็นข้อยกเว้นร้ายแรง
nativeCrash ปัญหาคือข้อขัดข้องดั้งเดิม
anr ปัญหาคือข้อขัดข้องของ ANR
unusedRoboDirective ปัญหาคือคำสั่ง robo ที่ไม่ได้ใช้
compatibleWithOrchestrator ปัญหาคือข้อเสนอแนะให้ใช้ออเคสตรา
launcherActivityNotFound ปัญหาเกี่ยวกับการค้นหากิจกรรมตัวเรียกใช้งาน
startActivityNotFound ปัญหาเกี่ยวกับการแก้ไขความตั้งใจที่ผู้ใช้ระบุในการเริ่มต้นกิจกรรม
incompleteRoboScriptExecution สคริปต์ Robo ไม่ได้รับการดำเนินการอย่างสมบูรณ์
completeRoboScriptExecution สคริปต์ Robo ได้รับการดำเนินการอย่างสมบูรณ์และประสบความสำเร็จ
failedToInstall APK ไม่สามารถติดตั้งได้
nonSdkApiUsageViolation แอปเข้าถึง Api ที่ไม่ใช่ SDK
nonSdkApiUsageReport แอปเข้าถึง non-sdk Api (รายงานรายละเอียดใหม่)
encounteredNonAndroidUiWidgetScreen พบการรวบรวมข้อมูล Robo อย่างน้อยหนึ่งหน้าจอที่มีองค์ประกอบที่ไม่ใช่วิดเจ็ต Android UI
encounteredLoginScreen การรวบรวมข้อมูล Robo พบหน้าจอเข้าสู่ระบบที่เป็นไปได้อย่างน้อยหนึ่งหน้าจอ
performedGoogleLogin Robo ลงชื่อเข้าใช้ด้วย Google
iosException แอพ iOS ขัดข้องโดยมีข้อยกเว้น
iosCrash แอพ iOS ขัดข้องโดยไม่มีข้อยกเว้น (เช่น ถูกฆ่า)
performedMonkeyActions การรวบรวมข้อมูลของ Robo เกี่ยวข้องกับการกระทำของลิง
usedRoboDirective การรวบรวมข้อมูล Robo ใช้คำสั่ง Robo
usedRoboIgnoreDirective การรวบรวมข้อมูล Robo ใช้คำสั่ง Robo เพื่อละเว้นองค์ประกอบ UI
insufficientCoverage Robo ไม่ได้รวบรวมข้อมูลบางส่วนที่อาจสำคัญของแอป
inAppPurchases การรวบรวมข้อมูลของ Robo เกี่ยวข้องกับการซื้อในแอปบางอย่าง
crashDialogError ตรวจพบกล่องโต้ตอบข้อขัดข้องระหว่างการดำเนินการทดสอบ
uiElementsTooDeep ความลึกขององค์ประกอบ UI มากกว่าเกณฑ์
blankScreen พบหน้าจอว่างในการรวบรวมข้อมูล Robo
overlappingUiElements พบองค์ประกอบ UI ที่ทับซ้อนกันในการรวบรวมข้อมูล Robo
unityException ตรวจพบข้อยกเว้น Unity ที่ไม่ถูกตรวจจับ (แอปเหล่านี้ไม่ขัดข้อง)
deviceOutOfMemory ตรวจพบอุปกรณ์ที่มีหน่วยความจำไม่เพียงพอ
logcatCollectionError ตรวจพบปัญหาขณะรวบรวม logcat
detectedAppSplashScreen Robo ตรวจพบหน้าจอเริ่มต้นที่มาจากแอป (เทียบกับหน้าจอเริ่มต้นระบบปฏิบัติการ Android)

หมวดหมู่

หมวดหมู่ของประเด็น

เอนัม
unspecifiedCategory หมวดหมู่ที่ไม่ระบุเริ่มต้น ไม่ได้ใช้. สำหรับเวอร์ชันเท่านั้น
common ปัญหาไม่เฉพาะเจาะจงกับประเภทการทดสอบใดประเภทหนึ่ง (เช่น ข้อขัดข้องของระบบ)
robo ปัญหาเกิดขึ้นเฉพาะกับการทำงานของ Robo

การทดสอบระยะเวลา

การแบ่งเวลาการทดสอบเพื่อทราบขั้นตอน

การเป็นตัวแทน JSON
{
  "testProcessDuration": {
    object (Duration)
  }
}
เขตข้อมูล
testProcessDuration

object ( Duration )

ใช้เวลานานเท่าใดในการรันกระบวนการทดสอบ

  • ในการตอบสนอง: นำเสนอหากตั้งค่าไว้ก่อนหน้านี้
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น

เครื่องมือการดำเนินการขั้นตอน

ขั้นตอนเครื่องมือทั่วไปที่จะใช้กับไบนารีที่เราไม่รองรับอย่างชัดเจน ตัวอย่างเช่น: การเรียกใช้ cp เพื่อคัดลอกสิ่งประดิษฐ์จากที่หนึ่งไปยังอีกที่หนึ่ง

การเป็นตัวแทน JSON
{
  "toolExecution": {
    object (ToolExecution)
  }
}
เขตข้อมูล
toolExecution

object ( ToolExecution )

การใช้เครื่องมือ

  • ในการตอบสนอง: นำเสนอหากตั้งค่าโดยคำขอสร้าง/อัปเดต
  • ในคำขอสร้าง/อัปเดต: ไม่จำเป็น

หลายขั้นตอน

รายละเอียดเมื่อรันหลายขั้นตอนด้วยการกำหนดค่าเดียวกันกับกลุ่ม

การเป็นตัวแทน JSON
{
  "primaryStepId": string,
  "multistepNumber": integer,
  "primaryStep": {
    object (PrimaryStep)
  }
}
เขตข้อมูล
primaryStepId

string

รหัสขั้นตอนของขั้นตอนหลัก (เดิม) ซึ่งอาจเป็นขั้นตอนนี้

multistepNumber

integer

int ที่ไม่ซ้ำกันให้กับแต่ละขั้นตอน ช่วงตั้งแต่ 0 (รวม) ถึงจำนวนขั้นตอนทั้งหมด (ไม่รวม) ขั้นตอนหลักคือ 0

primaryStep

object ( PrimaryStep )

นำเสนอหากเป็นขั้นตอนหลัก (ดั้งเดิม)

ขั้นตอนหลัก

จัดเก็บสถานะการทดสอบการยกเลิกของหลายขั้นตอนที่รันเป็นกลุ่มและผลลัพธ์ของแต่ละขั้นตอน

การเป็นตัวแทน JSON
{
  "rollUp": enum (OutcomeSummary),
  "individualOutcome": [
    {
      object (IndividualOutcome)
    }
  ]
}
เขตข้อมูล
rollUp

enum ( OutcomeSummary )

สถานะการทดสอบภาพรวมของหลายขั้นตอนที่ทำงานด้วยการกำหนดค่าเดียวกันกับกลุ่ม

individualOutcome[]

object ( IndividualOutcome )

รหัสขั้นตอนและผลลัพธ์ของแต่ละขั้นตอน

ผลลัพธ์ส่วนบุคคล

รหัสขั้นตอนและผลลัพธ์ของแต่ละขั้นตอนที่รันเป็นกลุ่มโดยมีขั้นตอนอื่นๆ ที่มีการกำหนดค่าเดียวกัน

การเป็นตัวแทน JSON
{
  "stepId": string,
  "outcomeSummary": enum (OutcomeSummary),
  "multistepNumber": integer,
  "runDuration": {
    object (Duration)
  }
}
เขตข้อมูล
stepId

string

outcomeSummary

enum ( OutcomeSummary )

multistepNumber

integer

int ที่ไม่ซ้ำกันให้กับแต่ละขั้นตอน ช่วงตั้งแต่ 0 (รวม) ถึงจำนวนขั้นตอนทั้งหมด (ไม่รวม) ขั้นตอนหลักคือ 0

runDuration

object ( Duration )

ขั้นตอนนี้ใช้เวลานานเท่าใดจึงจะทำงาน

วิธีการ

accessibilityClusters

แสดงรายการคลัสเตอร์การเข้าถึงสำหรับขั้นตอนที่กำหนด

อาจส่งคืนรหัสข้อผิดพลาดตามรูปแบบบัญญัติต่อไปนี้:

  • PERMISSION_DENIED - หากผู้ใช้ไม่ได้รับอนุญาตให้อ่านโครงการ
  • INVALID_ARGUMENT - หากคำขอมีรูปแบบไม่ถูกต้อง
  • FAILED_PRCONDITION - หากอาร์กิวเมนต์ในคำขอเกิดขึ้นไม่ถูกต้อง เช่น

create

สร้างขั้นตอน

get

ได้รับขั้นตอน

getPerfMetricsSummary

ดึงข้อมูลสรุป PerfMetrics

list

แสดงรายการขั้นตอนสำหรับการดำเนินการที่กำหนด

patch

อัพเดตขั้นตอนที่มีอยู่ด้วยเอนทิตีบางส่วนที่ให้มา

publishXunitXmlFiles

เผยแพร่ไฟล์ xml ไปยังขั้นตอนที่มีอยู่