gotest

go get github.com/tracera-dev/tracera-go/gotest

Требуется Go ≥ 1.25 (см. Адаптеры автотестов). gotest на pkg.go.dev.

Переменные окружения и режим прогона: Адаптеры автотестов.

Подключите отправку отчёта один раз в TestMain:

package checkout_test

import (
    "os"
    "testing"

    "github.com/tracera-dev/tracera-go/gotest"
)

func TestMain(m *testing.M) {
    os.Exit(gotest.Run(m))
}

Привязка testCaseId и autotestName

Используйте стандартный testing и императивную привязку:

func TestCheckout(t *testing.T) {
    gotest.TestCase(t, 42)
    // gotest.TestCase(t, 42, "e2e/checkout")
}

В параллельных тестах вызывайте t.Parallel() до gotest.TestCase.

Пропуск

Используйте gotest.Skip / gotest.Skipf — причина добавляется в результат как comment (одного t.Skip для этого недостаточно):

func TestCheckout(t *testing.T) {
    gotest.TestCase(t, 42)
    gotest.Skip(t, "needs a seeded account")
}

Шаги

Используйте tracera.Step("…", func() { … }). В Go нет декоратора шага для методов. Шаги внутри tracera.Setup / tracera.Teardown попадают в секции результата Предусловие / Постусловие; остальные шаги — в Тест.

Panic внутри tracera.Step добавляет сообщение об ошибке в карточку результата. Если тест падает через t.Fatal / t.Error, результат всё равно Failed, но текст ошибки остаётся только в выводе go test.

import "github.com/tracera-dev/tracera-go"

func TestCheckout(t *testing.T) {
    gotest.TestCase(t, 10)

    tracera.Setup("open shop", func() {})
    tracera.Step("add item", func() {
        tracera.Step("nested leaf", func() {})
    })
    tracera.Teardown("close shop", func() {})
}

Комментарии, ошибки и вложения

Лимиты и допустимые MIME-типы: Адаптеры автотестов.

tracera.Comment, tracera.Error и вложения добавляются к открытому шагу, а если шаг не открыт — к результату. tracera.AttachmentFile принимает путь к файлу, tracera.AttachmentBytes — имя, байты и MIME-тип. Вложения загружаются при отправке результата.

import tracera "github.com/tracera-dev/tracera-go"

tracera.Comment("result-level note")
tracera.Error("result-level error")
tracera.AttachmentFile("testdata/screenshot.png")
tracera.Step("open login", func() {
    tracera.Comment("step note")
    tracera.AttachmentBytes("body.json", []byte(`{"ok":true}`), "application/json")
})

Если вы запускаете горутину и вызываете в ней API Tracera (шаги, комментарии, ошибки, вложения), сначала сохраните контекст в тестовой горутине и запустите воркер через tracera.RunWithContext — иначе эти вызовы не попадут в отчёт:

ctx := tracera.GetContext()
go tracera.RunWithContext(ctx, func() {
    tracera.Step("worker", func() { /* ... */ })
})

Параметризованные тесты

Используйте строки t.Run. Чтобы у каждой строки было стабильное имя, передайте его в TestCase:

func TestMatrix(t *testing.T) {
    for _, row := range []struct{ login string }{{"alice"}, {"bob"}} {
        t.Run(row.login, func(t *testing.T) {
            gotest.TestCase(t, 7, "login as "+row.login)
        })
    }
}