REST Resource: projects.histories.executions.steps

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

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

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

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

คุณสามารถอัปเดตขั้นตอนจนกว่าจะตั้งค่าสถานะเป็น 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)

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

ค่านี้จะได้รับการกำหนดโดยอัตโนมัติเมื่อสถานะเปลี่ยนเป็น COMPLETE

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

string

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

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

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

string

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

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

enum (State)

สถานะเริ่มต้นคือ IN_PROGRESS การเปลี่ยนแปลงสถานะทางกฎหมายเพียงอย่างเดียวคือ * IN_PROGRESS -> เสร็จสมบูรณ์

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

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

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

object (Outcome)

การจัดประเภทผลลัพธ์ เช่น สำเร็จ หรือ FAILURE

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

boolean

เอาต์พุตของขั้นตอนนี้เป็นรูปภาพที่มีภาพขนาดย่อที่ดึงข้อมูลด้วยภาพขนาดย่อของรายการได้หรือไม่

  • ในการตอบกลับ: ตั้งค่าเสมอ
  • ในคำขอสร้าง/อัปเดต: ไม่ได้ตั้งค่าไว้
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)

หากการดำเนินการที่มีขั้นตอนนี้มีการตั้งค่า "dimension_definition" ไว้ ช่องนี้จะอนุญาตให้ผู้เผยแพร่โฆษณาย่อยระบุค่าของมิติข้อมูลได้

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

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

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

หากขั้นตอนไม่ได้มีส่วนร่วมในมิติข้อมูลใดๆ ของเมทริกซ์ ระบบอาจไม่ตั้งค่าdimensionValue

ระบบจะแสดงผล PRECONDITION_FAILED หากคีย์ใดไม่ได้อยู่ใน "dimension_definition" ของการดำเนินการ

ระบบจะแสดงผล PRECONDITION_FAILED หากอีกขั้นตอนหนึ่งในการดำเนินการนี้มีชื่อและdimensionValue เหมือนกันแต่แตกต่างกันในฟิลด์ข้อมูลอื่นๆ เช่น ฟิลด์ขั้นตอนแตกต่างกัน

ระบบจะแสดงผล PRECONDITION_FAILED หากมีการตั้งค่าdimensionValue และมี "dimension_definition" ในการดำเนินการซึ่งไม่ได้ระบุเป็นคีย์ใดคีย์หนึ่ง

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

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

runDuration

object (Duration)

เวลาที่ขั้นตอนนี้ใช้ในการทํางาน

หากไม่ได้ตั้งค่า ค่านี้จะเป็นความแตกต่างระหว่าง generateTime กับอันงดงาม เมื่อตั้งค่าขั้นตอนเป็นสถานะ COMPLETE ในบางกรณี การตั้งค่าแยกต่างหากจะเป็นเรื่องที่เหมาะสม เช่น หากมีการสร้างขั้นตอน แต่การดำเนินการที่ขั้นตอนดังกล่าวอยู่ในคิวไว้ 2-3 นาทีก่อนที่จะดำเนินการ คุณไม่ควรรวมเวลาที่ใช้ในคิวใน runDuration

ระบบจะแสดงผล PRECONDITION_FAILED หากมีผู้พยายามตั้งค่า runDuration ในขั้นตอนที่มีการตั้งค่าช่องนี้แล้ว

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

object (Duration)

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

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

ระบบจะแสดงผล PRECONDITION_FAILED หากมีผู้พยายามตั้งค่า device_usage ในขั้นตอนที่มีการตั้งค่าช่องนี้ไว้แล้ว

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

object (MultiStep)

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

  • คำตอบ: แสดงหากตั้งค่าไว้ก่อนหน้า
  • ในคำขอสร้าง: ไม่บังคับ ระบุว่าขั้นตอนนี้มีการดำเนินการมากกว่า 1 ครั้ง
  • ในคำขออัปเดต: ไม่บังคับ

ช่องการรวม step

step ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้

testExecutionStep

object (TestExecutionStep)

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

toolExecutionStep

object (ToolExecutionStep)

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

TestExecutionStep

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

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

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

การแสดง JSON
{
  "testSuiteOverviews": [
    {
      object (TestSuiteOverview)
    }
  ],
  "toolExecution": {
    object (ToolExecution)
  },
  "testIssues": [
    {
      object (TestIssue)
    }
  ],
  "testTiming": {
    object (TestTiming)
  }
}
ช่อง
testSuiteOverviews[]

object (TestSuiteOverview)

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

จำนวนภาพรวมชุดทดสอบสูงสุดที่อนุญาตต่อขั้นตอนคือ 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

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

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

object (FileReference)

การอ้างอิงบันทึกข้อความธรรมดาจะทำให้เรียกใช้เครื่องมือ

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

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

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

object (ToolExitCode)

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

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

object (ToolOutputReference)

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

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

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

โค้ดออกจากเครื่องมือ

ออกจากโค้ดจากการทำงานของเครื่องมือ

การแสดง 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 {
   ...
 }

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

JSON

การแสดงค่า Any ในรูปแบบ JSON จะใช้การแสดงตามปกติของข้อความที่ฝังแบบดีซีเรียลไลซ์ โดยมีช่องเพิ่มเติม @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/ชื่อทรัพยากรที่ระบุประเภทของข้อความบัฟเฟอร์ของโปรโตคอลแบบอนุกรมโดยไม่ซ้ำกัน สตริงนี้ต้องมี "/" อย่างน้อย 1 รายการ อักขระ กลุ่มสุดท้ายของเส้นทางของ URL ต้องเป็นชื่อที่ตรงตามเกณฑ์ทั้งหมดของประเภท (ดังเช่น path/google.protobuf.Duration) ชื่อควรอยู่ในรูปแบบ Canonical (เช่น นำหน้า "." ไม่ได้)

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

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

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

แผนอื่นๆ ที่ไม่ใช่ http, https (หรือรูปแบบที่ว่างเปล่า) อาจใช้กับการติดตั้งใช้งานอรรถศาสตร์เฉพาะ

value

string (bytes format)

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

สตริงที่เข้ารหัสฐาน 64

ความรุนแรง

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

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

ประเภท

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

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

หมวดหมู่

หมวดหมู่ของปัญหา

Enum
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

จะใส่ in ที่ไม่ซ้ำให้กับแต่ละขั้นตอน ช่วงตั้งแต่ 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

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

runDuration

object (Duration)

เวลาที่ขั้นตอนนี้ใช้ในการทํางาน

เมธอด

accessibilityClusters

แสดงรายการคลัสเตอร์การช่วยเหลือพิเศษสำหรับขั้นตอนที่ต้องการ

อาจแสดงรหัสข้อผิดพลาด Canonical ต่อไปนี้

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

create

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

get

รับขั้นตอน

getPerfMetricsSummary

ดึงข้อมูล PerfMetricsSummary

list

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

patch

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

publishXunitXmlFiles

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