TestNG
dependencies {
testImplementation("dev.tracera:tracera-testng:<version>")
}
يتطلب JDK ≥ 17 وTestNG ≥ 7 (انظر محوّلات الاختبار الآلي). tracera-testng على Maven Central.
متغيرات البيئة ووضع التشغيل وإعادة المحاولة: محوّلات الاختبار الآلي.
مفتاح Env عند إعادة المحاولة: TESTNG_RETRY.
يُسجَّل المستمع عبر ServiceLoader. يمكنك أيضًا إضافة @Listeners(TraceraTestNgListener::class).
ربط testCaseId و autotestName
استورد واجهات TestNG القياسية كالمعتاد، ومن dev.tracera — Tracera وId.
عند التصريح (المفضّل — الربط يعمل حتى لو تخطّى الاختبار مبكرًا):
import dev.tracera.Tracera
import org.testng.annotations.Test
class LoginTest {
@Tracera.Id(42, name = "e2e/login")
@Test
fun login() {
assert(true)
}
}
داخل الاختبار:
import dev.tracera.Tracera
import org.testng.annotations.Test
class LoginTest {
@Test
fun login() {
Tracera.testCase(42, "e2e/login")
assert(true)
}
}
Skip
استخدم تخطّي TestNG القياسي (throw SkipException(…)، enabled = false، …). يُضاف سبب التخطّي إلى النتيجة كـ comment.
الخطوات
استخدم Tracera.step("…") { … } أو Tracera.suspendStep("…") { … } للكوروتينات أو @Tracera.Step("…") على دالة (sync وsuspend). مع @Tracera.Step، إن كان العنوان فارغًا أو محذوفًا يصبح عنوان الخطوة اسم الدالة؛ {0} / {name} في العنوان تُملأ من وسائط الدالة. الخطوات داخل @BeforeMethod / @AfterMethod تذهب إلى الإعداد / التنظيف؛ الخطوات داخل الاختبار تذهب إلى الاختبار. دوال تهيئة الـ suite / class لا تُبلَّغ.
import dev.tracera.Tracera
import org.testng.annotations.BeforeMethod
import org.testng.annotations.Test
class CheckoutTest {
@BeforeMethod
fun openShop() {
Tracera.step("open shop") { }
}
@Tracera.Step("add {sku}")
fun addSku(sku: String) {
}
@Tracera.Id(10, name = "e2e/checkout")
@Test
fun checkout() {
addSku("SKU-1")
Tracera.step("pay") { }
}
}
التعليقات والأخطاء والمرفقات
التعليقات والأخطاء والمرفقات: محوّلات الاختبار الآلي.
Tracera.comment("result-level note")
Tracera.error("result-level error text")
Tracera.step("open login") {
Tracera.comment("landed on login")
}
الاختبارات المُعلَّمة بمعاملات
ضع @Tracera.Id على دالة @Test التي تستخدم DataProvider، أو استدعِ Tracera.testCase داخل الدالة إن اختلف معرف الحالة لكل صف. يمكن لـ name الاختياري أن يستخدم {arg} / {param_id} من وسائط الدالة. إذا لم يُحدَّد name، فإن autotestName يأخذ قيمة اسم دالة TestNG.
@Tracera.Id(42, name = "login as {login}")
@Test(dataProvider = "logins")
fun login(login: String) {
assert(login.isNotEmpty())
}