|
| 1 | +### Interview |
| 2 | + |
| 3 | +A few days ago [Lauri Apple][lauri] and [Raffaele Di Fazio][raffo] approached me with a few interesting questions about [docker-selenium][] that we decided to share here. |
| 4 | + |
| 5 | +<h4 id="WHAT">What is the project about?</h4> |
| 6 | + |
| 7 | +The project aims to provide [Selenium][] inside a [docker][] container. |
| 8 | + |
| 9 | +<h4 id="HOW">How did the project get started? Under what conditions/after what happened?</h4> |
| 10 | + |
| 11 | +The project started while I was in charge of building and maintaining the test automation suite of an [AngularJS][] project at [AppNexus][]. I was also doing DevOps tasks related to the test infrastructure. |
| 12 | + |
| 13 | +The objective was to run the tests headless, different solutions existed for that and there is [PhantomJS][] for example but we needed real browsers like Chrome or Firefox to run our tests on, one reason was to get better test confidence and the other was that [Protractor][] doesn't [play nice][prot-browser-support] with [PhantomJS][]. |
| 14 | + |
| 15 | +With [Selenium][], you can always run your tests locally but as soon as your tests runs the browser popping up in your main display can be annoying, you could configure your windows manager to move it automatically to another workspace for example and similar solutions exists but why going into all those troubles if you can just `docker run selenium`. |
| 16 | + |
| 17 | +You can also configure a [headless Xvfb selenium][xvfb-sel] as it is a common use case in Jenkins CI but, again, why going into the trouble now [docker][] exists. |
| 18 | + |
| 19 | +So back in 2014 the first thing I did was googling "selenium in docker", looked around 2 to 3 projects that were floating around but not well maintained so decided to create my own. |
| 20 | + |
| 21 | +<h4 id="LONG">How long has it been around?</h4> |
| 22 | + |
| 23 | +It started mid 2014 so almost 2 years, it wasn't maintained consistently all these time but yes lately thanks to my role here at [Zalando][] and the fact that some teams here are using it. |
| 24 | + |
| 25 | +<h4 id="TESTED">How is it tested? How is being built/deployed?</h4> |
| 26 | + |
| 27 | +It has tests that run seamlessly [locally][tests] or in [Travis][travis-build] plus deploy automation using [TravisCI docker infrastructure][travis-docker] |
| 28 | + |
| 29 | +The reason for pushing the new releases (docker images) from [Travis][travis-build] instead of using docker [automated builds][auto-builds] is that a [CI][] tool allows running arbitrary scripting like **tests** before pushing a broken image like happened for example at issue [208][stock-208] |
| 30 | + |
| 31 | +<h4 id="PROMO">Have you done promotions on the project, or did people just learn of it in passing?</h4> |
| 32 | + |
| 33 | +There was no promotion in the beginning, I suppose the success of it is due to the fact that is an obvious use case for any developer that needs [Selenium][] and knows how handy [docker][] technology is regarding disposable infrastructure. |
| 34 | + |
| 35 | +Automation testers probably Google 2 words: *selenium* and *docker* then the top results are the official project and secondly this one or sometimes the other way around depending on Google mood *(i.e. Google algorithm in relation to the browser user stats)*. |
| 36 | + |
| 37 | +<h4 id="PITCH">How did you get some of our Zalando teams to use it? How did you make the pitch?</h4> |
| 38 | + |
| 39 | +When I started at [Zalando][] in March 2015 we didn't have [Sauce Labs][sauce], only a centralized [Selenium Grid][grid] in our data center which acted as a kind of [SPOF][] (Single Point of Failure) for our [Zalando teams][zal-teams] let alone the fact you couldn't see the tests running nor have recorded video results which are 2 features of this project. |
| 40 | + |
| 41 | +My team, in charge of the Test Infrastructure, later on managed to acquire [Sauce Labs][sauce] enterprise which has all these features and support hundreds of browsers combinations so is the natural preferred way of getting a front-end testing infrastructure these days but [docker-selenium][] still keeps 3 advantages: |
| 42 | + |
| 43 | +- **cost**: is free. |
| 44 | +- **speed**: runs around 2x faster than a paid cloud based [Selenium][] solution. |
| 45 | +- **security**: no need to tunnel your local app to a third party cloud solution. |
| 46 | + |
| 47 | +<h4 id="SPIKE">Has there been any noticeable spike in followers/stars/etc that you've noticed during the time it's been public?</h4> |
| 48 | + |
| 49 | +There was a slightly spike after one of contributors, [@rubytester][rubytester], made a [presentation][] back in September 2015. |
| 50 | + |
| 51 | +Sometimes when someone with many followers [tweets about it][tweet1] but other than that the popularity growth has being consistent. Unfortunately I can't analyze this, back in time, out of github [analytics][] because there is no way to customize the dates, yet. |
| 52 | + |
| 53 | +<h4 id="USERS">How did you acquire users like Nvidia?</h4> |
| 54 | + |
| 55 | +I suppose most users come from Google search results as shown in the [traffic stats][analytics]. |
| 56 | + |
| 57 | +Some of these users generously asked me to add them in the *"Who is using this"* list like in the case of Nvidia for example when I was contacted directly by [Tony Carrillo][tony] via his corporate email *@nvidia.com*. |
| 58 | + |
| 59 | +In the case of [Algolia][] I asked [@vvo][] after he pointed it out in a github issue. |
| 60 | + |
| 61 | +From now on, when I remember it, I try to ask the users that open issues or send PRs to add their companies to this list as it feels nice to see the list growing. |
| 62 | + |
| 63 | +<h4 id="LEARNED">What have you learned during the project's lifespan? About:</h4> |
| 64 | + |
| 65 | +##### Documentation |
| 66 | + |
| 67 | +Good extensive documentation helps gain users for sure but should always include how to get started quickly for people that want to use it ASAP without needing to acquire a deep knowledge of the tool. |
| 68 | + |
| 69 | +##### Getting users |
| 70 | + |
| 71 | +A couple of users wrote me they preferred my project because it was well maintained, up to date and issues were addressed quickly (no more than 3 days). |
| 72 | +I can understand that in a huge widely used project like [AngularJS][] you get to see hundreds of [open issues without comments][angular-issues] nor assignee nor labels or 36 issues unattended like I see today [in docker][docker-issues] but some projects that have that huge amount of incoming opened issues and yet you still see them not even labeled, like the author not caring at all, ever. |
| 73 | + |
| 74 | +##### Working with contributors |
| 75 | + |
| 76 | +When [Matthew Smith][mtscout6] aka @mtscout6 jumped into the project, 4 months after it started, great things happened. He made a few interesting [improvements][matt-improv] but moreover we started conversations about moving [docker-selenium][] to the official [SeleniumHQ][] organization, Matt pushed this, contacted Mozilla guys and what not so it [happened][] and for a while we were maintaining only that one but I decided to continue maintaining mine with differentiated [features][] and that's why 2 project for the same purpose exist today. |
| 77 | + |
| 78 | +##### Technical debt |
| 79 | + |
| 80 | +Main technical debt now is issue [31][] "Comply with docker official-images requisites" and maybe also issue [40][] to "Split browser capabilities into separate images". Probably also to improve the bash scripting by using functions with proper unit tests. |
| 81 | + |
| 82 | +##### Testing |
| 83 | + |
| 84 | +The [official][stock] one at [SeleniumHQ][] is using [CircleCI][] while [elgalu/selenium][] uses [TravisCI][] so tests basically have a couple of scenarios, running front-end tests on Chrome, on Firefox and restarting the container to check it still works after that. We should potentially add more tests for each bug that comes up to increase coverage in the future. |
| 85 | + |
| 86 | +<h4 id="FUTURE">What is the future of this project? What's the roadmap?</h4> |
| 87 | + |
| 88 | +Right now people tend to build long running selenium grids by using the [stock][] docker selenium images or this one however when you see [Sauce Labs][sauce] or [BrowserStack][] approach you realize the way to go is isolation, i.e. one machine or VM or docker container for each selenium session so those are the [next steps][next] for this project and perhaps a [Jenkins plugin][jenking-plugin]. Also [automate new versions detection][verdetection] e.g. new version of Chrome/Firefox/Selenium might be one of the chores to work on. |
| 89 | + |
| 90 | + |
| 91 | +[lauri]: https://twitter.com/LauritaApplez |
| 92 | +[raffo]: http://raffo.github.io/ |
| 93 | +[docker-selenium]: https://github.com/elgalu/docker-selenium |
| 94 | +[stock]: https://github.com/SeleniumHQ/docker-selenium |
| 95 | +[AppNexus]: https://en.wikipedia.org/wiki/AppNexus |
| 96 | +[xvfb-sel]: http://elementalselenium.com/tips/38-headless |
| 97 | +[PhantomJS]: https://github.com/ariya/phantomjs |
| 98 | +[Protractor]: https://github.com/angular/protractor |
| 99 | +[prot-browser-support]: https://angular.github.io/protractor/#/browser-support |
| 100 | +[TravisCI]: https://github.com/elgalu/docker-selenium/blob/master/.travis.yml |
| 101 | +[travis-build]: https://travis-ci.org/elgalu/docker-selenium/builds/123103275 |
| 102 | +[CircleCI]: https://github.com/SeleniumHQ/docker-selenium/blob/master/circle.yml |
| 103 | +[31]: https://github.com/elgalu/docker-selenium/issues/31 |
| 104 | +[40]: https://github.com/elgalu/docker-selenium/issues/40 |
| 105 | +[matt-improv]: https://github.com/elgalu/docker-selenium/commits?author=mtscout6 |
| 106 | +[happened]: https://github.com/SeleniumHQ/docker-selenium |
| 107 | +[features]: https://github.com/elgalu/docker-selenium#notes-on-similar-repo-seleniumhqdocker-selenium |
| 108 | +[presentation]: https://twitter.com/rubytester/status/644965076072574976 |
| 109 | +[rubytester]: https://github.com/rubytester |
| 110 | +[tweet1]: https://twitter.com/vvoyer/status/687266750380027905 |
| 111 | +[tony]: https://www.linkedin.com/in/anthony-carrillo-1232422 |
| 112 | +[SPOF]: https://en.wikipedia.org/wiki/Single_point_of_failure |
| 113 | +[analytics]: https://github.com/elgalu/docker-selenium/graphs/traffic |
| 114 | +[sauce]: https://saucelabs.com/selenium/selenium-grid |
| 115 | +[BrowserStack]: https://www.browserstack.com/automate |
| 116 | +[AngularJS]: https://angularjs.org/ |
| 117 | +[Zalando]: https://tech.zalando.com/ |
| 118 | +[travis-docker]: https://docs.travis-ci.com/user/docker/ |
| 119 | +[Selenium]: https://github.com/SeleniumHQ/selenium |
| 120 | +[docker]: https://github.com/docker/docker |
| 121 | +[grid]: https://github.com/SeleniumHQ/selenium/wiki/Grid2 |
| 122 | +[elgalu/selenium]: https://github.com/elgalu/docker-selenium |
| 123 | +[angular-issues]: https://git.io/vwntr |
| 124 | +[docker-issues]: https://git.io/vwnq5 |
| 125 | +[mtscout6]: https://github.com/mtscout6 |
| 126 | +[SeleniumHQ]: https://github.com/SeleniumHQ |
| 127 | +[next]: https://github.com/elgalu/docker-selenium/issues/65#issuecomment-212462604 |
| 128 | +[jenking-plugin]: https://github.com/elgalu/docker-selenium/issues/80 |
| 129 | +[verdetection]: https://github.com/elgalu/docker-selenium/issues/81 |
| 130 | +[zal-teams]: https://tech.zalando.com/blog/radical-agility-with-autonomous-teams-and-microservices-in-the-cloud/ |
| 131 | +[Algolia]: https://www.algolia.com/ |
| 132 | +[@vvo]: https://github.com/vvo |
| 133 | +[auto-builds]: https://docs.docker.com/docker-hub/builds |
| 134 | +[CI]: https://en.wikipedia.org/wiki/Continuous_integration |
| 135 | +[stock-208]: https://github.com/SeleniumHQ/docker-selenium/issues/208 |
| 136 | +[tests]: https://github.com/elgalu/docker-selenium/tree/master/test |
0 commit comments