{"id":49997067,"url":"https://github.com/ozontech/testo","last_synced_at":"2026-05-31T03:00:51.921Z","repository":{"id":358720741,"uuid":"1231947446","full_name":"ozontech/testo","owner":"ozontech","description":"Modular testing framework for Go. Featuring plugins, suites, parallel tests and much more!","archived":false,"fork":false,"pushed_at":"2026-05-26T18:59:38.000Z","size":166,"stargazers_count":113,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-26T20:23:34.995Z","etag":null,"topics":["framework","go","plugins","testing","testo"],"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:46:59.000Z","updated_at":"2026-05-26T19:53:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ozontech/testo","commit_stats":null,"previous_names":["ozontech/testo"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ozontech/testo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ozontech","download_url":"https://codeload.github.com/ozontech/testo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozontech%2Ftesto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33717419,"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-05-31T02:00:06.040Z","response_time":95,"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":["framework","go","plugins","testing","testo"],"created_at":"2026-05-19T08:00:36.761Z","updated_at":"2026-05-31T03:00:51.915Z","avatar_url":"https://github.com/ozontech.png","language":"Go","funding_links":[],"categories":["Template Engines","Testing"],"sub_categories":["Testing Frameworks"],"readme":"[![Testo banner showing its chef gopher mascot on a blue background](./banner.svg)](https://github.com/ozontech/testo)\n\n# Testo\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/ozontech/testo.svg)](https://pkg.go.dev/github.com/ozontech/testo)\n[![Go Report Card](https://goreportcard.com/badge/github.com/ozontech/testo)](https://goreportcard.com/report/github.com/ozontech/testo)\n[![Code Coverage](https://github.com/ozontech/testo/raw/gh-pages/coverage.svg?raw=true)](https://ozontech.github.io/testo/coverage.html)\n[![Quality Assurance](https://github.com/ozontech/testo/actions/workflows/qa.yml/badge.svg)](https://github.com/ozontech/testo/actions/workflows/qa.yml)\n\nTesto is a modular testing framework for Go built on top of `testing.T`\nwith an extensive plugin system.\n\n\u003e Testo (/tɛstɒ/) is a play on words \"test\" and \"тесто\", meaning \"dough\".\n\u003e Just like you can cook anything from dough, you can test anything with Testo!\n\nAdd some flavor to your tests with\n[toppings - a collection of small, miscellaneous plugins for Testo framework.](https://github.com/ozontech/testo-toppings)\n\n## Features\n\n- [Plugins](./examples/04_plugins/main_test.go) - adapt your tests to any scenario with features you need.\n- [Parametrized tests](./examples/03_parametrized/main_test.go) - describe a test once, repeat it with different parameters.\n- [Parallel tests](./examples/05_parallel/main_test.go) - make your tests faster by running them all at once.\n- [Lifecycle hooks](./examples/02_hooks/main_test.go) - before and after any suite, test \u0026 sub-test.\n- [Test annotations](./examples/07_annotations/main_test.go) - attach static options to any test.\n- [Informative errors and traces](./examples/06_errors/main_test.go) - no need to guess what went wrong.\n- Sub-tests \u0026 sub-suites - support for nested tests and nested suites.\n- Test reflection - deeply inspect test's meta-information.\n- Caching - key-value storage persistent between test runs.\n- [Zero dependencies](./go.mod).\n\n## Why Testo\n\nAt Ozon, Testo powers thousands of end-to-end tests daily in production.\n\nWith plugins, it is flexible enough to adapt to diverse requirements,\nwithout leaving the Go ecosystem - just a layer over `testing.T`.\n\nIf your needs are outgrowing standard `testing` package, Testo is a great choice.\n\n## Quick Start\n\n```bash\ngo get github.com/ozontech/testo\n```\n\nYour first test with Testo:\n\n```go\npackage main\n\nimport (\n    \"testing\"\n\n    \"github.com/ozontech/testo\"\n)\n\nfunc Test(t *testing.T) {\n    testo.RunTest(t, func(t *testo.T) {\n        t.Log(\"Hello, Testo!\")\n    })\n}\n```\n\nAnd run it with `go test` as usual:\n\n```bash\ngo test .\n```\n\nBut there is more!\nTesto supports suites, parametrized tests \u0026 plugins, see [Next steps](#next-steps).\n\nSee also [VS Code extension for Testo](#vs-code-extension).\n\n### Next steps\n\n- Take [a guided tour of Testo](./docs/tutorial.md) by making simple plugins and running the tests using various features.\n- See [test examples](./examples).\n- Learn [how to use various Testo features](./docs/how-to.md).\n- Read a [brief description and technical overview](./docs/technical-overview.md) of Testo.\n- View [API documentation](https://pkg.go.dev/github.com/ozontech/testo).\n\n## Plugins\n\nTesto features a powerful plugin system.\n\nPlugins can:\n\n- Provide `BeforeAll`/`AfterAll`, `BeforeEach`/`AfterEach` \u0026 `BeforeSubEach`/`AfterSubEach` hooks.\n- Plan tests for execution - filter, duplicate \u0026 reorder.\n- Override built-in `T` methods, such as `Log`, `Error` and _etc._\n- Extend `T` by adding new methods.\n- Allow users to configure their behavior through options.\n- Communicate with other plugins.\n- Add command line flags for `go test` command.\n\nExamples:\n\n- [Testo Allure Plugin](https://github.com/ozontech/testo-allure) - enhance your tests with automatically generated [Allure Reports](https://allurereport.org/).\n- [Testo Rerun Plugin](https://github.com/ozontech/testo-toppings/tree/main/rerun) - adds `--last-failed`-like behaviour from Pytest to Testo. Makes it possible to rerun only failed tests.\n- [Testo XFail Plugin](https://github.com/ozontech/testo-toppings/tree/main/xfail) - adds `t.XFail()` method to mark a test as \"expected to fail\".\n- [Testo Parallel Plugin](https://github.com/ozontech/testo-toppings/tree/main/parallel) - marks all tests as parallel by default.\n\n## VS Code Extension\n\nTesto has its own [VS Code extension](./vscode-extension).\n\nMakes it easier to run and debug individual suite tests and adds helpful snippets.\n\n![VSCode extension screenshot showing codelens buttons for running and debugging a test](./vscode-extension/example.png)\n\n## Minimum supported Go version\n\nTesto guarantees to support at least **3 latest major** [Go releases](https://go.dev/doc/devel/release).\n\nCurrently, minimum supported Go version is **1.24**\n\n## Contributing\n\nContributions are welcome!\n\nSee [contributing guidelines](./CONTRIBUTING.md).\n\n## License\n\nThis project is released under the [Apache-2.0 license](./LICENSE).\n\n---\n\n\u003e [!TIP]\n\u003e If you find Testo useful, [consider giving this repository a star](https://github.com/ozontech/testo) to help it reach more people.\n\u003e Thank you!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozontech%2Ftesto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fozontech%2Ftesto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozontech%2Ftesto/lists"}