Python  testing
Upcoming SlideShare
Loading in...5

Python testing






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment
  • This template can be used as a starter file for presenting training materials in a group setting. <br /> Sections <br /> Right-click on a slide to add sections. Sections can help to organize your slides or facilitate collaboration between multiple authors. <br /> Notes <br /> Use the Notes section for delivery notes or to provide additional details for the audience. View these notes in Presentation View during your presentation. <br /> Keep in mind the font size (important for accessibility, visibility, videotaping, and online production) <br /> Coordinated colors <br /> Pay particular attention to the graphs, charts, and text boxes. <br /> Consider that attendees will print in black and white or grayscale. Run a test print to make sure your colors work when printed in pure black and white and grayscale. <br /> Graphics, tables, and graphs <br /> Keep it simple: If possible, use consistent, non-distracting styles and colors. <br /> Label all graphs and tables. <br />

Python  testing Python testing Presentation Transcript

  • PYTHON TESTING John Saturday, December 21, 2013
  • Type of testing • Unit testing: Unit testing is testing of the smallest possible pieces of a program. it's the foundation upon which everything else is based • Integration testing: tests encompass interactions between related units. • System testing: system tests are an extreme form of integration tests.
  • unittest introduction • the batteries-included test module standard library. • Similar usage as JUnit, nUnit, CppUnit series of tools.
  • Unittest package Import unittest From unittest import TestCase,main class two_failing_tests(TestCase): def test_assertTrue(self): self.assertTrue(1 == 1 + 1) def test_assertEqual(self): self.assertEqual(1, 1 + 1) if __name__ == '__main__': main()
  • Assert method • • • • assertTrue: will succeed if expression is true assertFalse: will succeed if expression is false assertEqual, assertNotEqual assertAlmostEqual: use this one compare comparing floating point numbers. For example 3==3.00 • assertNotAlmostEqual • assertRaises • Final one: fail
  • Doctest: the easiest Testing tool • Doctest will be the mainstay of your testing toolkit • doctest tests are written in plain text. • Doctest extracts the tests and ignores the rest of the text • So the tests can be embedded in humanreadable explanations or discussions.
  • creating and running your first doctest • Open a new text file in your editor, and name it test.txt. • Insert the following text into the file: This is a simple doctest that checks some of Python's arithmetic operations. >>> 2 + 2 4 >>> 3 * 3 10 • Run command: python -m doctest test.txt • Or you can write a small python code file: import doctest doctest.testfile(“test.txt") • You can simply add IDLE input and output as test here
  • Directives: • +SKIP to skip one test >>> 'This test would fail.' # doctest: +SKIP • +ELLIPSIS: can use … match any substring in the actual output func(56, "hello") # doctest: +ELLIPSIS <mocker.Mock object at ...> • More directives see here
  • Embedding doctests in Python docstrings def testable(x): r""" The `testable` function returns the square root of its parameter, or 3, whichever is larger. >>> testable(7) 3.0 >>> testable(16) 4.0 >>> testable(9) 3.0 >>> testable(10) == 10 ** 0.5 True """ if x < 9: return 3.0 return x ** 0.5 •Run command line: python ‑ m doctest ‑ v •If you want to run the test in code. Add cose like: if __name__ == "__main__": import doctest doctest.testmod()
  • Tips • Write your test before code development • reload(module) if your module is changed. reload array
  • Install mocker first • pip install mocker • Or python mocker • Or download it by yourself
  • What is Mock object? • Mock objects imitate the real objects that make up your program • So we can decouple the multiplication class from others
  • Step by step 1. Create the mocking context: mocker = Mocker(). 2. Create mocking object under this context: a = mocker.mock() 3. demonstrate how you expect the mock objects to be used : func(56, "hello") # doctest: +ELLIPSIS <mocker.Mock object at ...> >>> mocker.result(11) 4. Here we expect func(56,”hello”) will output 11
  • 6. Replay mode: mocker.replay(). Once enter this mode, the first time call func(56,”hello”). It will return 11 instead of call this func. 7. mocker.restore() : back the point not set mock. 8. mocker.verify(): check that the actual usage of the mocks was as expected. For example: check if func(56,”hello”) is 11
  • Function test
  • Parameter name in Mock • ANY: any single object.i.e.func(a) • ARGS: any more arguments. i.e. func(a,b) • KWARGS: any more keyword arguments i.e. func(a=1,b=2) • IS: func(7, IS(param)) # doctest: +ELLIPSIS • IN:func(7, IN([45, 68, 19])) # doctest: +ELLIPSIS
  • CONTAINS: if the list contain this vlaue >>> from mocker import Mocker, CONTAINS >>> mocker = Mocker() >>> func = mocker.mock() >>> func(7, CONTAINS(45)) # doctest: +ELLIPSIS <mocker.Mock object at ...> >>> mocker.result(5) >>> mocker.replay() >>> func(7, [12, 31, 45, 18]) 5 >>> mocker.restore() >>> mocker.verify()
  • MATCH: if match,it return true >>> from mocker import Mocker, MATCH >>> def is_odd(val): ... return val % 2 == 1 >>> mocker = Mocker() >>> func = mocker.mock() >>> func(7, MATCH(is_odd)) # doctest: +ELLIPSIS <mocker.Mock object at ...> >>> mocker.result(5) >>> mocker.replay() >>> func(7, 1001) 5 >>> mocker.restore() >>> mocker.verify()
  • mocker.count • Mocker.count to specify the expected number of repetitions • count(3): repeat 3 times • count(1,3): repeat times is between 1 and 3. • count(1,None): repeat at least 1 time, no maximum.
  • Package test • Use replace to temporarily replace the lib from time import time >>> from mocker import Mocker >>> mocker = Mocker() >>> mock_time = mocker.replace('time.time') >>> mock_time() # doctest: +ELLIPSIS <mocker.Mock object at ...> >>> mocker.result(1.3) >>> mocker.replay() >>> '%1.3g' % time() '1.3‘ >>> mocker.restore() >>> mocker.verify()
  • Class test • Let self be a mock object >>> from testable import testable >>> from mocker import Mocker >>> mocker = Mocker() >>> target = mocker.mock() >>> target.method1(12) # doctest: +ELLIPSIS <mocker.Mock object at ...> >>> mocker.result(5) >>> target.method2(12) # doctest: +ELLIPSIS <mocker.Mock object at ...> >>> mocker.result(7)
  • What is nose? • • • • A tool for finding and running all of your tests presents with a nice report after tests finish. Nose understands doctest and unittest tests Install nose from PYPI (use easy_install or pip) • After install it, run command line: nosetests
  • Recommendation how to organize the source code folder • Nose recognizes test files based on their names – Any file whose name contains test or Test contain unittest TestCases – Nose find doctest tests either embedded in docstrings or separate test files • Reorgnize your folder. Change to the dir. Run command line: nosetests --with-doctest --doctest-extension=txt -v
  • Options for nosetests • Create a configuration file called nose.cfg or .noserc in $HOME dir (For windows, the $HOME means C:Usersusers) • Place following inside it: [nosetests] with-doctest=1 doctest-extension=txt include="(?:^[Dd]oc)“ • Run nosetests –v.
  • Brief intro • twill allows users to browse the Web from a command-line interface. • twill supports automated Web testing • Twill has a simple Python interface. • Use pip install twill package first • Use command: twill-sh to start the shell
  • A simple example • Create slashdot.twill file contain code: code 200 follow Science code 200 formvalue 2 fhfilter "aardvark" submit code 200 find aardvark code 200 follow Science code 200 formvalue 2 fhfilter "aardvark" submit code 200 find aardvark • Run commandl line: twill-sh -u slashdot.twill
  • You can also test interactively • • • • >> go >> code 200 >> follow Science ….
  • Use twill in python Import twill browser = twill.get_browser() Browser methods include: go, reload,back,get_code,get_html,get_title,get_ur l,find_link,follow_link,set_agent_string,get_all_ forms,get_form,get_form_field,clicked,submit, save_cookies,load_cookies,clear_cookies
  • Code coverage • A code coverage keeps track of which lines of code are (and aren't) executed while tests are running • Give you a report describing how well your tests cover the whole body of code Attention: Code coverage is a tool to give you insight into what your tests are doing, and what they may be overlooking. It's not the definition of a good test suite.
  • 1. Install PYPI package coverage (pip install coverage) 2. When run your nose. Use option –withcoverage –-cover-erage 3. From the example, we saw line 16,19-20 of do not executes.
  • Automated continuous integration • automated continuous integration system compiles your code (if need be) and runs your tests many times, in many different environments. • Buildbot is a popular automated continuous integration tool.
  • Reference • Book << Python Testing:Beginner's Guide>>