如何用Sphinx autodoc为带pytest.mark标记的类生成自动文档
问题根因
Sphinx autodoc无法正常识别被pytest mark装饰的类,核心原因是pytest的装饰器默认会修改被装饰对象的__module__、__name__等元属性,导致autodoc无法通过配置的模块路径匹配到原始类的定义,也就无法提取类的成员、文档字符串等信息。
另外你之前尝试单独导出方法的写法有误,automethod指令不需要传入参数列表,仅需传入方法的完整路径即可。
可行解决方案
方案1:给pytest装饰器添加
keep_original=True参数
pytest 6.0及以上版本的parametrize装饰器支持该参数,会保留原始类的所有元属性,无需改动其他Sphinx配置,修改后的类装饰器写法如下:@pytest.mark.parametrize('app_lang', MobileAppLanguageMark.all(), scope='session', keep_original=True) class MobileBaseCase(BaseCase):配置完成后重新执行
make html命令即可正常生成类的所有文档内容。方案2:手动指定类的模块路径
如果你使用的pytest版本不支持keep_original参数,可以在类定义内部手动指定__module__属性为类所在的完整模块路径,示例如下:@pytest.mark.parametrize('app_lang', MobileAppLanguageMark.all(), scope='session') class MobileBaseCase(BaseCase): __module__ = 'plugin.lib.mobile.common.mobile_base_case' def foo(self, a, b): """ assadasdasda """ return a,b方案3:修正automethod指令写法
如果你需要单独导出类的某个方法,不要在路径后添加参数列表,正确写法如下:.. automethod:: plugin.lib.mobile.common.mobile_base_case.MobileBaseCase.foo
内容的提问来源于stack exchange,提问作者Ciszko
相关产品推荐
相关产品推荐

