On Tue, 12 Mar 2019 at 10:20, Martin Perina <[email protected]> wrote:

>
>
> On Fri, Mar 8, 2019 at 12:36 PM Marcin Sobczyk <[email protected]>
> wrote:
>
>> Greg,
>>
>> that's a great finding and a very good starting point.
>>
>> If we want to stick with docker images and Firefox/Chrome testing, I
>> still have some ideas, that would shorten the running time even more:
>>
>>    - we do something like this:
>>
>>     log("waiting %s sec for grid to initialize..." % GRID_STARTUP_DELAY)
>>     time.sleep(GRID_STARTUP_DELAY)
>>
>>   this is very inefficient. We can change that to something like I wrote
>> here (_wait_for_selenium_hub):
>>
>>
>> https://gerrit.ovirt.org/#/c/98135/2/common/test-scenarios-files/selenium/navigation/selenium_on_engine.py
>>
>>   This function probably needs some improvement (i.e. urllib3 spits out
>> warnings on an unsuccessful connection attempt, so they would need to be
>> silenced), but that's a far better approach than a simple sleep.
>>
>>    - parallelize running Firefox and Chrome tests - there's no reason
>>    not to run them both at the same time. There's something called
>>    VectorThread in lago.utils. A simple example of usage can be found in
>>    '004_basic_sanity.py:955' (disk_operations function). This would have
>>    a nice side effect of getting rid of the ugly global ovirt_driver -
>>    each thread would have it's own.
>>
>>
>>    - maybe not a running-time improvement, but I think
>>    https://gerrit.ovirt.org/#/c/98127/ is still relevant - the way we
>>    call save_screenshot is ugly and much too verbose
>>
>> Right now, I have to switch my focus to some important stuff in VDSM -
>> the OST patches were a continuation of a hackathon effort and something
>> like a "side-project" ;) Still, I don't want the tread to die. I think
>> there's a lot of room for improvements. I can rebase/improve some of my
>> patches if you find them useful. Please keep me posted with your efforts!
>>
>> Regards, Marcin
>> On 3/7/19 11:10 PM, Greg Sheremeta wrote:
>>
>> Marcin,
>>
>> It just dawned on me that the main reason 008's start_grid takes so long
>> is that the docker images are fresh pulled every time. Several hundred MB,
>> every time (ugh, sorry). We can and should cache them. What do you think
>> about trying this before doing anything else? [it would also be a good time
>> to update from actinium to the latest, iron.]
>>
>> @Barak Korren <[email protected]> you once mentioned to me we should
>> cache these if they are ok to cache (they are). How do we do that?
>>
>>
> Gal/Gallit/Barak, so is there any way how to store those docker containers
> within image of lago VM which runs OST tests?
>
>>
>> Reviving this now since we have some containerization support for CI.
Can we push this forward?

> docker.io/selenium/node-chrome-debug   3.9.1-actinium      327adc897d23
>>       13 months ago       *904 MB*
>> docker.io/selenium/node-firefox-debug   3.9.1-actinium
>> 88649b420bd5        13 months ago       *814 MB*
>>
>> Greg
>>
>>
>> On Tue, Mar 5, 2019 at 6:15 AM Greg Sheremeta <[email protected]>
>> wrote:
>>
>>>
>>> On Tue, Mar 5, 2019 at 4:55 AM Marcin Sobczyk <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>> On 3/4/19 7:07 PM, Greg Sheremeta wrote:
>>>>
>>>> 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.
>>>>
>>>> Was the Firefox-only issue detected by basic suite or some other tests?
>>>>
>>> It was reported by a developer. Because GWT compiles permutations per
>>> browser, and each browser therefore loads completely separate JavaScript
>>> payloads, it's just too easy for it to break in one browser and be fine in
>>> the other, so I'm really not ok to remove Firefox.
>>>
>>> If Admin Portal was React where there is a single JavaScript payload
>>> that's shared among all browsers, then I'd consider it.
>>>
>>>>
>>>> Did you consider either leaving a grid up permanently or perhaps using
>>>> a third party like saucelabs?
>>>>
>>>> I did consider simply having our own grid for the OST.
>>>> There's even a thread somewhere on ovirt-devel, where someone found OST
>>>> trying to connect to one of my VMs in Tel Aviv, where my own grid was
>>>> running :D
>>>> I couldn't make a public demo though - OST executors couldn't see my VM
>>>> in tlv.
>>>>
>>>> This approach has 2 big flaws:
>>>>
>>>>    - it requires quite a lot of resources for the grid to always be
>>>>    there for us
>>>>
>>>> What about Saucelabs or another third party free tool?
>>>
>>>
>>>>
>>>>    - it makes OST running times somehow undeterministic - situations,
>>>>    where WebDriver has to wait for Selenium hub/nodes to be free, will
>>>>    probably take place
>>>>
>>>> The way I see basic suite's UI sanity tests, is that they're exactly
>>>> what they're called - sanity tests.
>>>> We do trivial checks like "can we log in to the webadmin site", "can we
>>>> go to 'virtual machines' sub-page".
>>>> I'm not in favor of dropping these completely - I think they make
>>>> sense, but I also think we can live with a trimmed-down version that saves
>>>> a lot of time.
>>>> As I said - AFAIK QE have their own Selenium grid, where they run more
>>>> complex tests on the UI.
>>>>
>>>
>>> Yes, OST basic_ui_sanity tests aren't "compatibility" tests. We're not
>>> checking pixels or look. They are super simple "does the app load" tests,
>>> are very valuable, and we're not dropping them.
>>>
>>> Greg
>>>
>>> Regards, Marcin
>>>>
>>>>
>>>>
>>>> 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/
>>>>>
>>>>
>>>
>>> --
>>>
>>> GREG SHEREMETA
>>>
>>> SENIOR SOFTWARE ENGINEER - TEAM LEAD - RHV UX
>>>
>>> Red Hat NA
>>>
>>> <https://www.redhat.com/>
>>>
>>> [email protected]    IRC: gshereme
>>> <https://red.ht/sig>
>>>
>>
>>
>> --
>>
>> GREG SHEREMETA
>>
>> SENIOR SOFTWARE ENGINEER - TEAM LEAD - RHV UX
>>
>> Red Hat NA
>>
>> <https://www.redhat.com/>
>>
>> [email protected]    IRC: gshereme
>> <https://red.ht/sig>
>>
>> _______________________________________________
>> 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/VH52GVG6V5SO34L56D7KETFX2HGIEPYR/
>>
>
>
> --
> Martin Perina
> Associate Manager, Software Engineering
> Red Hat Czech s.r.o.
> _______________________________________________
> 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/TP3EGSE65SNZXGASMWOEHHZES4R2RQEY/
>
_______________________________________________
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/KNKSMINVCBW4XI4KWOCPSBOVIWQQZ53R/

Reply via email to