{"id":22532,"library":"vedro","title":"Vedro","description":"Vedro is a pragmatic testing framework for Python, focusing on simplicity and readability. It supports BDD-style scenarios, parametrized tests, and rich plugins. Current version is 1.15.1, with a regular release cadence of minor versions every few months.","status":"active","version":"1.15.1","language":"python","source_language":"en","source_url":"https://github.com/vedro-universe/vedro","tags":["testing","bdd","scenarios","pragmatic"],"install":[{"cmd":"pip install vedro","lang":"bash","label":"Standard install"}],"dependencies":[{"reason":"Allure reporting plugin","package":"vedro-allure-reporter","optional":true},{"reason":"HTTP testing plugin","package":"vedro-http","optional":true}],"imports":[{"note":"","wrong":null,"symbol":"Scenario","correct":"from vedro import Scenario"},{"note":"","wrong":null,"symbol":"given, when, then","correct":"from vedro import given, when, then"},{"note":"","wrong":null,"symbol":"params","correct":"from vedro import params"}],"quickstart":{"code":"from vedro import Scenario, given, when, then, params\n\nclass LoginScenario(Scenario):\n    subject = \"user login\"\n\n    @params(\"valid_user\", \"password123\")\n    @params(\"invalid_user\", \"wrongpass\")\n    def __init__(self, username, password):\n        self.username = username\n        self.password = password\n\n    def given_user_exists(self):\n        self.user = {\"username\": self.username, \"password\": self.password}\n\n    def when_user_logs_in(self):\n        self.result = self.authenticate(self.user)\n\n    def then_it_should_succeed_or_fail(self):\n        expected = self.username == \"valid_user\"\n        assert self.result == expected\n\n    def authenticate(self, user):\n        return user[\"username\"] == \"valid_user\"\n\n# Run with: vedro run\n","lang":"python","description":"Minimal scenario example with parametrized tests."},"warnings":[{"fix":"Place test files under a 'scenarios' directory in your project.","message":"Scenarios must be classes inheriting from Scenario and placed in files matching **/scenarios/**/*.py. Forgetting this pattern will cause tests not to be discovered.","severity":"gotcha","affected_versions":">=1.0"},{"fix":"Add subject = 'description' to every Scenario class.","message":"In v1.10, the 'subject' attribute became mandatory for each Scenario. Omitting it now raises an error.","severity":"breaking","affected_versions":">=1.10"},{"fix":"Ensure __init__ parameters exactly match the @params decorator arguments.","message":"When using @params, the __init__ method must accept the same number of arguments as params (including self). Mismatch causes cryptic errors.","severity":"gotcha","affected_versions":">=1.0"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Run: pip install vedro --upgrade","cause":"Vedro is not installed or installed in a different environment.","error":"ModuleNotFoundError: No module named 'vedro'"},{"fix":"Update __init__ to accept the same number of arguments as provided by @params (excluding self).","cause":"Mismatch between @params decorator arguments and __init__ parameters.","error":" TypeError: __init__() takes 1 positional argument but 2 were given"},{"fix":"Add subject = 'Some description' to the Scenario class.","cause":"Missing subject attribute in the Scenario class (required since v1.10).","error":" vedro.exceptions.ScenarioValidationError: Scenario '...' must have a non-empty 'subject'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}