def pytest_runtest_makereport(item, call): """Pytest hook for report preparation. Submit tests' data to a database. """ run_id = item.config.getoption("db_submit") if not run_id: yield return data = item._request.test_info["db_info"].copy() data["results"] = item._request.test_info["results"].copy() data["raw_results"] = item._request.test_info["raw_results"].copy() data["status"] = "not_finished" data["error_msg"] = "" report = (yield).get_result() if call.when in ["setup", "call"]: if call.when == "call": if not report.passed: data["status"] = "failed" data["error_msg"] = report.longrepr.reprcrash.message else: data["status"] = "passed" db_url = item.config.getoption("db_url") db_collection = item.config.getoption("db_collection") logging.info("Upload data to {}/{}.{}. Data: {}".format(db_url, DATABASE, db_collection, data)) upload_timetest_data(data, db_url, db_collection)
def pytest_runtest_makereport(item, call): """Pytest hook for report preparation. Submit tests' data to a database. """ FIELDS_FOR_ID = ['timetest', 'model', 'device', 'niter', 'run_id'] FIELDS_FOR_SUBMIT = FIELDS_FOR_ID + [ '_id', 'test_name', 'results', 'status', 'error_msg' ] run_id = item.config.getoption("db_submit") db_url = item.config.getoption("db_url") db_collection = item.config.getoption("db_collection") if not (run_id and db_url and db_collection): yield return if not item._request.test_info["submit_to_db"]: logging.error( "Data won't be uploaded to a database on '{}' step".format( call.when)) yield return data = item.funcargs.copy() data["timetest"] = data.pop("executable").stem data.update(data["instance"]) data['run_id'] = run_id data['_id'] = hashlib.sha256(''.join( [str(data[key]) for key in FIELDS_FOR_ID]).encode()).hexdigest() data["test_name"] = item.name data["results"] = item._request.test_info["results"] data["status"] = "not_finished" data["error_msg"] = "" data = {field: data[field] for field in FIELDS_FOR_SUBMIT} report = (yield).get_result() if call.when in ["setup", "call"]: if call.when == "call": if not report.passed: data["status"] = "failed" data["error_msg"] = report.longrepr.reprcrash.message else: data["status"] = "passed" logging.info("Upload data to {}/{}.{}. Data: {}".format( db_url, DATABASE, db_collection, data)) upload_timetest_data(data, db_url, db_collection)
def pytest_runtest_makereport(item, call): """Pytest hook for report preparation. Submit tests' data to a database. """ FIELDS_FOR_ID = ['timetest', 'model', 'device', 'niter', 'run_id'] FIELDS_FOR_SUBMIT = FIELDS_FOR_ID + [ '_id', 'test_name', 'results', 'status', 'error_msg' ] run_id = item.config.getoption("db_submit") db_url = item.config.getoption("db_url") db_collection = item.config.getoption("db_collection") if not (run_id and db_url and db_collection): yield return data = item.funcargs.copy() data["timetest"] = data.pop("executable").stem data.update({key: val for key, val in data["instance"].items()}) data['run_id'] = run_id data['_id'] = hashlib.sha256(''.join( [str(data[key]) for key in FIELDS_FOR_ID]).encode()).hexdigest() data["test_name"] = item.name data["results"] = {} data["status"] = "not_finished" data["error_msg"] = "" data = {field: data[field] for field in FIELDS_FOR_SUBMIT} report = (yield).get_result() if call.when in ["setup", "call"]: if call.when == "call": if not report.passed: data["status"] = "failed" data["error_msg"] = report.longrepr.reprcrash.message else: data["status"] = "passed" upload_timetest_data(data, db_url, db_collection)