Hi, Thanks for trying to improve the tests!
I'm reluctant to give up Firefox sanity tests on every commit, though. In fact, I wanted to add Edge and Safari, because those are also supported browsers. Just today a Firefox only issue was reported, so they are valuable. Did you consider either leaving a grid up permanently or perhaps using a third party like saucelabs? Best wishes, Greg On Mon, Mar 4, 2019, 11:39 AM Marcin Sobczyk <[email protected]> wrote: > Hi, > > *TL; DR* Let's cut the running time of '008_basic_ui_sanity.py' by more > than 3 minutes by sacrificing Firefox and Chrome screenshots in favor of > Chromium. > During the OST hackathon in Brno this year, I saw an opportunity to > optimize basic UI sanity tests from basic suite. > The way we currently run them, is by setting up a Selenium grid using 3 > docker containers, with a dedicated network... that's insanity! (pun > intended). > Let's a look at the running time of '008_basic_ui_sanity.py' scenario ( > https://jenkins.ovirt.org/view/oVirt%20system%20tests/job/ovirt-system-tests_manual/4197/): > > > 01:31:50 @ Run test: 008_basic_ui_sanity.py: > 01:31:50 nose.config: INFO: Ignoring files matching ['^\\.', '^_', > '^setup\\.py$'] > 01:31:50 # init: > 01:31:50 # init: Success (in 0:00:00) > 01:31:50 # start_grid: > 01:34:05 # start_grid: Success (in 0:02:15) > 01:34:05 # initialize_chrome: > 01:34:18 # initialize_chrome: Success (in 0:00:13) > 01:34:18 # login: > 01:34:27 # login: Success (in 0:00:08) > 01:34:27 # left_nav: > 01:34:45 # left_nav: Success (in 0:00:18) > 01:34:45 # close_driver: > 01:34:46 # close_driver: Success (in 0:00:00) > 01:34:46 # initialize_firefox: > 01:35:02 # initialize_firefox: Success (in 0:00:16) > 01:35:02 # login: > 01:35:11 # login: Success (in 0:00:08) > 01:35:11 # left_nav: > 01:35:29 # left_nav: Success (in 0:00:18) > 01:35:29 # cleanup: > 01:35:36 # cleanup: Success (in 0:00:06) > 01:35:36 # Results located at > /dev/shm/ost/deployment-basic-suite-master/008_basic_ui_sanity.py.junit.xml > 01:35:36 @ Run test: 008_basic_ui_sanity.py: Success (in 0:03:45) > > Starting the Selenium grid takes 2:15 out of 3:35 of total running time! > > I've investigated a lot of approaches and came up with something like this: > > - install 'chromium-headless' package on engine VM > - download 'chromedriver' and 'selenium hub' jar and deploy them in > '/var/opt/' on engine's VM > - run 'selenium.jar' on engine VM from '008_basic_ui_sanity.py' by > using Lago's ssh > - connect to the Selenium instance running on the engine in > '008_basic_ui_sanity.py' > - make screenshots > > This series of patches represent the changes: > https://gerrit.ovirt.org/#/q/topic:selenium-on-engine+(status:open+OR+status:merged) > . > This is the new running time (https://jenkins.ovirt.org/view/oVirt system > tests/job/ovirt-system-tests_manual/4195/): > > 20:13:26 @ Run test: 008_basic_ui_sanity.py: > 20:13:26 nose.config: INFO: Ignoring files matching ['^\\.', '^_', > '^setup\\.py$'] > 20:13:26 # init: > 20:13:26 # init: Success (in 0:00:00) > 20:13:26 # make_screenshots: > 20:13:27 * Retrying (Retry(total=2, connect=None, read=None, > redirect=None, status=None)) after connection broken by > 'NewConnectionError('<urllib3.connection.HTTPConnection object at > 0x7fdb6004f8d0>: Failed to establish a new connection: [Errno 111] > Connection refused',)': /wd/hub > 20:13:27 * Retrying (Retry(total=1, connect=None, read=None, > redirect=None, status=None)) after connection broken by > 'NewConnectionError('<urllib3.connection.HTTPConnection object at > 0x7fdb6004fa10>: Failed to establish a new connection: [Errno 111] > Connection refused',)': /wd/hub > 20:13:27 * Retrying (Retry(total=0, connect=None, read=None, > redirect=None, status=None)) after connection broken by > 'NewConnectionError('<urllib3.connection.HTTPConnection object at > 0x7fdb6004fb50>: Failed to establish a new connection: [Errno 111] > Connection refused',)': /wd/hub > 20:13:28 * Redirecting http://192.168.201.4:4444/wd/hub -> > http://192.168.201.4:4444/wd/hub/static/resource/hub.html > 20:14:02 # make_screenshots: Success (in 0:00:35) > 20:14:02 # Results located at > /dev/shm/ost/deployment-basic-suite-master/008_basic_ui_sanity.py.junit.xml > 20:14:02 @ Run test: 008_basic_ui_sanity.py: Success (in 0:00:35) > (The 'NewConnectionErrors' is waiting for Selenium hub to be up and > running, I can silence these later). > And the screenshots are here: > https://jenkins.ovirt.org/view/oVirt%20system%20tests/job/ovirt-system-tests_manual/4195/artifact/exported-artifacts/screenshots/ > > *The pros:* > > - we cut the running time by more than 3 minutes > > *The cons:* > > - we don't get Firefox or Chrome screenshots - we get Chromium > screenshots (although AFAIK, QE has much more Selenium tests which cover > both Firefox and Chrome) > - we polute the engine VM with 'chromium-headless' package and deps > (in total: 'chromium-headless', 'chromium-common', 'flac-libs' and > 'minizip'), although we can remove these after the tests > > *Some design choices explained:* > > Q: Why engine VM? > > A: Because the engine VM already has 'X11' libs. We could install > 'chromium-headless' (and even other browsers) on our Jenkins executors, but > that would mess them up a lot. > > Q: Why Chromium? > > A: Because it has a separate 'headless' package. > > Q: Why not use 'chromedriver' RPM in favor of > https://chromedriver.storage.googleapis.com Chromedriver builds? > > A: Because the RPM version pulls a lot of extra dependencies even on the > engine VM ('gtk3', 'cairo' etc.). Builds from the URL are the offical > Google Chromedriver builds, they contain a single binary, and they work for > us. > > *What still needs to be polished with the patches:* > > - Currently 'setup_engine_selenium.sh' script downloads each time > 'selenium.jar' and 'chromedriver.zip' (even with these downloads we get > much faster set-up times) - we should bake these into the engine VM image > template. > - 'selenium_hub_running' function in 'selenium_on_engine.py' is > hackish - an ability to run an ssh command with a context manager (and > auto-terminate on it exits) should be part of Lago. Can be refactored. > > Questions, comments, reviews are welcome. > > Regards, Marcin > > > > _______________________________________________ > Devel mailing list -- [email protected] > To unsubscribe send an email to [email protected] > Privacy Statement: https://www.ovirt.org/site/privacy-policy/ > oVirt Code of Conduct: > https://www.ovirt.org/community/about/community-guidelines/ > List Archives: > https://lists.ovirt.org/archives/list/[email protected]/message/RLB2KSNJS4YKVMCDUUHOZJWBQDGJCXGZ/ >
_______________________________________________ Devel mailing list -- [email protected] To unsubscribe send an email to [email protected] Privacy Statement: https://www.ovirt.org/site/privacy-policy/ oVirt Code of Conduct: https://www.ovirt.org/community/about/community-guidelines/ List Archives: https://lists.ovirt.org/archives/list/[email protected]/message/TNOIUCRJQM5LFAY3RGIBGFYFTI6EAKBQ/
