Swift Testing
SPM पैकेज जोड़ें और TraceraTesting पर निर्भरता रखें:
.package(url: "https://github.com/tracera-dev/tracera-swift.git", from: "0.1.0"),
// …
.product(name: "TraceraTesting", package: "tracera-swift"),
Swift ≥ 6 आवश्यक (macOS 15 / Xcode 16; ऑटोटेस्ट एडेप्टर देखें)।
एनवायरनमेंट वेरिएबल और रन मोड: ऑटोटेस्ट एडेप्टर।
testCaseId और autotestName बाँधना
पसंदीदा declarative बाइंड:
@Test("checkout", .traceraId(42))
func checkout() {
// …
}
@Test("login as {user}", .traceraId(42), arguments: ["alice", "bob"])
func login(user: String) {
// …
}
अगर id कंपाइल-टाइम कॉन्स्टेंट नहीं है, तो .tracera से पिन खोलें और imperative बाइंड करें:
@Test("checkout", .tracera)
func checkout() {
Tracera.testCase(42)
// Tracera.testCase(42, "e2e/checkout")
}
छोड़ना
skip("reason") उपयोग करें — कारण परिणाम में comment के रूप में जुड़ता है:
@Test("checkout", .traceraId(42))
func checkout() throws {
try skip("needs a seeded account")
}
स्टेप्स
Tracera.step("…") { … } उपयोग करें (sync या async)। setup / teardown के अंदर के स्टेप परिणाम के सेटअप / टीयरडाउन में जाते हैं; बाकी स्टेप टेस्ट में।
@Test("checkout", .traceraId(10))
func checkout() throws {
try setup("open shop") {}
try Tracera.step("add item") {
Tracera.step("nested leaf") {}
}
try teardown("close shop") {}
}
कमेंट, एरर और अटैचमेंट
सीमाएँ और अनुमत 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") { /* ... */ }
}
}
पैरामीटराइज़्ड टेस्ट
हर arguments पंक्ति एक अलग केस है। {user} या {0} जैसे प्लेसहोल्डर @Test("…") शीर्षक में या .traceraId(…, name:) में रखें, ताकि हर पंक्ति को अपना autotestName मिले:
@Test("login as {user}", .traceraId(7), arguments: ["alice", "bob"])
func login(user: String) {
Tracera.step("sign in") { /* ... */ }
}