# Mission

Testing is important to us as a community. The [Melange](MelangeIntro.md)
community strives to produce a framework that can be used to build useful
and reliable web applications to host programs like
[Google Summer of Code](GSoC.md)<sup>TM</sup>.  This desire drives our placement of
testing as an important part of contributing to the Melange project.
Testing is also an important complement to
[code reviews](ContributionReviews#Code_reviews.md).

## Human Testing

We _love_ to have testers visit, try things out and particularly report issues on the issue tracker.  It's fine to raise issues that might be most expediently solved by documentation.  They are still issues.  If you are reporting an issue, do check first that the issue hasn't already been reported.  This [search link](http://code.google.com/p/soc/issues/list?can=1&q=-status:Verified,Duplicate&sort=-id) will give you issues which have been fixed but perhaps not pushed to appspot yet, and it gives the most recently raised issues first.

## Load Testing

We have been doing some preliminary work on load testing Melange at appspot using this list of pages:

  * http://socghop.appspot.com/
  * http://socghop.appspot.com/program/home/google/gsoc2009
  * http://socghop.appspot.com/document/show/program/google/gsoc2009/mentoragmt
  * http://socghop.appspot.com/document/show/program/google/gsoc2009/studentagmt
  * http://socghop.appspot.com/document/show/program/google/gsoc2009/tos
  * http://socghop.appspot.com/document/show/program/google/gsoc2009/userdocs
  * http://socghop.appspot.com/org/list_public/google/gsoc2009
  * http://socghop.appspot.com/org/list_public/google/gsoc2009?limit_0=%s
  * http://socghop.appspot.com/org/list_public/google/gsoc2009?limit_0=%s&offset_0=%s

Earlier testing allowed us to make a change in how sidebars are handled, things look a lot better now.  We're currently not too worried about load.

## Automated Testing

The Melange project aspires to apply testing best-practices to the development
of the [SoC framework](SoCOverview.md), always working towards goals such as
higher release reliability and increasing test coverage.  Improving towards
these goals makes development methods such as
[continuous integration](http://www.martinfowler.com/articles/continuousIntegration.html)
possible.  To that end, contributors need to adhere to certain testing
guidelines.

While we feel that software testing is very important, the Melange community
does not want to refuse [patches](ContributionReviews#Patches.md) and other
contributions from casual developers.  To that end, we promise to make
the tests themselves
[reliable](TestingGuidelines#No_nondeterministic_tests.md) and
[easy to run](TestingGuidelines#Smoke_tests.md).  We want to encourage every
contributor to help us enhance the quality and reliability of the SoC
framework and the open source and free software contribution web sites
that is will power.

The SoC framework will define some test suites, including smoke tests and
golden tests.  At this point in time, this document is mostly a TODO list,
but it will evolve into the project testing guidelines as these wish list
items are implemented.

# Test suites

## Smoke tests

The SoC framework will include a set of "smoke tests" that are used as a
"first line of defense" before code contributions can be
[submitted for review by other contributors](ContributionReviews#Code_reviews.md).

As long as the "golden tests" do not take too long to run, they will be
included in the smoke test suite.  Once the smoke test suite becomes too
large, the more esoteric tests will be migrated to the golden test suite.

### Running the smoke tests

To run the smoke tests, run this command from the root of the SoC mercurial working
copy:

```
nosetests -v \
 trunk/scripts/tests
 # more test directories will be added to this example later
```

The `-v` (`--verbosity`) option shows specifically which tests are being run
and can be omitted.

These test modules are explicitly **not** executable scripts so that they can
use explicit relative references to "reach back" to the module to be tested
from the `tests/` sub-directory (which do not work if
`__name__ == '__main__'`).

## Golden Tests

The golden test suite are a proper superset of the shorter-to-build-and-run
[smoke test suite](TestingGuidelines#Smoke_tests.md) used as a precondtion for
patch code reviews (that is, all of the "smoke tests" are included in the
"golden tests" by definition).

For some time, the smoke test suite and the golden test suite are likely to
identical.  See the note in the
[smoke tests section](TestingGuidelines#Smoke_tests.md).

### Running the golden tests

Instructions for building and running the golden test suite will be added here.

# Policies

## Nontrivial changes need tests

Any non-trivial change requires an accompanying test, in the same patch as
the proposed change.  These guidelines need to be followed:

  * There should always be a test whenever adding new behavior or changing existing behavior in any way (and the test code should be in the same [patch](ContributionReviews#Patches.md) as the code change).
  * Refactorings do not require new tests, so long as the code being refactored is already covered by tests (and those tests pass after the refactoring). Refactorings should make no non-trivial changes to tests, since the tests are instrumental in validating that the refactoring did not break anything.
  * Emergency patches (perhaps quick fixes by the release packager) do not require tests immediately, but a test should be included in a new patch accompanying the follow-up [code review](ContributionReviews#Patches.md).
  * You need to add tests if changing a section of code that does not currently have them.

## All changes should pass smoke tests before review

All patches should pass the [smoke test suite](TestingGuidelines#Smoke_tests.md)
before being submitted for review.  So as not to waste other contributors'
time, please ensure that the smoke tests pass before requesting a code
review of a patch, and after any `svn update` or `svn merge` that might
change the code being
[reviewed in a development branch](ContributionReviews#Branches.md).

## Never reduce existing code coverage

Please make a habit of
[collecting code coverage information](TestingGuidelines#Code_test_coverage.md)
to determine if the new lines of code in a patch have test coverage
(though keep in mind that code coverage alone is not sufficient).  Code
reviewers and "lurkers" on the
[developer mailing list](MailingListsGuidelines#Developer_list.md)
should actively ask for tests to be included in each patch, in adherence
with the guidelines listed above.

## No official release if tests are failing

The SoC framework will not be officially released if the continuous build
indicates that any of the
["golden tests"](TestingGuidelines#Golden_tests.md) are failing.  (Before a
continuous build is up and running, this will be checked manually by having
the release packager run the test suites explicitly.)

## No non-deterministic tests

Please do not allow any non-deterministic tests to be added to the test
suites, and please fix any tests that are detected to be non-deterministic
by using mocks.  Non-deterministic tests are considered second priority only
to actual test failures.  This is because official releases are gated by
passing the [golden test suite](TestingGuidelines#Golden_tests.md), so that
suite needs to be trustworthy.  Eventually, official releases will be based
on a green-light build from the continuous build.  A test that later fails
represents a scenario that can also be a failure in in the release itself.

# User Acceptance Testing

Instructions for pre-release building and running of the sample Program
web applications and testing them manually (or with a tool like
[Selenium](http://selenium.openqa.org/)) for
[User Acceptance Testing (or UAT)](http://en.wikipedia.org/wiki/Acceptance_testing)
will be added here.

# Testing tools

## Continuous build

A medium-term goal is the ability to continuously build and test the `HEAD`
revision in `/trunk/` automatically.  Tools exist for setting up continuous
build and test processes and monitoring those processes.  At some point,
these will be deployed for the Melange project.

## Code test coverage

A long-term goal is the ability to acquire automated test coverage.  Tools
exist for measuring test coverage of Python code.  At some point, these will
be incorporated into a Melange continuous build.


---

_Copyright 2008 Google Inc._
_This work is licensed under a_
[Creative Commons Attribution 2.5 License](http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html).
[![](http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png)](http://creativecommons.org/licenses/by/2.5/)