The definitive testing tool for Python. Born under the banner of Behavior Driven Development (BDD).

Related tags

Testingmamba
Overview

mamba: the definitive test runner for Python

Build Status Latest PyPI Version Read The Docs Status PyPI pyversions

mamba is the definitive test runner for Python. Born under the banner of behavior-driven development.

Install

I recommend to use pipenv for managing your dependencies, thus you can install mamba like any other Python package.

By example:

  $ pipenv install mamba

But you also can use pip:

  $ pip install mamba

Getting Started

Write a very simple example that describes your code behaviour:

  # tennis_spec.py

  from mamba import description, context, it
  from expects import expect, equal

  with description('Tennis') as self:
    with it('starts with 0 - 0 score'):
      rafa_nadal = "Rafa Nadal"
      roger_federer = "Roger Federer"
      game = Game(rafa_nadal, roger_federer)

      expect(game.score()).to(equal((0, 0)))

Run the example, and don't forget to watch it fail!

  $ pipenv run mamba tennis_spec.py

  F

  1 examples failed of 1 ran in 0.0023 seconds

  Failures:

    1) Tennis it starts with 0 - 0 score
      Failure/Error: tennis_spec.py game = Game(rafa_nadal, roger_federer)
          NameError: global name 'Game' is not defined

      File "tennis_spec.py", line 8, in 00000001__it starts with 0 - 0 score--
          game = Game(rafa_nadal, roger_federer)

Now write as little code for making it pass.

  # tennis_spec.py

  from mamba import description, context, it
  from expects import expect, equal

  import tennis

  with description('Tennis') as self:
    with it('starts with 0 - 0 score'):
      rafa_nadal = "Rafa Nadal"
      roger_federer = "Roger Federer"
      game = tennis.Game(rafa_nadal, roger_federer)

      expect(game.score()).to(equal((0, 0)))
  # tennis.py

  class Game(object):
    def __init__(self, player1, player2):
      pass

    def score(self):
      return (0, 0)

Run the spec file and enjoy that all tests are green!

  $ pipenv run mamba tennis_spec.py

  .

  1 examples ran in 0.0022 seconds

Settings

Mamba provides a way to configuration using spec/spec_helper.py or specs/spec_helper.py This module function is read after parsing arguments so configure function overrides settings

A sample config file :

def configure(settings):
  # settings.slow_test_threshold = 0.075
  # settings.enable_code_coverage = False
  # settings.code_coverage_file = '.coverage'
  settings.format = 'documentation'
  # settings.no_color = False
  # settings.tags = None

Official Manual

You can read more features about mamba in its official manual

Contributors

Here's a list of all the people who have contributed.

I'm really grateful to each and every of them!

If you want to be one of them, fork repository and send a pull request.

Comments
  • after.each only executes if examples pass

    after.each only executes if examples pass

    As a heavy ruby/rspec user, I'm really happy that mamba exists. Having a couple of issues though, and this is the biggest for me:

    When a test fails, the code in after.each never executes. This seems like a bug to me. In my test suite I need to do things after every test (verify doubles, roll back session, etc.), but those things only happen when a test passes. Am I missing something here?

    Simple example:

    from expects import *
    from mamba import description, before, after, it
    
    with description("after each test"):
        with after.each:
            print("this should print twice but only prints once")
    
        with it("should fail"):
            expect(True).to(equal(False))
    
        with it("should pass"):
            pass
    
    opened by jes5e 7
  • Support for custom decorators?

    Support for custom decorators?

    When I develop against tests, I want to turn on debugging for one particular test.

    Ideally I want to do this with a decorator like so:

    import logging
    
    with describe("Blah");
        @log_at(logging.DEBUG)
        def should_be_awesome():
            # complex logic
    

    This is how the decorator is defined: it sandwiches the test function should_be_awesome (argument f here) between setting and restoring the logging level.

    def log_at(log_level=logging.DEBUG):
        def wrap_with_logging_level(f):
            logger = logging.getLogger()
            old_level = logger.level
            logger.setLevel(log_level)
            f()
            logger.setLevel(old_level)
        return wrap_with_logging_level
    

    However, when I run this, mamba runs the example but does not report the test correctly:

    Blah
    

    I appreciate that there's before and after hooks for a use case like this, a quick decorator to enable debugging function is just incredibly convenient.

    opened by fatuhoku 6
  • is there true skip functionality?

    is there true skip functionality?

    I've seen a few examples where folks handle a skip of a test by making it pass

    it('should multiple two numbers): pass

    which seems wrong, since when I run the suite I get the impression that all the tests passed. Which they did, in a technical sense because the 'pass' is there. But the test didn't actually 'skip', in the strategic sense

    I was hoping for something like:

    it.skip('should multiply two numbers): pass #shouldn't matter what is put here as long as syntactically correct

    or

    it('should multiply two numbers): skip

    so that I can get greens for passing tests, red for failed tests, and ? yellows ? (whatever, ANYTHING) for skipped tests to differentiate them from passing/failing tests

    Comments? thoughts?

    p.s. also +1 on someone's comment from over a year ago that mamba needs more explicit documentation. My first reaction was "yay!" My second reaction was "damn it, do I really have to invest this much in searching because documentation that doesn't exist" and my third reaction was 'would it be faster to more to sure or expects or etc.?' Just seems like it'd be good never to get someone to that third point, esp when this project is so clearly rspec-ish goodness and also recent

    opened by jcquarto 5
  • Detailed Documentation

    Detailed Documentation

    I just came across mamba during a search for a good test framework. From what I can tell it looks like an easy way to incorporate different testing methods. I think I have the general idea of how it works but wanted to know if there was more documentation on contexts and descriptions. Thanks.

    opened by Xorso 5
  • Tests not being run as a package?

    Tests not being run as a package?

    I'm new to Python (coming from Ruby), so I mostly expect this is user error. Someone pointed me at an essay by Kenneth Reitz, from which I'm stealing this technique. So I have this directory structure:

    ▾ cetacean/
        __init__.py
      requirements.txt
      setup.py
    ▾ spec/
        __init__.py
        acceptance_spec.py
        context.py
    

    But witness:

    ● cetacean-python master ❱ python --version
    Python 2.7.9
    ● cetacean-python master ❱ cat spec/context.py
    #!/usr/bin/env python
    # encoding: utf-8
    import os
    import sys
    sys.path.insert(0, os.path.abspath('..'))
    
    import cetacean
    ● cetacean-python master ❱ mamba 
    Traceback (most recent call last):
      File "/home/ben/.pyenv/versions/2.7.9/bin/mamba", line 9, in <module>
        load_entry_point('mamba==0.8.3', 'console_scripts', 'mamba')()
      File "/home/ben/.pyenv/versions/2.7.9/lib/python2.7/site-packages/mamba/cli.py", line 19, in main
        runner.run()
      File "/home/ben/.pyenv/versions/2.7.9/lib/python2.7/site-packages/mamba/runners.py", line 27, in run
        for module in self.example_collector.modules():
      File "/home/ben/.pyenv/versions/2.7.9/lib/python2.7/site-packages/mamba/example_collector.py", line 20, in modules
        with self._load_module_from(path) as module:
      File "/home/ben/.pyenv/versions/2.7.9/lib/python2.7/contextlib.py", line 17, in __enter__
        return self.gen.next()
      File "/home/ben/.pyenv/versions/2.7.9/lib/python2.7/site-packages/mamba/example_collector.py", line 53, in _load_module_from
        yield self._module_from_ast(name, path)
      File "/home/ben/.pyenv/versions/2.7.9/lib/python2.7/site-packages/mamba/example_collector.py", line 70, in _module_from_ast
        exec(code, module.__dict__)
      File "spec/acceptance_spec.py", line 3, in <module>
        from .context import cetacean
    ValueError: Attempted relative import in non-package
    

    I ended up finding some wisdom on Stack Overflow. Specifically, I think this bit might be relevant:

    the python import mechanism works relative to the __name__ of the current file. When you execute a file directly, it doesn't have it's usual name, but has "__main__" as its name instead. So relative imports don't work. You can, as Igancio suggested, execute it using the -m option. If you have a part of your package that is mean to be run as a script, you can also use the __package__ attribute to tell that file what name it's supposed to have in the package hierarchy.

    So, somehow Mamba is running the files it finds without them going through the normal package system? Or am I just doing something completely ridiculous?

    Thanks, in advance, for your help.

    opened by benhamill 5
  • Be able to optionally import mamba functions, etc

    Be able to optionally import mamba functions, etc

    Would you consider adding support for being able to import mamba functions, context managers, etc such as description, it, context, etc?

    Having them "global" is nice but breaks most editors because of missing declarations.

    opened by msurdi 4
  • Discussion for the Focus/Tags feature

    Discussion for the Focus/Tags feature

    Hi, I'd like to bring up the topic of these two features to attempt an implementation. I believe there are a few points to discuss:

    syntax alternatives

    First of all, notice that whenever new identifiers are used, we run the risk of driving linters crazy (that is already the case with describe, description, context, it, the 'pending' variants, before, after and self).

    dedicated identifiers

    fdescribe, fdescription, fcontext, fit à la Jasmine, or similar.

    tags

    Here, the inspiration is clearly [rspec](https://relishapp.com/rspec/rspec- core/v/3-4/docs/metadata/user-defined-metadata). I would not yet go as far as to create a whole mechanism for user-defined metadata, just one for tags or even just for the 'focus' feature.

    Some ideas:

    tags as additional arguments

    as strings

    with description('spec description', 'a_tag', 'another_tag'):
        pass
    

    as identifiers

    with description('spec description', a_tag, another_tag):
        pass
    

    tags as additional context managers

    as strings

    with description('spec description'), 'a_tag', 'another_tag':
        pass
    

    as identifiers

    with description('spec description'), a_tag, another_tag:
        pass
    

    tags as context manager aliases

    with description('spec description') as a_tag, another_tag:
        pass
    

    weird (but still valid) syntax mixture

    with description('spec description') is a_tag, another_tag:
        pass
    
    with description('spec description') in a_tag, another_tag:
        pass
    

    tags in the previous line

    It's probably harder to retrieve these from the AST.

    as strings

    'a_tag', 'another_tag'
    with description('spec description'):
        pass
    

    as identifiers

    a_tag, another_tag
    with description('spec description'):
        pass
    

    tags in the next line

    as strings

    with description('spec description'):
        'a_tag', 'another_tag'
        pass
    

    as identifiers

    with description('spec description'):
        a_tag, another_tag
        pass
    

    tags as comments

    In this case, we would need to move away from an AST towards something like a concrete syntax tree such as redbaron and similar or the tokenize module.

    with description('spec description'): #a_tag #another_tag
        pass
    

    I'm sure there are quite a few more candidates. Having tags in the same line is clumsier to type but more readable; having them in the previous or next line is more comfortable to type but less intuitive, I think.

    behaviour

    • Should we implement just 'focus' or a full 'tags' mechanism?
    • Relationship between focus and skip: which one takes precedence over which?
    • Tags-related:
      • Can tags apply to groups or only to examples?
      • Is the 'focus' tag automatically recognised or would it only run when specifying it as a CLI argument?

    foreseeable problems

    • How to keep track of the tags of each example? We need to store them starting from the point where the AST is transformed.
    • If implementing the full 'tags' feature, we should probably use it for the existing 'skip' behaviour.
    • Currently, mamba runs the test tree depth-first, as it builds it. This would need to be changed: the whole tree needs to be built before we can decide which examples should run.

    ping: @deusz @eferro because their work in #78 suggests they're interested in this, @fatuhoku because he originally wrote #20

    opened by angelsanzn 4
  • Declare minimal dependencies in setup.py install_requires

    Declare minimal dependencies in setup.py install_requires

    The issue:

    Currently setup.py is reading the dependencies from requirements.txt, which has pinned versions, and therefore is forcing users to downgrade/upgrade to those versions when doing pip install mamba.

    The solution:

    It's better to declare very loose versions in setup.py, if any, to avoid messing with user's system -- a small duplication is OK here, IMO.

    If you don't want to duplicate, remove the pinned versions from requirements.txt.

    Personally, I'd rather to have the duplication, though, because for me they're two very different things: install_requires is about the very minimal dependencies needed for users, requirements.txt is about making development and testing environments easily repeatable.

    opened by eliasdorneles 4
  • Cannot print logging output to console

    Cannot print logging output to console

    EDIT: I had problems getting DEBUG messages to show on the console when running mamba tests. I assumed this was because mamba suppresses logging output on stdout or stderr. This is not true. Mamba does not interfere with stdout or stderr much and thus I've closed this issue.

    For posterity, my particular problem was solved by setting disable_existing_loggers = False as shown here. Check the article to see whether this is relevant to you!

    opened by fatuhoku 4
  • Adds example group failure reporting  fixes #15

    Adds example group failure reporting fixes #15

    When an exception happens to be raised within a (before|after).all function, forcing an entire example group to fail, all failed/not-run examples within the group are ignored by the reporter. Yet the process stills returns 1, and therefore marks the build as a failure.

    Adds Reporter.example_group_failed and Formatter.example_group_failed which handle this situation, by reporting examples within the failed group as failed, bloody red allover.

    This ensures that the run won't cheerfuly fail all in green, while displaying "0 specs ran". It should fix https://github.com/nestorsalceda/mamba/issues/15

    from mamba import describe, before
    
    
    with describe('weird mamba behaviour'):
        @before.all
        def setup():
            raise Exception()
    
        def should_not_pass():
            pass
    

    now outputs

    $ mamba test_spec.py
    weird mamba behaviour
      ✗ should not pass
    
    1 examples failed of 1 ran in 0.0187 seconds
    
    Failures:
    
      1) weird mamba behaviour should not pass
         Failure/Error: 
    
         Traceback:
         File "/home/user/mamba/mamba/example_group.py", line 61, in _run_inner_examples
             self.run_hook('before_all')
         File "/home/user/mamba/mamba/example_group.py", line 69, in run_hook
             registered()
         File "test_spec.py", line 7, in setup
             raise Exception()
    $ echo $?
    1
    

    instead of

    $mamba test_spec.py
    weird mamba behaviour
    
    0 examples ran in 0.0180 seconds
    $ echo $?
    1
    
    opened by jvrsantacruz 4
  • Included contexts: wrong ordering and duplicates of before/after blocks

    Included contexts: wrong ordering and duplicates of before/after blocks

    I think there are two issues:

    • ordering of teardown steps seem to be the other way around
    • -all blocks of the outermost context get called twice for some reason

    Example 1: just -each

    from mamba import description, context, it, before, after, shared_context, included_context
    
    with shared_context("A"):
        with before.each:
            print("A.BEFORE")
        with after.each:
            print("A.AFTER")
    
    
    with shared_context("B"):
        with before.each:
            print("B.BEFORE")
        with after.each:
            print("B.AFTER")
    
    with description("Example") as self:
        with included_context("A"):
            with included_context("B"):
                with it("IT"):
                    print("IT")
    

    Expected:

    A.BEFORE
    B.BEFORE
    IT
    B.AFTER
    A.AFTER
    

    Actual:

    A.BEFORE
    B.BEFORE
    IT
    A.AFTER
    B.AFTER
    

    Example 2: just -all

    from mamba import description, context, it, before, after, shared_context, included_context
    
    with shared_context("A"):
        with before.all:
            print("A.BEFORE")
        with after.all:
            print("A.AFTER")
    
    
    with shared_context("B"):
        with before.all:
            print("B.BEFORE")
        with after.all:
            print("B.AFTER")
    
    with description("Data extraction") as self:
        with included_context("A"):
            with included_context("B"):
                with it("IT"):
                    print("IT")
    

    Expected:

    A.BEFORE
    B.BEFORE
    IT
    B.AFTER
    A.AFTER
    

    Actual:

    A.BEFORE
    A.BEFORE
    B.BEFORE
    IT
    A.AFTER
    B.AFTER
    A.AFTER
    

    Example 3: -each and -all

    from mamba import description, context, it, before, after, shared_context, included_context
    
    with shared_context("A"):
        with before.each:
            print("A.BEFORE.EACH")
        with after.each:
            print("A.AFTER.EACH")
        with before.all:
            print("A.BEFORE.ALL")
        with after.all:
            print("A.AFTER.ALL")
    
    
    with shared_context("B"):
        with before.each:
            print("B.BEFORE.EACH")
        with after.each:
            print("B.AFTER.EACH")
        with before.all:
            print("B.BEFORE.ALL")
        with after.all:
            print("B.AFTER.ALL")
    
    with description("Data extraction") as self:
        with included_context("A"):
            with included_context("B"):
                with it("IT"):
                    print("IT")
    
    

    Expected:

    A.BEFORE.ALL
    B.BEFORE.ALL
    A.BEFORE.EACH
    B.BEFORE.EACH
    IT
    B.AFTER.EACH
    A.AFTER.EACH
    B.AFTER.ALL
    A.AFTER.ALL
    

    Actual:

    A.BEFORE.ALL
    A.BEFORE.ALL
    B.BEFORE.ALL
    A.BEFORE.EACH
    B.BEFORE.EACH
    IT
    A.AFTER.EACH
    B.AFTER.EACH
    A.AFTER.ALL
    B.AFTER.ALL
    A.AFTER.ALL
    
    opened by m-kostrzewa 3
  • Bump certifi from 2020.6.20 to 2022.12.7

    Bump certifi from 2020.6.20 to 2022.12.7

    Bumps certifi from 2020.6.20 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump babel from 2.8.0 to 2.9.1

    Bump babel from 2.8.0 to 2.9.1

    Bumps babel from 2.8.0 to 2.9.1.

    Release notes

    Sourced from babel's releases.

    Version 2.9.1

    Bugfixes

    • The internal locale-data loading functions now validate the name of the locale file to be loaded and only allow files within Babel's data directory. Thank you to Chris Lyne of Tenable, Inc. for discovering the issue!

    Version 2.9.0

    Upcoming version support changes

    • This version, Babel 2.9, is the last version of Babel to support Python 2.7, Python 3.4, and Python 3.5.

    Improvements

    • CLDR: Use CLDR 37 – Aarni Koskela (#734)
    • Dates: Handle ZoneInfo objects in get_timezone_location, get_timezone_name - Alessio Bogon (#741)
    • Numbers: Add group_separator feature in number formatting - Abdullah Javed Nesar (#726)

    Bugfixes

    • Dates: Correct default Format().timedelta format to 'long' to mute deprecation warnings – Aarni Koskela
    • Import: Simplify iteration code in "import_cldr.py" – Felix Schwarz
    • Import: Stop using deprecated ElementTree methods "getchildren()" and "getiterator()" – Felix Schwarz
    • Messages: Fix unicode printing error on Python 2 without TTY. – Niklas Hambüchen
    • Messages: Introduce invariant that _invalid_pofile() takes unicode line. – Niklas Hambüchen
    • Tests: fix tests when using Python 3.9 – Felix Schwarz
    • Tests: Remove deprecated 'sudo: false' from Travis configuration – Jon Dufresne
    • Tests: Support Py.test 6.x – Aarni Koskela
    • Utilities: LazyProxy: Handle AttributeError in specified func – Nikiforov Konstantin (#724)
    • Utilities: Replace usage of parser.suite with ast.parse – Miro Hrončok

    Documentation

    • Update parse_number comments – Brad Martin (#708)
    • Add iter to Catalog documentation – @​CyanNani123

    Version 2.8.1

    This patch version only differs from 2.8.0 in that it backports in #752.

    Changelog

    Sourced from babel's changelog.

    Version 2.9.1

    Bugfixes

    
    * The internal locale-data loading functions now validate the name of the locale file to be loaded and only
      allow files within Babel's data directory.  Thank you to Chris Lyne of Tenable, Inc. for discovering the issue!
    

    Version 2.9.0

    Upcoming version support changes

    • This version, Babel 2.9, is the last version of Babel to support Python 2.7, Python 3.4, and Python 3.5.

    Improvements

    
    * CLDR: Use CLDR 37 – Aarni Koskela ([#734](https://github.com/python-babel/babel/issues/734))
    * Dates: Handle ZoneInfo objects in get_timezone_location, get_timezone_name - Alessio Bogon ([#741](https://github.com/python-babel/babel/issues/741))
    * Numbers: Add group_separator feature in number formatting - Abdullah Javed Nesar ([#726](https://github.com/python-babel/babel/issues/726))
    

    Bugfixes

    
    * Dates: Correct default Format().timedelta format to 'long' to mute deprecation warnings – Aarni Koskela
    * Import: Simplify iteration code in &quot;import_cldr.py&quot; – Felix Schwarz
    * Import: Stop using deprecated ElementTree methods &quot;getchildren()&quot; and &quot;getiterator()&quot; – Felix Schwarz
    * Messages: Fix unicode printing error on Python 2 without TTY. – Niklas Hambüchen
    * Messages: Introduce invariant that _invalid_pofile() takes unicode line. – Niklas Hambüchen
    * Tests: fix tests when using Python 3.9 – Felix Schwarz
    * Tests: Remove deprecated 'sudo: false' from Travis configuration – Jon Dufresne
    * Tests: Support Py.test 6.x – Aarni Koskela
    * Utilities: LazyProxy: Handle AttributeError in specified func – Nikiforov Konstantin ([#724](https://github.com/python-babel/babel/issues/724))
    * Utilities: Replace usage of parser.suite with ast.parse – Miro Hrončok
    

    Documentation </code></pre> <ul> <li>Update parse_number comments – Brad Martin (<a href="https://github-redirect.dependabot.com/python-babel/babel/issues/708">#708</a>)</li> <li>Add <strong>iter</strong> to Catalog documentation – <a href="https://github.com/CyanNani123"><code>@​CyanNani123</code></a></li> </ul> <h2>Version 2.8.1</h2> <p>This is solely a patch release to make running tests on Py.test 6+ possible.</p> <p>Bugfixes</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary>

    <ul> <li><a href="https://github.com/python-babel/babel/commit/a99fa2474c808b51ebdabea18db871e389751559"><code>a99fa24</code></a> Use 2.9.0's setup.py for 2.9.1</li> <li><a href="https://github.com/python-babel/babel/commit/60b33e083801109277cb068105251e76d0b7c14e"><code>60b33e0</code></a> Become 2.9.1</li> <li><a href="https://github.com/python-babel/babel/commit/412015ef642bfcc0d8ba8f4d05cdbb6aac98d9b3"><code>412015e</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/python-babel/babel/issues/782">#782</a> from python-babel/locale-basename</li> <li><a href="https://github.com/python-babel/babel/commit/5caf717ceca4bd235552362b4fbff88983c75d8c"><code>5caf717</code></a> Disallow special filenames on Windows</li> <li><a href="https://github.com/python-babel/babel/commit/3a700b5b8b53606fd98ef8294a56f9510f7290f8"><code>3a700b5</code></a> Run locale identifiers through <code>os.path.basename()</code></li> <li><a href="https://github.com/python-babel/babel/commit/5afe2b2f11dcdd6090c00231d342c2e9cd1bdaab"><code>5afe2b2</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/python-babel/babel/issues/754">#754</a> from python-babel/github-ci</li> <li><a href="https://github.com/python-babel/babel/commit/58de8342f865df88697a4a166191e880e3c84d82"><code>58de834</code></a> Replace Travis + Appveyor with GitHub Actions (WIP)</li> <li><a href="https://github.com/python-babel/babel/commit/d1bbc08e845d03d8e1f0dfa0e04983d755f39cb5"><code>d1bbc08</code></a> import_cldr: use logging; add -q option</li> <li><a href="https://github.com/python-babel/babel/commit/156b7fb9f377ccf58c71cf01dc69fb10c7b69314"><code>156b7fb</code></a> Quiesce CLDR download progress bar if requested (or not a TTY)</li> <li><a href="https://github.com/python-babel/babel/commit/613dc1700f91c3d40b081948c0dd6023d8ece057"><code>613dc17</code></a> Make the import warnings about unsupported number systems less verbose</li> <li>Additional commits viewable in <a href="https://github.com/python-babel/babel/compare/v2.8.0...v2.9.1">compare view</a></li> </ul> </details>

    <br />

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump urllib3 from 1.25.11 to 1.26.5

    Bump urllib3 from 1.25.11 to 1.26.5

    Bumps urllib3 from 1.25.11 to 1.26.5.

    Release notes

    Sourced from urllib3's releases.

    1.26.5

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed deprecation warnings emitted in Python 3.10.
    • Updated vendored six library to 1.16.0.
    • Improved performance of URL parser when splitting the authority component.

    If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors

    1.26.4

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Changed behavior of the default SSLContext when connecting to HTTPS proxy during HTTPS requests. The default SSLContext now sets check_hostname=True.

    If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors

    1.26.3

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed bytes and string comparison issue with headers (Pull #2141)

    • Changed ProxySchemeUnknown error message to be more actionable if the user supplies a proxy URL without a scheme (Pull #2107)

    If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors

    1.26.2

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed an issue where wrap_socket and CERT_REQUIRED wouldn't be imported properly on Python 2.7.8 and earlier (Pull #2052)

    1.26.1

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed an issue where two User-Agent headers would be sent if a User-Agent header key is passed as bytes (Pull #2047)

    1.26.0

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)

    • Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that still wish to use TLS earlier than 1.2 without a deprecation warning should opt-in explicitly by setting ssl_version=ssl.PROTOCOL_TLSv1_1 (Pull #2002) Starting in urllib3 v2.0: Connections that receive a DeprecationWarning will fail

    • Deprecated Retry options Retry.DEFAULT_METHOD_WHITELIST, Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST and Retry(method_whitelist=...) in favor of Retry.DEFAULT_ALLOWED_METHODS, Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT, and Retry(allowed_methods=...) (Pull #2000) Starting in urllib3 v2.0: Deprecated options will be removed

    ... (truncated)

    Changelog

    Sourced from urllib3's changelog.

    1.26.5 (2021-05-26)

    • Fixed deprecation warnings emitted in Python 3.10.
    • Updated vendored six library to 1.16.0.
    • Improved performance of URL parser when splitting the authority component.

    1.26.4 (2021-03-15)

    • Changed behavior of the default SSLContext when connecting to HTTPS proxy during HTTPS requests. The default SSLContext now sets check_hostname=True.

    1.26.3 (2021-01-26)

    • Fixed bytes and string comparison issue with headers (Pull #2141)

    • Changed ProxySchemeUnknown error message to be more actionable if the user supplies a proxy URL without a scheme. (Pull #2107)

    1.26.2 (2020-11-12)

    • Fixed an issue where wrap_socket and CERT_REQUIRED wouldn't be imported properly on Python 2.7.8 and earlier (Pull #2052)

    1.26.1 (2020-11-11)

    • Fixed an issue where two User-Agent headers would be sent if a User-Agent header key is passed as bytes (Pull #2047)

    1.26.0 (2020-11-10)

    • NOTE: urllib3 v2.0 will drop support for Python 2. Read more in the v2.0 Roadmap <https://urllib3.readthedocs.io/en/latest/v2-roadmap.html>_.

    • Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)

    • Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that still wish to use TLS earlier than 1.2 without a deprecation warning

    ... (truncated)

    Commits
    • d161647 Release 1.26.5
    • 2d4a3fe Improve performance of sub-authority splitting in URL
    • 2698537 Update vendored six to 1.16.0
    • 07bed79 Fix deprecation warnings for Python 3.10 ssl module
    • d725a9b Add Python 3.10 to GitHub Actions
    • 339ad34 Use pytest==6.2.4 on Python 3.10+
    • f271c9c Apply latest Black formatting
    • 1884878 [1.26] Properly proxy EOF on the SSLTransport test suite
    • a891304 Release 1.26.4
    • 8d65ea1 Merge pull request from GHSA-5phf-pp7p-vc2r
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump pygments from 2.7.2 to 2.7.4

    Bump pygments from 2.7.2 to 2.7.4

    Bumps pygments from 2.7.2 to 2.7.4.

    Release notes

    Sourced from pygments's releases.

    2.7.4

    • Updated lexers:

      • Apache configurations: Improve handling of malformed tags (#1656)

      • CSS: Add support for variables (#1633, #1666)

      • Crystal (#1650, #1670)

      • Coq (#1648)

      • Fortran: Add missing keywords (#1635, #1665)

      • Ini (#1624)

      • JavaScript and variants (#1647 -- missing regex flags, #1651)

      • Markdown (#1623, #1617)

      • Shell

        • Lex trailing whitespace as part of the prompt (#1645)
        • Add missing in keyword (#1652)
      • SQL - Fix keywords (#1668)

      • Typescript: Fix incorrect punctuation handling (#1510, #1511)

    • Fix infinite loop in SML lexer (#1625)

    • Fix backtracking string regexes in JavaScript/TypeScript, Modula2 and many other lexers (#1637)

    • Limit recursion with nesting Ruby heredocs (#1638)

    • Fix a few inefficient regexes for guessing lexers

    • Fix the raw token lexer handling of Unicode (#1616)

    • Revert a private API change in the HTML formatter (#1655) -- please note that private APIs remain subject to change!

    • Fix several exponential/cubic-complexity regexes found by Ben Caller/Doyensec (#1675)

    • Fix incorrect MATLAB example (#1582)

    Thanks to Google's OSS-Fuzz project for finding many of these bugs.

    2.7.3

    ... (truncated)

    Changelog

    Sourced from pygments's changelog.

    Version 2.7.4

    (released January 12, 2021)

    • Updated lexers:

      • Apache configurations: Improve handling of malformed tags (#1656)

      • CSS: Add support for variables (#1633, #1666)

      • Crystal (#1650, #1670)

      • Coq (#1648)

      • Fortran: Add missing keywords (#1635, #1665)

      • Ini (#1624)

      • JavaScript and variants (#1647 -- missing regex flags, #1651)

      • Markdown (#1623, #1617)

      • Shell

        • Lex trailing whitespace as part of the prompt (#1645)
        • Add missing in keyword (#1652)
      • SQL - Fix keywords (#1668)

      • Typescript: Fix incorrect punctuation handling (#1510, #1511)

    • Fix infinite loop in SML lexer (#1625)

    • Fix backtracking string regexes in JavaScript/TypeScript, Modula2 and many other lexers (#1637)

    • Limit recursion with nesting Ruby heredocs (#1638)

    • Fix a few inefficient regexes for guessing lexers

    • Fix the raw token lexer handling of Unicode (#1616)

    • Revert a private API change in the HTML formatter (#1655) -- please note that private APIs remain subject to change!

    • Fix several exponential/cubic-complexity regexes found by Ben Caller/Doyensec (#1675)

    • Fix incorrect MATLAB example (#1582)

    Thanks to Google's OSS-Fuzz project for finding many of these bugs.

    Version 2.7.3

    (released December 6, 2020)

    ... (truncated)

    Commits
    • 4d555d0 Bump version to 2.7.4.
    • fc3b05d Update CHANGES.
    • ad21935 Revert "Added dracula theme style (#1636)"
    • e411506 Prepare for 2.7.4 release.
    • 275e34d doc: remove Perl 6 ref
    • 2e7e8c4 Fix several exponential/cubic complexity regexes found by Ben Caller/Doyensec
    • eb39c43 xquery: fix pop from empty stack
    • 2738778 fix coding style in test_analyzer_lexer
    • 02e0f09 Added 'ERROR STOP' to fortran.py keywords. (#1665)
    • c83fe48 support added for css variables (#1633)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump pyyaml from 5.3.1 to 5.4

    Bump pyyaml from 5.3.1 to 5.4

    Bumps pyyaml from 5.3.1 to 5.4.

    Changelog

    Sourced from pyyaml's changelog.

    5.4 (2021-01-19)

    Commits
    • 58d0cb7 5.4 release
    • a60f7a1 Fix compatibility with Jython
    • ee98abd Run CI on PR base branch changes
    • ddf2033 constructor.timezone: _copy & deepcopy
    • fc914d5 Avoid repeatedly appending to yaml_implicit_resolvers
    • a001f27 Fix for CVE-2020-14343
    • fe15062 Add 3.9 to appveyor file for completeness sake
    • 1e1c7fb Add a newline character to end of pyproject.toml
    • 0b6b7d6 Start sentences and phrases for capital letters
    • c976915 Shell code improvements
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump jinja2 from 2.11.2 to 2.11.3

    Bump jinja2 from 2.11.2 to 2.11.3

    Bumps jinja2 from 2.11.2 to 2.11.3.

    Release notes

    Sourced from jinja2's releases.

    2.11.3

    This contains a fix for a speed issue with the urlize filter. urlize is likely to be called on untrusted user input. For certain inputs some of the regular expressions used to parse the text could take a very long time due to backtracking. As part of the fix, the email matching became slightly stricter. The various speedups apply to urlize in general, not just the specific input cases.

    Changelog

    Sourced from jinja2's changelog.

    Version 2.11.3

    Released 2021-01-31

    • Improve the speed of the urlize filter by reducing regex backtracking. Email matching requires a word character at the start of the domain part, and only word characters in the TLD. :pr:1343
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v0.11.2)
  • v0.11.2(Nov 16, 2020)

    • Remove references to mock backport since mamba only supports Python 3
    • Change junit 'time' field format, as it breaks some importers when parsing it
    • Bump cryptography dependency to 3.2

    Thank you @sbraz and @airadier 💯

    Source code(tar.gz)
    Source code(zip)
  • v0.11.1(Jul 29, 2020)

  • v0.11.0(Apr 26, 2020)

    • Fix hooks execution
    • Avoid linter warnings on before and after each hook
    • Document spec_helper.py file usage
    • Support for Python 3.8
    • Add JUnit XML formatter
    • Remove Python 2 support
    • Fix error location reporting

    A bit big kudos to all people who contributed to this release filling up issues and pull requests. Thanks for your contributions:

    @istepaniuk @kfischer-okarin @jsenin @m-kostrzewa

    Source code(tar.gz)
    Source code(zip)
  • v0.10(Oct 24, 2018)

    • Use metadata instead of encode in spec names
    • Shared context: Remove duplication on spec files using shared contexts
    • Improve execution context binding in helper methods
    • Remove requirements from MANIFEST.in since is using pipenv
    Source code(tar.gz)
    Source code(zip)
  • v0.9.3(Mar 3, 2018)

  • v0.9.2(Dec 14, 2017)

  • v0.9.1(Dec 11, 2017)

    Version 0.9.1

    • Just a little fix for pypi installation :)

    Version 0.9

    • Add filtering support using tags
    • Use new execution context for every example. Properties on self are never shared
    • Changed execution model
    • Added functions for description, it, context, before, after for making mamba more friendly to PEP8 checkers
    • Removed subject autoinstantiation
    • Removed filewatch feature, use entr or other similar utility
    • Dropped Python 2.6 support
    Source code(tar.gz)
    Source code(zip)
Youtube Tool using selenium Python

YT-AutoLikeComment-AutoReportComment-AutoComment Youtube Tool using selenium Python Auto Comment Auto Like Comment Auto Report Comment Usage: 1. Insta

Rahul Joshua Damanik 1 Dec 13, 2021
Yet another python home automation project. Because a smart light is more than just on or off

Automate home Yet another home automation project because a smart light is more than just on or off. Overview When talking about home automation there

Maja Massarini 62 Oct 10, 2022
Lightweight, scriptable browser as a service with an HTTP API

Splash - A javascript rendering service Splash is a javascript rendering service with an HTTP API. It's a lightweight browser with an HTTP API, implem

Scrapinghub 3.8k Jan 03, 2023
Language-agnostic HTTP API Testing Tool

Dredd — HTTP API Testing Framework Dredd is a language-agnostic command-line tool for validating API description document against backend implementati

Apiary 4k Jan 05, 2023
Useful additions to Django's default TestCase

django-test-plus Useful additions to Django's default TestCase from REVSYS Rationale Let's face it, writing tests isn't always fun. Part of the reason

REVSYS 546 Dec 22, 2022
d4rk Ghost is all in one hacking framework For red team Pentesting

d4rk ghost is all in one Hacking framework For red team Pentesting it contains all modules , information_gathering exploitation + vulnerability scanning + ddos attacks with 12 methods + proxy scraper

d4rk sh4d0w 15 Dec 15, 2022
A wrapper for webdriver that is a jumping off point for web automation.

Webdriver Automation Plus ===================================== Description: Tests the user can save messages then find them in search and Saved items

1 Nov 08, 2021
Active Directory Penetration Testing methods with simulations

AD penetration Testing Project By Ruben Enkaoua - GL4Di4T0R Based on the TCM PEH course (Heath Adams) Index 1 - Setting Up the Lab Intallation of a Wi

GL4DI4T0R 3 Aug 12, 2021
Test django schema and data migrations, including migrations' order and best practices.

django-test-migrations Features Allows to test django schema and data migrations Allows to test both forward and rollback migrations Allows to test th

wemake.services 382 Dec 27, 2022
Akulaku Create NewProduct Automation using Selenium Python

Akulaku-Create-NewProduct-Automation Akulaku Create NewProduct Automation using Selenium Python Usage: 1. Install Python 3.9 2. Open CMD on Bot Folde

Rahul Joshua Damanik 1 Nov 22, 2021
A testing system for catching visual regressions in Web applications.

Huxley Watches you browse, takes screenshots, tells you when they change Huxley is a test-like system for catching visual regressions in Web applicati

Facebook Archive 4.1k Nov 30, 2022
Android automation project with pytest+appium

Android automation project with pytest+appium

1 Oct 28, 2021
PoC getting concret intel with chardet and charset-normalizer

aiohttp with charset-normalizer Context aiohttp.TCPConnector(limit=16) alpine linux nginx 1.21 python 3.9 aiohttp dev-master chardet 4.0.0 (aiohttp-ch

TAHRI Ahmed R. 2 Nov 30, 2022
A Library for Working with Sauce Labs

Robotframework - Sauce Labs Plugin This is a plugin for the SeleniumLibrary to help with using Sauce Labs. This library is a plugin extension of the S

joshin4colours 6 Oct 12, 2021
Green is a clean, colorful, fast python test runner.

Green -- A clean, colorful, fast python test runner. Features Clean - Low redundancy in output. Result statistics for each test is vertically aligned.

Nathan Stocks 756 Dec 22, 2022
Subprocesses for Humans 2.0.

Delegator.py — Subprocesses for Humans 2.0 Delegator.py is a simple library for dealing with subprocesses, inspired by both envoy and pexpect (in fact

Amit Tripathi 1.6k Jan 04, 2023
Travel through time in your tests.

time-machine Travel through time in your tests. A quick example: import datetime as dt

Adam Johnson 373 Dec 27, 2022
A library to make concurrent selenium tests that automatically download and setup webdrivers

AutoParaSelenium A library to make parallel selenium tests that automatically download and setup webdrivers Usage Installation pip install autoparasel

Ronak Badhe 8 Mar 13, 2022
UUM Merit Form Filler is a web automation which helps automate entering a matric number to the UUM system in order for participants to obtain a merit

About UUM Merit Form Filler UUM Merit Form Filler is a web automation which helps automate entering a matric number to the UUM system in order for par

Ilham Rachmat 3 May 31, 2022
Selenium Page Object Model with Python

Page-object-model (POM) is a pattern that you can apply it to develop efficient automation framework.

Mohammad Ifran Uddin 1 Nov 29, 2021