python代码测试并自动生成文档

Tips:两大工具:doctest--单元测试、Sphinx--自动生成文档

1.doctest

doctest是python自带的一个模块。doctest有两种使用方式:一种是嵌入到python源码中,另外一种是放到一个独立文件。

1.1 嵌入源码

新建test.py

import doctest
'''
'>>>' 开头的行就是doctest测试用例。
不带 '>>>' 的行就是测试用例的输出。
如果实际运行的结果与期望的结果不一致,就标记为测试失败。
'''
def multiply(a, b):
"""
>>> multiply(3, 2)
6
>>> multiply('a', 3)
'aaa'
"""
return a * b
if __name__=='__main__':
doctest.testmod(verbose=True)
# verbose=True即强制使用详细模式:不管执行如何均输出详细信息,
# 若verbose=False则只输出测试结果不符合的信息

执行结果为:

Trying:
multiply(3, 2)
Expecting:
6
ok
Trying:
multiply('a', 3)
Expecting:
'aaa'
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.multiply
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

如果__main__函数有其他用途,不方便调用doctest.testmod()方法,那么可以用另外一种执行测试的方法,在cmd中输入:python -m doctest test.py或者python -m doctest -v test.py

其中-m表示引用一个模块,-v等价于verbose=True。运行输出与上面基本一样。

1.2 独立使用

新建一个save.txt文件来保存测试用例。

将test.py中的doctest内容拷贝出来放到save.txt文件里,注意save.txt要放在与test.py相同的目录中

下面是save.txt的内容:

>>> from test import multiply
>>> multiply(3, 2)
6
>>> multiply('a', 3)
'aaa'

打开cmd,切换到py文件路径,输入python -m doctest save.txt或者python -m doctest -v save.txt

可以得到和1.1节中相同的输出结果。

Tips:个人建议使用1.2节中的方法。

2.Sphinx

首先,python不自带Sphinx,需要用pip install sphinx安装(anaconda已经预装)

新建项目sphinx_demo,sphinx_demo/src放项目代码test.py,sphinx_demo/doc放sphinx最终自动生成的文档

2.1 reStructuredText风格

reStructuredText风格是pycharm默认注释风格

# -*- coding: utf-8 -*-
class divide_class:
'''reStructuredText风格:用冒号分隔,PyCharm默认风格 :arg dividend: 被除数 :type dividend: int ''' def __init__(self, dividend, name='ReStructuredTextStyle'):
self.dividend = dividend
self.name = name def divide(self, divisor):
'''除法 reStructuredText风格的函数,类型主要有param、type、return、rtype、exception :param divisor: 除数 :type divisor: int :returns: 除法结果 :rtype: :obj:`int` or :obj:`str` :exception TypeError: the type of divisor isn't int >>> reStructredText = ReStructuredTextStyle(dividend=10)
>>> reStructredText.divide(5)
2 '''
try:
if isinstance(divisor, int):
return self.dividend / divisor
else:
raise TypeError("Error!The type of divisor isn't int!")
except TypeError as e:
return e

2.2 Google

Google注释风格是影响力最大的一个,而且十分简洁。

# -*- coding: utf-8 -*-

class divide_class:
'''Google注释风格:用 ``缩进`` 分隔,适用于倾向水平,短而简单的文档 Attributes:
dividend (int or float): 被除数 ''' def __init__(self, dividend):
self.dividend = dividend def divide(self, divisor):
'''除法
Google注释风格的函数,类型主要有Args、Returns、Raises、Examples Args:
divisor (int):除数 Returns:
除法结果 Raises:
ZeroDivisionError: division by zero Examples:
>>> google = GoogleStyle(divisor=10)
>>> google.divide(5)
2 References:
除法_百度百科 https://baike.baidu.com/item/%E9%99%A4%E6%B3%95/6280598 '''
try:
return self.dividend / divisor
except ZeroDivisionError as e:
return e

在命令行cd到sphinx_demo/doc,执行命令sphinx-quickstart,设置结构分离、项目名、作者名、版本号、语言

> Separate source and build directories (y/n) [n]: y
> Project name: sphinx_demo
> Author name(s): XerCis
> Project release []: 1.0
> Project language [en]: zh_CN 或 回车默认英文

在doc/source/conf.py指定项目代码路径sphinx_demo/src,并修改扩展extensions

import os
import sys
sys.path.insert(0, os.path.abspath('../../src')) extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.doctest',
'sphinx.ext.intersphinx',
'sphinx.ext.todo',
'sphinx.ext.coverage',
'sphinx.ext.mathjax',
]

执行生成API文档命令sphinx-apidoc -o source ../src/,再用make html(linux)或者.\make html(windows)生成网页文件,打开doc/build/html/index.html即可看到文档

使用doctest代码测试和Sphinx自动生成文档的更多相关文章

  1. eoLinker 新功能发布,增加了识别代码注释自动生成文档功能

    产品地址:https://www.eolinker.com开源代码:https://www.eolinker.com/#/os/download在线生成代码注释工具:http://tool.eolin ...

  2. 【Sphinx】 为Python自动生成文档

    sphinx 前言 Sphinx是一个可以用于Python的自动文档生成工具,可以自动的把docstring转换为文档,并支持多种输出格式包括html,latex,pdf等 开始 建一个存放文档的do ...

  3. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  4. 使用swagger在netcorewebapi项目中自动生成文档

    一.背景 随着前后端分离模式大行其道,我们需要将后端接口撰写成文档提供给前端,前端可以查看我们的接口,并测试,提高我们的开发效率,减少无效的沟通.在此情况下,通过代码自动生成文档,这种需求应运而生,s ...

  5. MVC WEB api 自动生成文档

    最近在一直在用webapi做接口给移动端用.但是让我纠结的时候每次新加接口或者改动接口的时候,就需要重新修改文档这让我很是苦恼.无意中发现.webapi居然有自动生成文档的功能....真是看见了救星啊 ...

  6. SpringBoot 集成Swagger2自动生成文档和导出成静态文件

    目录 1. 简介 2. 集成Swagger2 2.1 导入Swagger库 2.2 配置Swagger基本信息 2.3 使用Swagger注解 2.4 文档效果图 3. 常用注解介绍 4. Swagg ...

  7. 使用Sphinx为你的python模块自动生成文档

    Sphinx是一个可以用于Python的自动文档生成工具,可以自动的把docstring转换为文档,并支持多种输出格式包括html,latex,pdf等. 安装 创建一个sphinx项目 下面的命令会 ...

  8. linux c/c++ 代码使用 doxygen 自动生成文档

    www.doxygen.org 的使用非常方便,下面分成2步介绍一下 1. 注释风格,需要在c/c++代码中按照下面的风格添加注释,基本上还是很顺手的 C++的注释风格 主要使用下面这种样式:即在注释 ...

  9. 用doxygen自动生成文档

    1. 添加符合doxygen解析规则的注释 (比如函数说明,函数参数/返回值说明) 用qt-creator可以在函数上方一行键入“/**”,然后直接回车,就可以自动生成默认的格式. 2. 安装doxy ...

随机推荐

  1. Linux安装JDK并配置环境变量

    Linux - 安装jdk并配置环境变量 1. 前往JDK官网, 地址:https://www.oracle.com/java/technologies/downloads/   复制下载链接 2.  ...

  2. linux 3.10 一个扇区异常可能引发的hung

    最近遇到一例3.10内核的crash: [ 4109.682163] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" d ...

  3. 在vue项目中使用UEditor--plus

    1:UEditor-plus富文本编辑器如何在vue项目中使用 备注:UEditor是由百度web前端研发部开发的所见即所得的开源富文本编辑器,由于该项目不在维护:程序员自发对其进行了维护,详见 ht ...

  4. JWT漏洞学习

    JWT漏洞学习 什么是JWT? JWT是JSON Web Token的缩写,它是一串带有声明信息的字符串,由服务端使用加密算法对信息签名,以保证其完整性和不可伪造性.Token里可以包含所有必要的信息 ...

  5. 【JDBC】学习路径2-编写第一个JDBC程序

    第一章:导入jar包 在未安装MySQL数据库的请务必安装,安装教程:[MySQL]从入门到掌握2-下载安装 connector/J下载地址:https://dev.mysql.com/downloa ...

  6. sql报错收集

    踩坑记录: 当出现如下错误 Not enough parameters for the SQL statement 多半是因为插入时填写的字段名有误 json.decoder.JSONDecodeEr ...

  7. ubuntu安装BricsCAD

    目录 目录 下载软件包 安装deb软件包 sudo dpkg -i *.deb 将Crack/bricsys.lic中hostid= <YOURHOSTID>替代本机MAC地址(中间不要冒 ...

  8. Zookeeper及基于Zookeeper的分布式锁总结

    1. Zookeeper ZooKeeper 内部存储的数据结构 / +-- node1 +-- node2 | +-- sub_node21 -> "I am sub_node21& ...

  9. TFT-eSPI入门使用教程

    一.准备资料 开发板:ESP32-S3 屏驱动是:ST7789_DRIVER 开发环境:VS Code + PlatformIO 注意:以上是我使用的环境,不一定需要和是使用的东西一样,这里主要是学习 ...

  10. 0.web理解

    web前后端 网站的前端:通过用户肉眼看到的网站的布局内容,对网站的操作的功能,可以让用户可以直接接触与操作的部分. 用户通过访问前端的功能,前端分为 静态功能+动态功能 静态功能:静态功能则不会和后 ...