How to use build_description_from_name method in Lemoncheesecake

Best Python code snippet using lemoncheesecake

loader.py

Source:loader.py Github

copy

Full Screen

...153 """154 suite_info = getattr(mod, "SUITE", {})155 suite_condition = suite_info.get("visible_if")156 suite_name = suite_info.get("name", inspect.getmodulename(inspect.getfile(mod)))157 suite_description = suite_info.get("description", build_description_from_name(suite_name))158 suite = Suite(mod, suite_name, suite_description)159 suite.tags.extend(suite_info.get("tags", []))160 suite.properties.update(suite_info.get("properties", {}))161 suite.links.extend(map(_normalize_link, suite_info.get("links", [])))162 suite.rank = suite_info.get("rank", _get_metadata_next_rank())163 suite.hidden = suite_condition and not suite_condition(mod)164 try:165 _check_test_tree_node_types(suite)166 except TypeError as excp:167 raise SuiteLoadingError("Invalid suite metadata type for '%s': %s" % (suite.name, excp))168 for hook_name in SUITE_HOOKS:169 if hasattr(mod, hook_name):170 suite.add_hook(hook_name, getattr(mod, hook_name))171 for test in _load_tests(_get_test_functions_from_module(mod)):172 suite.add_test(test)173 for test in _get_generated_tests(mod):174 suite.add_test(test)175 for sub_suite in load_suites_from_classes(_get_suite_classes_from_module(mod)):176 suite.add_suite(sub_suite)177 return suite178def load_suite_from_file(filename):179 # type: (str) -> Suite180 """181 Load a suite from a Python module indicated by a filename.182 Raise SuiteLoadingError if the file cannot be loaded as a suite.183 """184 try:185 mod = import_module(filename)186 except ModuleImportError as e:187 raise SuiteLoadingError(str(e))188 mod_name = strip_py_ext(osp.basename(filename))189 suite = load_suite_from_module(mod)190 # in case of module containing no tests, a single sub-suite whose name is the same a as module191 # then this sub-suite will be actually considered as the suite itself192 if not hasattr(mod, "SUITE") and \193 len(suite.get_tests()) == 0 and len(suite.get_suites()) == 1 and suite.get_suites()[0].name == mod_name:194 suite = suite.get_suites()[0]195 suite.parent_suite = None196 return suite197def load_suites_from_files(patterns, excluding=()):198 # type: (Sequence[str], Sequence[str]) -> List[Suite]199 """200 Load a list of suites from a list of files.201 :param patterns: a mandatory list (a simple string can also be used instead of a single element list)202 of files to import; the wildcard '*' character can be used203 :param excluding: an optional list (a simple string can also be used instead of a single element list)204 of elements to exclude from the expanded list of files to import205 Example::206 load_suites_from_files("test_*.py")207 """208 return list(209 filter(210 lambda suite: not suite.hidden and not suite.is_empty(),211 map(load_suite_from_file, get_matching_files(patterns, excluding))212 )213 )214def load_suites_from_directory(dir, recursive=True):215 # type: (str, bool) -> List[Suite]216 """217 Load a list of suites from a directory.218 If the recursive argument is set to True, sub suites will be searched in a directory named219 from the suite module: if the suite module is "foo.py" then the sub suites directory must be "foo".220 Raise SuiteLoadingError if one or more suite could not be loaded.221 """222 if not osp.exists(dir):223 raise SuiteLoadingError("Directory '%s' does not exist" % dir)224 suites = {}225 for filename in get_py_files_from_dir(dir):226 suite = load_suite_from_file(filename)227 if not suite.hidden:228 suites[filename] = suite229 if recursive:230 for dirname in _get_sub_dirs_from_dir(dir):231 suite = suites.get(dirname + ".py")232 if not suite:233 suite_name = osp.basename(dirname)234 suite = Suite(None, suite_name, build_description_from_name(suite_name))235 suites[suite.name] = suite236 for sub_suite in load_suites_from_directory(dirname, recursive=True):237 suite.add_suite(sub_suite)...

Full Screen

Full Screen

builder.py

Source:builder.py Github

copy

Full Screen

...25def _get_metadata_next_rank():26 rank = Metadata._next_rank27 Metadata._next_rank += 128 return rank29def build_description_from_name(name):30 return name.capitalize().replace("_", " ")31def add_test_into_suite(test, suite):32 # type: (Test, Any) -> None33 """34 Add test into suite35 :param test: a :py:class:`Test <lemoncheesecake.suite.core.Test>` instance36 :param suite: a suite decorated class instance (in that case the function must be37 called when the class is instantiated) or a module marked as a suite (in that case the function38 must be called when the module is loaded)39 """40 if not hasattr(suite, "_lccgeneratedtests"):41 suite._lccgeneratedtests = []42 if test.rank is None:43 test.rank = _get_metadata_next_rank()44 suite._lccgeneratedtests.append(test)45_objects_with_metadata = []46def get_metadata(obj):47 global _objects_with_metadata48 if hasattr(obj, "_lccmetadata"):49 if obj not in _objects_with_metadata: # metadata comes from the superclass50 obj._lccmetadata = copy.deepcopy(obj._lccmetadata)51 return obj._lccmetadata52 else:53 obj._lccmetadata = Metadata()54 _objects_with_metadata.append(obj)55 return obj._lccmetadata56def suite(description=None, name=None, rank=None):57 """58 Decorator, mark a class as a suite class.59 :param description: suite's description (by default, the suite's description is built from the name)60 :param name: suite's name (by default, the suite's name is taken from the class's name)61 :param rank: this value is used to order suites of the same hierarchy level62 """63 def wrapper(klass):64 assert inspect.isclass(klass), "%s is not a class (suite decorator can only be used on a class)" % klass65 md = get_metadata(klass)66 assert not md.dependencies, "'depends_on' can not be used on a suite class"67 md.is_suite = True68 md.rank = rank if rank is not None else _get_metadata_next_rank()69 md.name = name or klass.__name__70 md.description = description or build_description_from_name(md.name)71 return klass72 return wrapper73def test(description=None, name=None):74 """75 Decorator, mark a function/method as a test.76 :param description: test's description77 :param name: test's name (by default, the suite's name is taken from the class's name)78 """79 def wrapper(func):80 assert inspect.isfunction(func), "%s is not a function (test decorator can only be used on a function)" % func81 md = get_metadata(func)82 md.is_test = True83 md.rank = _get_metadata_next_rank()84 md.name = name or func.__name__85 md.description = description or build_description_from_name(md.name)86 return func87 return wrapper88def tags(*tag_names):89 """Decorator, add tags to a test or a suite."""90 def wrapper(obj):91 md = get_metadata(obj)92 md.tags.extend(tag_names)93 return obj94 return wrapper95def prop(key, value):96 """Decorator, add a property (key/value) to a test or a suite."""97 def wrapper(obj):98 md = get_metadata(obj)99 md.properties[key] = value...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Lemoncheesecake automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful