whatf
whatf

Reputation: 6458

Difference between django-webtest and selenium

I have been reading about testing in django. One thing that was recommended was use of django-webtest for functional testing. I found a decent article here that teaches how to go about functional testing in selenium using python. But people have also recommended Ian Bicking's WebTest's extension djagno-webtest to use for testing forms in django. How is testing with webtest and testing with selenium different in context of django forms?

So from functional testing point of view:

How does django-webtest and selenium go side by side?

Do we need to have both of them or any one would do?

Upvotes: 13

Views: 2991

Answers (2)

idanzalz
idanzalz

Reputation: 1760

The key difference is that selenium runs an actual browser, while WebTest hooks to the WSGI. This results in the following differences:

  • You can't test JS code with WebTest, since there is nothing to run it.
  • WebTest is much faster since it hooks to the WSGI, this also means a smaller memory footprint
  • WebTest does not require to actually run the server on a port so it's a bit easier to parallize
  • WebTest does not check different problems that occur with actual browsers, like specific browser version bugs (cough.. internet explorer.. cough..)

Bottom line: PREFER to use WebTest, unless you MUST use Selenium for things that can't be tested with WebTest.

Upvotes: 25

JoshMock
JoshMock

Reputation: 1301

The important thing to know about Selenium is that it's primarily built to be a server-agnostic testing framework. It doesn't matter what framework or server-side implementation is used to create the front-end as long as it behaves as expected. Also, while you can (and when possible you probably should) write tests manually in Selenium, many tests are recorded macros of someone going through the motions that are then turned into code automatically.

On the other hand, django-webtest is built to work specifically on Django websites. It's actually a Django-specific extension to WebTest, which is not Django-only, but WSGI-only (and therefore Python-only). Because of that, it can interact with the application with a higher level of awareness of how things work on the server. This can make running tests faster and can also makes it easy to write more granular, detailed tests. Also, unlike Selenium, your tests can't be automatically written as recorded macros.

Otherwise, the two tools have generally the same purpose and are intended to test the same kinds of things. That said, I would suggest picking one rather than using both.

Upvotes: 12

Related Questions