Android
dependencies {
androidTestImplementation("dev.tracera:tracera-android:<version>")
// Optional — richer screenshots (quality/scale) + hierarchy via UiDevice:
// androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
// Robolectric (host):
// testImplementation("dev.tracera:tracera-android:<version>")
}
JDK ≥ 17, Android minSdk ≥ 26, और AndroidX Test (JUnit 4 / AndroidJUnitRunner) आवश्यक। @RunWith(TraceraAndroidJUnit4::class) पसंद करें (ऑटोटेस्ट एडेप्टर देखें)। tracera-android Maven Central पर।
एनवायरनमेंट और रन मोड: ऑटोटेस्ट एडेप्टर।
TRACERA_* को testInstrumentationRunnerArguments (या am instrument -e) से सेट करें।
android {
defaultConfig {
testInstrumentationRunner = "dev.tracera.TraceraAndroidJUnitRunner"
testInstrumentationRunnerArguments += mapOf(
"TRACERA_BASE_URL" to "https://app.example",
"TRACERA_AUTOTEST_TOKEN" to System.getenv("TRACERA_AUTOTEST_TOKEN")!!,
"TRACERA_PROJECT_ID" to "1",
)
}
}
testCaseId और autotestName बाँधना
स्टॉक JUnit 4 / AndroidX Test API इम्पोर्ट करें, और dev.tracera से Tracera।
घोषणा पर (पसंदीदा — बॉडी जल्दी skip होने पर भी बाइंड चलता है):
import dev.tracera.TraceraAndroidJUnit4
import dev.tracera.Tracera
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(TraceraAndroidJUnit4::class)
class LoginTest {
@Tracera.Id(42, name = "e2e/login")
@Test
fun login() {
assert(true)
}
}
टेस्ट के अंदर:
import dev.tracera.TraceraAndroidJUnit4
import dev.tracera.Tracera
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(TraceraAndroidJUnit4::class)
class LoginTest {
@Test
fun login() {
Tracera.testCase(42, "e2e/login")
assert(true)
}
}
स्किप
स्टॉक JUnit स्किप (Assume.assumeTrue, @Ignore, …)। स्किप कारण परिणाम में comment बनता है।
स्टेप्स
Tracera.step("…") { … } या कोरूटीन के लिए Tracera.suspendStep("…") { … }। नेस्टिंग: Tracera.step("…") { … }। @Before / @After के स्टेप्स परिणाम के Setup / Teardown में जाते हैं; टेस्ट बॉडी के स्टेप्स Test में। @BeforeClass / @AfterClass रिपोर्ट नहीं होते।
डिवाइस पर Tracera.step("…") { … } इस्तेमाल करें — ART मेथड-स्टेप इंस्ट्रूमेंटेशन सपोर्ट नहीं करता। Robolectric / host JVM पर मेथड पर @Tracera.Step अन्य JVM रनर्स की तरह काम करता है।
import dev.tracera.TraceraAndroidJUnit4
import dev.tracera.Tracera
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(TraceraAndroidJUnit4::class)
class CheckoutTest {
@Before
fun openShop() {
Tracera.step("open shop") { }
}
@Tracera.Id(10, name = "e2e/checkout")
@Test
fun checkout() {
Tracera.step("body outer") {
Tracera.step("nested leaf") { }
}
Tracera.step("pay") { }
}
}
कमेंट, एरर और अटैचमेंट
कमेंट, एरर और अटैचमेंट: ऑटोटेस्ट एडेप्टर।
Tracera.comment("result-level note")
Tracera.error("result-level error text")
Tracera.step("open login") {
Tracera.comment("landed on login")
}
स्क्रीनशॉट और डिवाइस डिबग
स्क्रीनशॉट, logcat और window hierarchy ऑप्ट-इन हैं (ऑटो नहीं)। तीनों rule टेस्ट क्लास (या बेस क्लास) पर लगाएँ। स्क्रीनशॉट बिना अतिरिक्त deps काम करते हैं; androidx.test.uiautomator:uiautomator तभी जोड़ें जब Tracera.screenshot पर quality / scale चाहिए (और UiDevice hierarchy)।
ScreenshotRule.Mode: FAILURE (डिफ़ॉल्ट), SUCCESS, या END।
import dev.tracera.LogcatRule
import dev.tracera.ScreenshotRule
import dev.tracera.Tracera
import dev.tracera.TraceraAndroidJUnit4
import dev.tracera.WindowHierarchyRule
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(TraceraAndroidJUnit4::class)
class LoginDebugTest {
@get:Rule
val screenshots = ScreenshotRule(mode = ScreenshotRule.Mode.FAILURE, fileName = "failure.png")
@get:Rule
val logcat = LogcatRule()
@get:Rule
val hierarchy = WindowHierarchyRule()
@Tracera.Id(42, name = "e2e/login")
@Test
fun login() {
// Optional mid-test shot:
// Tracera.screenshot("login.png", quality = 90, scale = 1.0f)
assert(true)
}
}
पैरामीटराइज़्ड टेस्ट
@RunWith(Parameterized::class) इस्तेमाल करें। @Tracera.Id मेथड पर लगाएँ। वैकल्पिक name में {param_id} हो सकता है — JUnit टेस्ट नाम (जैसे login[ok])। यदि name न हो, तो autotestName JUnit टेस्ट नाम लेता है। कंस्ट्रक्टर फ़ील्ड टेम्पलेट में नहीं भरते: नाम में चाहिए हों तो टेस्ट के अंदर Tracera.testCase कॉल करें।
import dev.tracera.Tracera
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
class LoginRows(private val login: String) {
companion object {
@JvmStatic
@Parameterized.Parameters(name = "{0}")
fun data() = listOf(arrayOf("ok"), arrayOf("sso"))
}
@Before
fun openForm() {
Tracera.step("open form") { }
}
@Tracera.Id(42, name = "login as {param_id}")
@Test
fun login() {
assert(login.isNotEmpty())
}
}