Hi all,

You may have noticed that there is a new symbol on the qgis github page
that (hopefully) says build passing. [1]

The last week I have been busy with fixing tests for integration with
Travis CI.

Right now, whenever somebody pushes a change to
 * a branch in the qgis repository (that affects "master" and
release-x_y branches)
 * a pull request for the qgis repository
a service called Travis CI [2] will be activated and compile the
sourcecode and run the test suite there. That has the advantage that we
have a reference platform (ubuntu precise for the moment) where all
tests pass. This defined environment is a big step forward as it makes
test runs comparable and if something goes wrong we know that code is
responsible and not some other variable.
Currently all tests (with a few exceptions which are disabled) are
passing. And it would be excellent if it stays like that!

What does that mean for developers?

**Use pull requests**
Whenever you open a pull request first you get the chance to test your
changes without making the nice green symbol on the front page go red.
You can push to these pull requests until the tests go green. For
reviewers this is also nice: you don't need to spend time on pull
requests that don't build or don't pass tests.

**Write tests**
If you implement a new feature or fix a bug, write a test for it. If
somebody breaks the test, the pull request or the symbol on the github
project page will turn red. This means that it's clear which commit
broke the test. But the test is your feature or your bugfix!

**Try to avoid rendering tests**
A big portion of fixing has been spent on rendering tests. The problem
with rendering tests is, that a lot of them have slight inconsistencies
across systems. Gradients, anti aliasing, fonts... This all may render
differently without being really a problem. But it produces a (false)
alarm on another system and one needs to take measures. There are such
measures: defining color intolerance, allowed pixel mismatches, known
anomalies, since last week also different reference pictures... But in
the end this means extra work and false alarms once in a while. We do
create a software that has visual products. Therefore rendering tests
are required. But think very about different possibilities before
writing such a test. Maybe you can extract the WKT from a geometry and
compare that against a known WKT string instead? That is less brittle,
faster to test and much easier to maintain than a rendering test!
If you really need to write a rendering test it is likely that it will
fail on travis in the beginning. To make it pass on travis, create a
pull request and wait for it to be tested. The results will be uploaded
to the OTB CDash [3] where you get information what exactly you need to
adjust. How many pixels failed? Visual comparison if adjusting the color
tolerance a bit may help. Is an anomaly ok? Is there a need to add
another reference picture?

**C++ vs. Python tests**
I made an earlier call for having only either one or the other. That was
based on misinterpretation of test results from my side. Sorry.
My current opinion is: do what you feel comfortable with. If you prefer
to write C++ tests, do so. If you prefer to write Python tests, do so.
If you want both, do so. The important thing is: DO IT!
If you really need advice: go for python tests, they test the same
functionality like C++ functions but also test the python API and
therefore cover a slightly bigger area.

Which tests are not fixed (on the reference platform)?

 * The atlas tests had interdependencies, that made some tests pass just
because the environment was ok from previous ones. These tests are now
changed to be independent one of another. And there is a PR that should
fix the issues and re-enable the test. [4]
 * The symbology tests fail due to problems with sld loading. There is a
pull request that partly reverts a commit that broke things and
re-enables the test. [5]
 * The server pal labeling tests produced very different rendering
results. I could imagine that they would be better off if the would also
use the QGIS test font? New reference images could also be introduced.
Dakota cartography's call.
 * The server canvas labeling tests crash on exit because of a
not-yet-ended thread. Multithreading issue? Something else?
 * Recently the WCS test started to fail. I guess the server it uses to
test does not always respond? We should either fix the server, disable
the test, increase the timeout...

Where to go from here?

There are two things I would like to see:

  Many more tests :)
  More platforms: Travis can also handle mac. We could ask them to
enable mac testing for us. But we'd first need to fix the tests there.
There is a service called appveyor that runs tests for windows. But we'd
first need to fix the tests there.

I am very happy that there was such a great interest in the crowdfunding
campaign that made it possible to do that work. THANK YOU to everybody
who helped to get the testing integration to the next level.

Matthias

[1] https://github.com/qgis/QGIS
[2] http://travis-ci.org/
[3] http://dash.orfeo-toolbox.org/index.php?project=QGIS

_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to