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
Импортируйте стандартные API TestNG как обычно, а из dev.tracera — Tracera и Id.
В объявлении (предпочтительно — привязка сработает, даже если тест сразу уйдёт в skip):
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, …). Skip reason добавляется в результат как 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 внутри, если id кейса разный по строкам. В необязательном name можно использовать {arg} / {param_id} из аргументов метода. Если name не указан, то autotestName принимает значение имени метода TestNG.
@Tracera.Id(42, name = "login as {login}")
@Test(dataProvider = "logins")
fun login(login: String) {
assert(login.isNotEmpty())
}