conftest.py (4135B)
1 import json 2 import os 3 import sys 4 from argparse import Namespace 5 6 import pytest 7 8 # need this so the raptor unit tests can find raptor/raptor classes 9 here = os.path.abspath(os.path.dirname(__file__)) 10 raptor_dir = os.path.join(os.path.dirname(here), "raptor") 11 sys.path.insert(0, raptor_dir) 12 13 from browsertime import Browsertime 14 from perftest import Perftest 15 16 17 @pytest.fixture 18 def options(request): 19 opts = { 20 "app": "firefox", 21 "binary": "path/to/dummy/browser", 22 "browsertime_visualmetrics": False, 23 "extra_prefs": {}, 24 } 25 26 if hasattr(request.module, "OPTIONS"): 27 opts.update(request.module.OPTIONS) 28 return opts 29 30 31 @pytest.fixture 32 def browsertime_options(options): 33 options["browsertime_node"] = "browsertime_node" 34 options["browsertime_browsertimejs"] = "browsertime_browsertimejs" 35 options["browsertime_ffmpeg"] = "browsertime_ffmpeg" 36 options["browsertime_geckodriver"] = "browsertime_geckodriver" 37 options["browsertime_chromedriver"] = "browsertime_chromedriver" 38 options["browsertime_video"] = "browsertime_video" 39 options["browsertime_visualmetrics"] = "browsertime_visualmetrics" 40 options["browsertime_no_ffwindowrecorder"] = "browsertime_no_ffwindowrecorder" 41 return options 42 43 44 @pytest.fixture 45 def mock_test(): 46 return { 47 "name": "raptor-firefox-tp6", 48 "test_url": "/dummy/url", 49 "secondary_url": "/dummy/url-2", 50 } 51 52 53 @pytest.fixture(scope="session") 54 def get_prefs(): 55 def _inner(browser): 56 import raptor 57 58 prefs_dir = os.path.join(raptor.__file__, "preferences") 59 with open(os.path.join(prefs_dir, f"{browser}.json")) as fh: 60 return json.load(fh) 61 62 63 @pytest.fixture(scope="session") 64 def filedir(): 65 return os.path.join(here, "files") 66 67 68 @pytest.fixture 69 def get_binary(): 70 from moztest.selftest import fixtures 71 72 def inner(app): 73 if app != "firefox": 74 pytest.xfail(reason=f"{app} support not implemented") 75 76 binary = fixtures.binary() 77 if not binary: 78 pytest.skip(f"could not find a {app} binary") 79 return binary 80 81 return inner 82 83 84 @pytest.fixture 85 def create_args(): 86 args = Namespace( 87 app="firefox", 88 test="browsertime-tp6-unittest", 89 binary="path/to/binary", 90 gecko_profile=False, 91 extra_profiler_run=False, 92 debug_mode=False, 93 page_cycles=None, 94 page_timeout=None, 95 test_url_params=None, 96 host=None, 97 run_local=True, 98 browsertime=True, 99 cold=False, 100 live_sites=False, 101 enable_marionette_trace=False, 102 collect_perfstats=False, 103 chimera=False, 104 browsertime_visualmetrics=False, 105 extra_summary_methods=[], 106 power_test=False, 107 ) 108 109 def inner(**kwargs): 110 for next_arg in kwargs: 111 print(next_arg) 112 print(kwargs[next_arg]) 113 setattr(args, next_arg, kwargs[next_arg]) 114 return args 115 116 return inner 117 118 119 @pytest.fixture(scope="module") 120 def ConcretePerftest(): 121 class PerftestImplementation(Perftest): 122 def check_for_crashes(self): 123 super().check_for_crashes() 124 125 def clean_up(self): 126 super().clean_up() 127 128 def run_test(self, test, timeout): 129 super().run_test(test, timeout) 130 131 def run_test_setup(self, test): 132 super().run_test_setup(test) 133 134 def run_test_teardown(self, test): 135 super().run_test_teardown(test) 136 137 def set_browser_test_prefs(self): 138 super().set_browser_test_prefs() 139 140 def get_browser_meta(self): 141 return (), () 142 143 def setup_chrome_args(self, test): 144 super().setup_chrome_args(test) 145 146 return PerftestImplementation 147 148 149 @pytest.fixture(scope="module") 150 def ConcreteBrowsertime(): 151 class BrowsertimeImplementation(Browsertime): 152 @property 153 def browsertime_args(self): 154 return [] 155 156 def get_browser_meta(self): 157 return (), () 158 159 def setup_chrome_args(self, test): 160 super().setup_chrome_args(test) 161 162 return BrowsertimeImplementation