XCUITest

अपने UI टेस्ट टारगेट में Package.swift के ज़रिए tracera-swift से TraceraXCUITest निर्भरता जोड़ें (यह Tracera को भी साथ लाता है):

dependencies: [
  .package(url: "https://github.com/tracera-dev/tracera-swift", from: "0.1.0"),
],
targets: [
  .testTarget(
    name: "MyAppUITests",
    dependencies: [
      .product(name: "TraceraXCUITest", package: "tracera-swift"),
    ]
  ),
]

Swift ≥ 6, macOS ≥ 15 (या iOS ≥ 18) और Xcode ≥ 16 आवश्यक (ऑटोटेस्ट एडेप्टर देखें)।

एनवायरनमेंट वेरिएबल और रन मोड: ऑटोटेस्ट एडेप्टर।

TraceraXCTestCase सब्क्लास करें और class func setUp() में एक बार install() कॉल करें (मीडिया डिफ़ॉल्ट बंद — Screenshots देखें):

import XCTest
import Tracera
import TraceraXCUITest

final class CheckoutUITests: TraceraXCTestCase {
  override class func setUp() {
    install()
  }
  // …
}

जब आप instance setUp / tearDown ओवरराइड करें (हर टेस्ट पर — class func setUp नहीं), तो setUp के अंत में super.setUp() और tearDown की शुरुआत में super.tearDown() कॉल करें, ताकि स्टेप्स सेटअप / टेस्ट / टीयरडाउन में जाएँ।

testCaseId और autotestName बाँधना

हर टेस्ट मेथड की शुरुआत में Tracera.testCase से बाइंड करें:

func testCheckout() {
  Tracera.testCase(42)
  // Tracera.testCase(42, "e2e/checkout")
  // …
}

अगर name न दें, तो autotestName में XCTest टेस्ट का नाम आता है। अगर कई मेथड एक ही case id साझा करें, तो instance setUp में भी बाँध सकते हैं।

छोड़ना

skip("reason") उपयोग करें ताकि कारण परिणाम के comment में जुड़ जाए:

func testCheckout() throws {
  Tracera.testCase(42)
  try skip("needs a seeded account")
}

स्टेप्स

Tracera.step("…") { } या await Tracera.step("…") { } उपयोग करें। instance setUp / tearDown के स्टेप्स परिणाम के सेटअप / टीयरडाउन में जाते हैं; टेस्ट बॉडी के स्टेप्स टेस्ट में।

override func setUp() {
  Tracera.step("launch app") { }
  super.setUp()
}

func testCheckout() throws {
  Tracera.testCase(10)
  try Tracera.step("tap checkout") {
    try Tracera.step("nested leaf") { }
  }
}

override func tearDown() {
  super.tearDown()
  Tracera.step("terminate app") { }
}

कमेंट, एरर और अटैचमेंट

सीमाएँ और अनुमत MIME प्रकार: ऑटोटेस्ट एडेप्टर।

Tracera.comment, Tracera.error और अटैचमेंट खुले स्टेप में जुड़ते हैं, और कोई स्टेप खुला न हो तो परिणाम में। Tracera.attachmentFile फ़ाइल पथ लेता है; Tracera.attachmentBytes नाम और बाइट्स लेता है (MIME प्रकार वैकल्पिक)। अटैचमेंट परिणाम रिपोर्ट होने पर अपलोड होते हैं।

Tracera.comment("result-level note")
Tracera.error("result-level error")
Tracera.attachmentFile("Fixtures/screenshot.png")
Tracera.step("open login") {
  Tracera.comment("step note")
  Tracera.attachmentBytes("body.json", data: Data(#"{"ok":true}"#.utf8), mimeType: "application/json")
}

अगर आप नया Task शुरू करके उसमें Tracera API कॉल करते हैं (स्टेप्स, कमेंट, एरर, अटैचमेंट), तो पहले टेस्ट में getContext() कॉल करें और वर्कर को runWithContext से चलाएँ — नहीं तो ये कॉल रिपोर्ट में नहीं जाएँगे:

let ctx = getContext()
Task {
  await runWithContext(ctx) {
    Tracera.step("worker") { /* ... */ }
  }
}

पैरामीटराइज़्ड टेस्ट

लिटरल Tracera.testCase(id, name) उपयोग करें (या name छोड़ें → XCTest टेस्ट नाम)।

स्क्रीनशॉट और मीडिया

रिपोर्टिंग के लिए install() ज़रूरी है (ऊपर देखें)। इसके पैरामीटर से हर टेस्ट के अंत में मीडिया जोड़ी जा सकती है (डिफ़ॉल्ट .off): screenshots: — .onFailure / .onSuccess / .always (iOS/tvOS: XCUIScreen; macOS: ScreenCaptureKit जब स्क्रीन रिकॉर्डिंग अनुमति हो); hierarchy: → window-hierarchy.txt; logs: → device-log.txt (unified log / OSLogStore)।

override class func setUp() {
  install(screenshots: .onFailure, hierarchy: .onFailure, logs: .onFailure)
}

किसी चुने हुए क्षण पर स्क्रीनशॉट, hierarchy या डिवाइस लॉग जोड़ने के लिए (जैसे टैप के बाद) मैन्युअल कॉल करें:

Tracera.step("after login") {
  screenshot()
  attachHierarchy()
  attachDeviceLog()
}