当前位置: 首页 > 知识库问答 >
问题:

如何测试Python CLI程序与点击,coverage.py和毒性?

微生啸
2023-03-14

我正在使用click开发一个CLI程序,我想开始添加一些测试,使用coverage进行代码覆盖率分析。皮耶。

我认为实现测试的一个好方法是使用子流程运行CLI本身。但是,保险范围有限。py报告零代码覆盖率,可能是因为子流程生成的Python实例没有覆盖率。py仪器。

我找到了这个链接,上面写着我可以删除一个站点自定义。PYTHONPATH中的py文件始终强制Python启动覆盖率测量,但我使用Tox创建一个venv并运行测试。我找不到任何处理这个问题的毒素设置。

我发现这个答案说我应该通过覆盖率运行来运行我的CLI,但是看起来只有当给一个Python脚本的路径时才有效,我正试图通过<-plhd--0/>.我必须改变我所有的命令行在测试代码从myProgram覆盖运行myProgram/cli/cli.py。我宁愿不这样做,因为这不是我期望用户运行程序的方式。

因此,似乎有两种选择:

>

  • 想办法让sitecustomize.py在Tox环境中工作,或者

    测试代码中的所有命令行都使用脚本路径而不是入口点(从长远来看可能更容易,但会使测试更脆弱,更难理解)。不知道我还缺什么。

  • 共有1个答案

    法兴德
    2023-03-14

    CliRunner和一个合适的单元测试框架是应该走的路。下面是使用PyTest Coverage插件的PyTest示例设置

    from click.testing import CliRunner
    
    from click_prog import hello
    
    
    def test_hello_world():
    
        runner = CliRunner()
        result = runner.invoke(hello, ['--opt', 'An Option', 'An Arg'])
        assert result.exit_code == 0
        assert result.output == 'Opt: An Option  Arg: An Arg\n'
    
        result = runner.invoke(hello, ['An Arg'])
        assert result.exit_code == 0
        assert result.output == 'Opt: None  Arg: An Arg\n'
    
    
    if __name__ == '__main__':
        test_hello_world()
    
    import click
    import sys
    
    
    @click.command()
    @click.option('--opt')
    @click.argument('arg')
    def hello(arg, opt):
        """A Simple program"""
        click.echo('Opt: {}  Arg: {}'.format(opt, arg))
    
    
    if __name__ == '__main__':
        hello(sys.argv[1:])
    
    [pytest]
    
    # -- recommended but optional:
    # python_files = tests.py test_*.py *_tests.py
    
    ===================== test session starts =====================
    platform darwin -- Python 3.6.5, pytest-3.7.1, py-1.5.4, pluggy-0.7.1
    rootdir: /Users/strauch/dev/fix_windows, inifile: pytest.ini
    plugins: xdist-1.22.5, forked-0.2, cov-2.6.0
    collected 1 item
    
    test_click.py .                                         [100%]
    
    ---------- coverage: platform darwin, python 3.6.5-final-0 -----------
    Name             Stmts   Miss  Cover
    ------------------------------------
    click_prog.py        8      1    88%
    test_click.py       12      1    92%
    ------------------------------------
    TOTAL               20      2    90%
    
    
    ================== 1 passed in 0.07 seconds ===================
    
     类似资料:
    • 问题内容: 这是一段UI代码 当标签被嵌套在里面的标签。我需要在下拉列表中的第二个元素上。当我尝试使用id / uniqueattr 在标签上时,可单击下拉列表。 如何遍历嵌套在下面的标签并单击正确的项目? 问题答案: 这将在ID为“ order_unit_line_rate_806782_is_addenda_enabled”的选择中选择值为“ 1”的选项。 您也可以按索引或文本进行选择;请参阅

    • 这个工具比较简单,用easy_install安装的,非常顺利。由于python不需要编译链接,所以这个工具使用非常简单。coverage run [options] your_cmd [cmd options]。 假如原来的运行的命令是: fact_compare.py -d result 需要收集代码覆盖信息的话只需要这样运行 coverage run –branch fact_compare.

    • Summary "Clickjacking" (which is a subset of the "UI redressing") is a malicious technique that consists of deceiving a web user into interacting (in most cases by clicking) with something different t

    • 程序测试 测试属性 在测试函数前加上#[test]属性: #[test] fn it_works() { assert!(false); } 其中assert!宏接受一个参数,如果参数为false,它会导致panic!。 运行cargo test命令,可见该测试失败。如果要反转测试失败, 可以加上#[should_panic]属性: #[test] #[should_panic(expec

    • 使用下面命令启动服务器: mvn -PChatServer clean package exec:exec 其中项目中的 pom.xml 是配置了 9999 端口。你也可以通过下面的方法修改属性 mvn -PChatServer -Dport=1111 clean package exec:exec 下面是控制台的主要输出(删除了部分行) Listing 11.5 Compile and st

    • 问题内容: 我正在从事多个项目,我们正在使用Java,Springs,Maven和Jenkins进行CI,但是我遇到了一些程序员没有在项目中添加真正的junit测试用例的问题。我希望maven和jenkins在部署到服务器之前先运行测试。一些程序员进行了空白测试,因此它可以启动和停止,并通过测试。 有人可以告诉我如何自动执行此检查,以便maven和jenkins可以查看测试是否输出了一些结果。 问