Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: third_party/coverage-3.6/doc/cmd.rst

Issue 14988009: First cut of testing infrastructure for recipes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: nitfixen Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/coverage-3.6/doc/changes.rst ('k') | third_party/coverage-3.6/doc/config.rst » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 .. _cmd:
2
3 ===========================
4 Coverage command line usage
5 ===========================
6
7 :history: 20090524T134300, brand new docs.
8 :history: 20090613T164000, final touches for 3.0
9 :history: 20090913T084400, new command line syntax
10 :history: 20091004T170700, changes for 3.1
11 :history: 20091127T200700, changes for 3.2
12 :history: 20100223T200600, changes for 3.3
13 :history: 20100725T211700, updated for 3.4
14 :history: 20110827T212500, updated for 3.5.1, combining aliases
15 :history: 20120119T075600, Added some clarification from George Paci
16 :history: 20120504T091800, Added info about execution warnings, and 3.5.2 stuff.
17 :history: 20120807T211600, Clarified the combine rules.
18 :history: 20121003T074600, Fixed an option reference, https://bitbucket.org/ned/ coveragepy/issue/200/documentation-mentions-output-xml-instead
19 :history: 20121117T091000, Added command aliases.
20
21 .. highlight:: console
22
23
24 When you install coverage.py, a command-line script simply called ``coverage``
25 is placed in your Python scripts directory. To help with multi-version
26 installs, it will also create either a ``coverage2`` or ``coverage3`` alias,
27 and a ``coverage-X.Y`` alias, depending on the version of Python you're using.
28 For example, when installing on Python 2.7, you will be able to use
29 ``coverage``, ``coverage2``, or ``coverage-2.7`` on the command line.
30
31 Coverage has a number of commands which determine the action performed:
32
33 * **run** -- Run a Python program and collect execution data.
34
35 * **report** -- Report coverage results.
36
37 * **html** -- Produce annotated HTML listings with coverage results.
38
39 * **xml** -- Produce an XML report with coverage results.
40
41 * **annotate** -- Annotate source files with coverage results.
42
43 * **erase** -- Erase previously collected coverage data.
44
45 * **combine** -- Combine together a number of data files.
46
47 * **debug** -- Get diagnostic information.
48
49 Help is available with the **help** command, or with the ``--help`` switch on
50 any other command::
51
52 $ coverage help
53 $ coverage help run
54 $ coverage run --help
55
56 Version information for coverage.py can be displayed with
57 ``coverage --version``.
58
59 Any command can use a configuration file by specifying it with the
60 ``--rcfile=FILE`` command-line switch. Any option you can set on the command
61 line can also be set in the configuration file. This can be a better way to
62 control coverage.py since the configuration file can be checked into source
63 control, and can provide options that other invocation techniques (like test
64 runner plugins) may not offer. See :ref:`config` for more details.
65
66
67 .. _cmd_execution:
68
69 Execution
70 ---------
71
72 You collect execution data by running your Python program with the **run**
73 command::
74
75 $ coverage run my_program.py arg1 arg2
76 blah blah ..your program's output.. blah blah
77
78 Your program runs just as if it had been invoked with the Python command line.
79 Arguments after your file name are passed to your program as usual in
80 ``sys.argv``. Rather than providing a filename, you can use the ``-m`` switch
81 and specify an importable module name instead, just as you can with the
82 Python ``-m`` switch::
83
84 $ coverage run -m packagename.modulename arg1 arg2
85 blah blah ..your program's output.. blah blah
86
87 If you want :ref:`branch coverage <branch>` measurement, use the ``--branch``
88 flag. Otherwise only statement coverage is measured.
89
90 You can specify the code to measure with the ``--source``, ``--include``, and
91 ``--omit`` switches. See :ref:`Specifying source files <source_execution>` for
92 details of their interpretation. Remember to put options for run after "run",
93 but before the program invocation::
94
95 $ coverage run --source=dir1,dir2 my_program.py arg1 arg2
96 $ coverage run --source=dir1,dir2 -m packagename.modulename arg1 arg2
97
98 By default, coverage does not measure code installed with the Python
99 interpreter, for example, the standard library. If you want to measure that
100 code as well as your own, add the ``-L`` flag.
101
102 If your coverage results seem to be overlooking code that you know has been
103 executed, try running coverage again with the ``--timid`` flag. This uses a
104 simpler but slower trace method. Projects that use DecoratorTools, including
105 TurboGears, will need to use ``--timid`` to get correct results. This option
106 can also be enabled by setting the environment variable COVERAGE_OPTIONS to
107 ``--timid``.
108
109 If you are measuring coverage in a multi-process program, or across a number of
110 machines, you'll want the ``--parallel-mode`` switch to keep the data separate
111 during measurement. See :ref:`cmd_combining` below.
112
113 During execution, coverage.py may warn you about conditions it detects that
114 could affect the measurement process. The possible warnings include:
115
116 * "Trace function changed, measurement is likely wrong: XXX"
117
118 Coverage measurement depends on a Python setting called the trace function.
119 Other Python code in your product might change that function, which will
120 disrupt coverage.py's measurement. This warning indicate that has happened.
121 The XXX in the message is the new trace function value, which might provide
122 a clue to the cause.
123
124 * "Module XXX has no Python source"
125
126 You asked coverage.py to measure module XXX, but once it was imported, it
127 turned out not to have a corresponding .py file. Without a .py file,
128 coverage.py can't report on missing lines.
129
130 * "Module XXX was never imported"
131
132 You asked coverage.py to measure module XXX, but it was never imported by
133 your program.
134
135 * "No data was collected"
136
137 Coverage.py ran your program, but didn't measure any lines as executed.
138 This could be because you asked to measure only modules that never ran,
139 or for other reasons.
140
141
142
143 .. _cmd_datafile:
144
145 Data file
146 ---------
147
148 Coverage collects execution data in a file called ".coverage". If need be, you
149 can set a new file name with the COVERAGE_FILE environment variable.
150
151 By default,each run of your program starts with an empty data set. If you need
152 to run your program multiple times to get complete data (for example, because
153 you need to supply disjoint options), you can accumulate data across runs with
154 the ``-a`` flag on the **run** command.
155
156 To erase the collected data, use the **erase** command::
157
158 $ coverage erase
159
160
161 .. _cmd_combining:
162
163 Combining data files
164 --------------------
165
166 If you need to collect coverage data from different machines or processes,
167 coverage can combine multiple files into one for reporting. Use the ``-p`` flag
168 during execution to append distinguishing information to the .coverage data
169 file name.
170
171 Once you have created a number of these files, you can copy them all to a single
172 directory, and use the **combine** command to combine them into one .coverage
173 data file::
174
175 $ coverage combine
176
177 If the different machines run your code from different places in their file
178 systems, coverage won't know how to combine the data. You can tell coverage
179 how the different locations correlate with a ``[paths]`` section in your
180 configuration file. See :ref:`config_paths` for details.
181
182 If you are collecting and renaming your own data files, you'll need to name
183 them properly for **combine** to find them. It looks for files named after
184 the data file (defaulting to ".coverage", overridable with COVERAGE_FILE), with
185 a dotted suffix. All such files in the current directory will be combined.
186 Here are some examples of combinable data files::
187
188 .coverage.machine1
189 .coverage.20120807T212300
190 .coverage.last_good_run.ok
191
192
193 .. _cmd_reporting:
194
195 Reporting
196 ---------
197
198 Coverage provides a few styles of reporting, with the **report**, **html**,
199 **annotate**, and **xml** commands. They share a number of common options.
200
201 The command-line arguments are module or file names to report on, if you'd like
202 to report on a subset of the data collected.
203
204 The ``--include`` and ``--omit`` flags specify lists of filename patterns. They
205 control which files to report on, and are described in more detail
206 in :ref:`source`.
207
208 The ``-i`` or ``--ignore-errors`` switch tells coverage.py to ignore problems
209 encountered trying to find source files to report on. This can be useful if
210 some files are missing, or if your Python execution is tricky enough that file
211 names are synthesized without real source files.
212
213 If you provide a ``--fail-under`` value, the total percentage covered will be
214 compared to that value. If it is less, the command will exit with a status
215 code of 2, indicating that the total coverage was less than your target. This
216 can be used as part of a pass/fail condition, for example in a continuous
217 integration server. This option isn't available for **annotate**.
218
219
220 .. _cmd_summary:
221
222 Coverage summary
223 ----------------
224
225 The simplest reporting is a textual summary produced with **report**::
226
227 $ coverage report
228 Name Stmts Miss Cover
229 ---------------------------------------------
230 my_program 20 4 80%
231 my_module 15 2 86%
232 my_other_module 56 6 89%
233 ---------------------------------------------
234 TOTAL 91 12 87%
235
236 For each module executed, the report shows the count of executable statements,
237 the number of those statements missed, and the resulting coverage, expressed
238 as a percentage.
239
240 The ``-m`` flag also shows the line numbers of missing statements::
241
242 $ coverage report -m
243 Name Stmts Miss Cover Missing
244 -------------------------------------------------------
245 my_program 20 4 80% 33-35, 39
246 my_module 15 2 86% 8, 12
247 my_other_module 56 6 89% 17-23
248 -------------------------------------------------------
249 TOTAL 91 12 87%
250
251 You can restrict the report to only certain files by naming them on the
252 command line::
253
254 $ coverage report -m my_program.py my_other_module.py
255 Name Stmts Miss Cover Missing
256 -------------------------------------------------------
257 my_program 20 4 80% 33-35, 39
258 my_other_module 56 6 89% 17-23
259 -------------------------------------------------------
260 TOTAL 76 10 87%
261
262 Other common reporting options are described above in :ref:`cmd_reporting`.
263
264
265 .. _cmd_html:
266
267 HTML annotation
268 ---------------
269
270 Coverage can annotate your source code for which lines were executed
271 and which were not. The **html** command creates an HTML report similar to the
272 **report** summary, but as an HTML file. Each module name links to the source
273 file decorated to show the status of each line.
274
275 Here's a `sample report`__.
276
277 __ /code/coverage/sample_html/index.html
278
279 Lines are highlighted green for executed, red for missing, and gray for
280 excluded. The counts at the top of the file are buttons to turn on and off
281 the highlighting.
282
283 A number of keyboard shortcuts are available for navigating the report.
284 Click the keyboard icon in the upper right to see the complete list.
285
286 The title of the report can be set with the ``title`` setting in the
287 ``[html]`` section of the configuration file, or the ``--title`` switch on
288 the command line.
289
290 If you prefer a different style for your HTML report, you can provide your
291 own CSS file to apply, by specifying a CSS file in the ``[html]`` section of
292 the configuration file. See :ref:`config_html` for details.
293
294 The ``-d`` argument specifies an output directory, defaulting to "htmlcov"::
295
296 $ coverage html -d coverage_html
297
298 Other common reporting options are described above in :ref:`cmd_reporting`.
299
300 Generating the HTML report can be time-consuming. Stored with the HTML report
301 is a data file that is used to speed up reporting the next time. If you
302 generate a new report into the same directory, coverage.py will skip
303 generating unchanged pages, making the process faster.
304
305
306 .. _cmd_annotation:
307
308 Text annotation
309 ---------------
310
311 The **annotate** command produces a text annotation of your source code. With a
312 ``-d`` argument specifying an output directory, each Python file becomes a text
313 file in that directory. Without ``-d``, the files are written into the same
314 directories as the original Python files.
315
316 Coverage status for each line of source is indicated with a character prefix::
317
318 > executed
319 ! missing (not executed)
320 - excluded
321
322 For example::
323
324 # A simple function, never called with x==1
325
326 > def h(x):
327 """Silly function."""
328 - if 0: #pragma: no cover
329 - pass
330 > if x == 1:
331 ! a = 1
332 > else:
333 > a = 2
334
335 Other common reporting options are described above in :ref:`cmd_reporting`.
336
337
338 .. _cmd_xml:
339
340 XML reporting
341 -------------
342
343 The **xml** command writes coverage data to a "coverage.xml" file in a format
344 compatible with `Cobertura`_.
345
346 .. _Cobertura: http://cobertura.sourceforge.net
347
348 You can specify the name of the output file with the ``-o`` switch.
349
350 Other common reporting options are described above in :ref:`cmd_reporting`.
351
352
353 .. _cmd_debug:
354
355 Diagnostics
356 -----------
357
358 The **debug** command shows internal information to help diagnose problems.
359 If you are reporting a bug about coverage.py, including the output of this
360 command can often help::
361
362 $ coverage debug sys > please_attach_to_bug_report.txt
363
364 Two types of information are available: ``sys`` to show system configuration,
365 and ``data`` to show a summary of the collected coverage data.
OLDNEW
« no previous file with comments | « third_party/coverage-3.6/doc/changes.rst ('k') | third_party/coverage-3.6/doc/config.rst » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698