Testing

Testing around http requests often needs a mocked response:

import json

class MockResponse:
    def __init__(self, status_code, json_data):
        self.status_code = status_code
        self.json_data = json_data

    def json(self):
        return self.json_data

    def raise_for_status(self):
        pass

    @property
    def content(self):
        return json.dumps(self.json_data).encode('utf-8')

While using pytest.mark.paramatrize, I often like naming cases

def paramaterize_cases(cases, default_values={}, fill_none=True, fill_default=False):
    """Create paramaterization from a set of named cases"""
    ids = []
    argnames = IndexedSet()
    if fill_default:
        argnames |= IndexedSet(default_values.keys())
    case_values = []

    for case_id, case_vars in cases:
        ids.append(case_id)
        argnames |= IndexedSet(case_vars.keys())
        case_values.append(case_vars)

    argnames = list(argnames)

    # Build list of tuples of values
    argvalues = [
        tuple([
            get_from_lists(var, [values, default_values], raise_error=not fill_none)
            for var in argnames
        ])
        for values in case_values
    ]
    return {
        'argnames': argnames,
        'argvalues': argvalues,
        'ids': ids,
    }

Last updated

Was this helpful?