{"id":51254985,"url":"https://github.com/ozontech/testo-allure","last_synced_at":"2026-06-29T09:32:09.985Z","repository":{"id":358228381,"uuid":"1231948301","full_name":"ozontech/testo-allure","owner":"ozontech","description":"Allure report plugin for Testo framework. Visualize results of a test run!","archived":false,"fork":false,"pushed_at":"2026-06-22T09:00:54.000Z","size":239,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-22T09:13:20.516Z","etag":null,"topics":["allure","go","plugin","reporting","testing","testo","testo-plugin"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ozontech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-07T12:48:03.000Z","updated_at":"2026-06-22T08:57:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ozontech/testo-allure","commit_stats":null,"previous_names":["ozontech/testo-allure"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/ozontech/testo-allure","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto-allure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto-allure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto-allure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto-allure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ozontech","download_url":"https://codeload.github.com/ozontech/testo-allure/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto-allure/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34921804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["allure","go","plugin","reporting","testing","testo","testo-plugin"],"created_at":"2026-06-29T09:32:05.287Z","updated_at":"2026-06-29T09:32:09.966Z","avatar_url":"https://github.com/ozontech.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📊 Testo Allure Plugin\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/ozontech/testo-allure.svg)](https://pkg.go.dev/github.com/ozontech/testo-alure)\n\n\u003cimg align=\"right\" height=\"550\" alt=\"Example of a generated Allure report using this plugin\" src=\"./example.png\" /\u003e\n\nAn [Allure report](https://allurereport.org/) plugin for [Testo framework](https://github.com/ozontech/testo).\n\n\u003e Allure Report is a popular open source tool for visualizing the results of a test run.\n\u003e It can be added to your testing workflow with little to zero configuration.\n\u003e It produces reports that can be opened anywhere and can be read by anyone, no deep technical knowledge required.\n\n## Quick Start\n\nInstall:\n\n```bash\ngo get github.com/ozontech/testo-allure\n```\n\nUse:\n\n```go\ntype T struct {\n\t*testo.T\n\t*allure.PluginAllure\n}\n\ntype Suite struct{ testo.Suite[T] }\n\nfunc (Suite) TestFoo(t T) {\n\tt.Title(\"Example Test\")\n\tt.Description(\"My first _Allure_ test with **testo**\")\n\tt.Tags(\"testo\", \"example\", \"allure\")\n\n\tallure.Step(t, \"first step\", func(t T) {\n\t\tt.Log(\"it works\")\n\t})\n}\n```\n\nSee also [other examples](./examples).\n\n## Testplan\n\nThis plugin supports test plans.\n\nSee [Selective tests run integration](https://docs.qameta.io/allure-testops/ecosystem/allurectl/#selective-tests-run-integration)\n\n### Allure ID\n\nWhen applying a test plan Allure plugin needs to know test's [Allure ID](https://help.qameta.io/support/solutions/articles/101000480600-cooking-the-allureid) before running it.\nOtherwise, it will have to rely on test's full name, rather than allure id.\n\n```go\nfunc (Suite) TestFoo(t T) {\n    t.ID(\"12345\")\n}\n```\n\nUse annotations to make allure id avaiable during tests collection:\n\n```go\nvar _ = testo.For(Suite.TestFoo, allure.WithID(\"12345\"))\n\nfunc (Suite) TestFoo(t T) {\n    // ...\n}\n```\n\n## Flags\n\nAllure plugin provides the following CLI flags:\n\n```txt\n-allure.dir string\n    Path to the directory where Allure will save the test results. If the directory does not exist, it will be created. (default: \"allure-results\")\n\n-allure.invert bool\n    Only run the tests that do not match the conditions specified by the test plan. (default: false)\n```\n\nExample:\n\n```shell\ngo test . -allure.dir /some/custom/dir/my-allure-results\n```\n\n## Asserts\n\n[Testify]-based asserts are available with `t.Assert` and `t.Require` functions.\n\nEach assertion call is reflected in the allure report as steps with parameters.\n\nFor example, the following code:\n\n```go\nt.Require().Equal(4, 2+2)\nt.Assert().True(false)\n```\n\nIs converted to the following steps:\n\n```txt\nrequire: equal\n    expected: 4\n    actual:   4\n\nassert: true\n    value: false\n```\n\n## Steps and sub-tests\n\nAllure plugin provides step abstraction.\n\nBoth, sub-tests and steps are shown in allure report as steps under parent test.\nHowever, `allure.Step` has some differences.\n\n1. Fatal errors are propagated to the parent. Fatal errors are triggered by the `t.FailNow()` function, commonly called from `t.Fatal`.\n2. Context returned by the `t.Context` inside step will be cancelled when parent context does.\n\nExample:\n\n```go\nfunc (Suite) TestStep(t T) {\n    // trigger fatal error\n    allure.Step(t, \"first\", func(t T) { t.FailNow() })\n\n    // ❌ this code won't be executed\n    t.Log(\"Hi\")\n}\n\nfunc (Suite) TestRun(t T) {\n    // trigger fatal error\n    testo.Run(t, \"first\", func(t T) { t.FailNow() })\n\n    // ✅ this code will be executed\n    t.Log(\"Hi\")\n}\n```\n\n## Attachments\n\n### Deduplication\n\nAllure plugin features an efficient hashsum-based attachment deduplication mechanism.\n\nIt will automatically keep track of written attachments so that a single attachment added, say, 100 times, will result\na single file referenced across all report.\n\nThis feature is disabled by default, as [Allure does not currently support it](https://github.com/orgs/allure-framework/discussions/3159#discussioncomment-15230835).\nBut it can be enabled with `WithDeduplicateAttachments` option, if you need it.\n\n```go\nfunc init() {\n    testo.Options(\n        allure.WithDeduplicateAttachments(true),\n    )\n}\n```\n\n### Size limit\n\nLarge attachments can be automatically trimmed to ensure that your allure report\nwon't grow more than needed.\n\nThis feature is disabled by default, but you can enable it with `WithMaxAttachmentSize` option:\n\n```go\n// WithMaxAttachmentSize specifies a limit for the size of\n// each attachment as a number of bytes.\n//\n// If greater than zero, attachments are automatically trimmed of their suffix\n// if their size exceeds this limit.\n//\n// Trimmed attachments are always of type [TextPlain] with suffix\n// message added stating that an attachment exceeds a size limit.\n//\n//\tWithMaxAttachmentSize(1000) // 1 KB\nfunc WithMaxAttachmentSize(bytes int64) testoplugin.Option\n```\n\nExample:\n\n```go\nfunc init() {\n    testo.Options(\n        allure.WithMaxAttachmentSize(1000),\n    )\n}\n```\n\nWith this option set, large attachment will look like this:\n\n```txt\nsome large attachment with\nendless text and...\n\n...size exceeds 1000 bytes limit\n```\n\n## Timeouts\n\nAllure plugin can handle timeouts by `go test`.\n\nIf option `allure.WithTimeout(true)` is set, all running tests are marked\nas broken just a few milliseconds before [`t.Deadline`] would happen and\nwrite their results into report.\n\nIt's disabled by default.\n\n## Options\n\nThis plugin provides several options for configuring default behavior.\n\nSee [options.go](./options.go) for a list of all available options.\n\n[Testify]: https://github.com/stretchr/testify\n[`t.Deadline`]: https://pkg.go.dev/github.com/ozontech/testo#T.Deadline\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozontech%2Ftesto-allure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fozontech%2Ftesto-allure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozontech%2Ftesto-allure/lists"}