• 【pytest】2.运行方法&参数


    1、选择测试用例的方法

    1、执行某一个py文件下用例

    pytest test_mod.py
    

    2、执行某个目录下所有的用例

    pytest testing/
    

    3、按关键字表达式运行测试

    pytest -k "MyClass and not method"
    # and not:表达式,不经过测试。运行TestMyClass.test_something不运行TestMyClass.test_method_simple
    

    这种方式会执行【文件名,类名以及函数名】与【给定的字符串表达式】匹配的测试用例。表达式:支持Python运算符(and和or)操作。

    4、按节点id执行测试

    每个被选中的测试用例都会被分配一个唯一的 nodeid ,它由模块文件名和说明符(类名、函数名和参数)组成,用 :: 分隔。

    运行.py模块里面的某个函数:

    pytest test_mod.py::test_func
    

    运行.py模块里面,测试类里的某个方法:

    pytest test_mod.py::TestClass::test_method
    

    5、通过标记(Mark)表达式运行测试

    pytest -m slow  # 运行用@pytest.mark.slow装饰器修饰的所有测试
    

    6.通过包来运行

    pytest --pyargs pkg.testing   # 导入pkg.testing,并且基于该包所在为止来查找并运行测试用例
    

    2、测试失败后停止测试

    pytest ‐x  # 第一次测试失败后停止测试
    pytest ‐‐maxfail=2  # 第2次测试失败后停止测试
    

    3、pycharm运行三种方式

    1.以xx.py脚本方式直接执行,当代码里没用到unittest和pytest框架时,且脚本名称不是以test_开头命名的,此时pycharm会以xx.py脚本方式运行;

    2.当脚本命名为test_xx.py,用到unittest时,pycharm会自动识别为Run 'Unittests in test_xx.py',以unittest运行

    3.以pytest方式运行,需更改工程设置默认的运行器:file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择py.test。设置成功后,pycharm会自动识别为Run 'py.test in test_xx.py'

    注意:pytest是可以兼容unittest脚本的,之前写的unittest用例也能用pytest框架去运行

    4、在Python代码中调用pytest

    直接调用pytest:

    import pytest  # 写pytest用例,先导入pytest
    def test_main():
        assert 5 != 5
    if __name__ == '__main__':
        pytest.main()  # 就像从命令行调用pytest。它不会抛出SystemExit异常,但会返回exitcode
    

    可以传入选项和参数,如:

    import pytest
    def test_main():
        assert 5 != 5
    if __name__ == '__main__':
    	pytest.main('-q test_class.py')  # 显示简单结果。
    	# 运行结果有warnings,因为参数需要传list。pytest.main(['-q', 'test_class.py']),就不会有警告了
    

    注意:调用pytest.main()会导入你的测试用例及其引用的其他模块。因为python存在模块导入的缓存机制,如果多次调用pytest.main(),后面的调用将不会刷新这些导入的资源。因此,不建议在同一进程中多次调用pytest.main()(如重新运行测试)。

    5、用例运行级别

    学过unittest的都知道,setup和teardown非常好用,可以在每次用例开始前和结束后都去执行一次。还有更高级一点的setupClass和teardownClass,需配合@classmethod装饰器一起使用。在做selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。

    pytest框架也有类似于setup和teardown的语法,且不止这几个:

    • setup_module()/teardown_module(),开始于模块始末,全局的
    • setup_function()/teardown_function(),只对函数用例生效(不在类中)
    • setup_class()/teardown_class(),只在类中前后运行一次(在类中)
    • setup_method()/teardown_method(),开始于方法始末(在类中)
    • setup()/teardown(),运行在调用方法的前后

    注意:setup_method和teardown_method的功能和setup/teardown功能是一样的,一般二者用其中一个即可

    6、pytest执行用例命令行参数

    1.-v:pytest -v:可以输出更加详细的用例执行信息,如用例所在的文件及用例名称等

    2.-s:pytest -s:输出用例中的调式信息,比如print的打印信息等

    3.-m:pytest -m ”标记“:执行被标记的测试用例。

    4.-k:pytest -k "关键字":执行名称包含“关键字”的用例

    5.-q:pytest -q:简化控制台的输出,如用两个..点代替了pass结果

    6.--collect-only:罗列出所有当前目录下所有的测试模块,测试类及测试函数

    7.--tb=style:屏蔽用例执行输出的回溯信息,可简化用例失败时的输出信息。style可以是 on,line,short

    8.--lf:用例执行完成后,如果其中存在失败的测试用例,可使用此命令重新运行失败的测试用例

    9.--ff:上次测试出现失败的用例,使用--ff后,失败的测试用例会先执行,剩余的用例也会再次执行一次

    7、输出测试报告的参数

    -r参数 :可以用来在测试结束后展示一份“测试概要信息”,从而获取一份清楚的包含失败、跳过、标记失败(xfails)的测试结果(失败,跳过等测试信息)。

    -r后可以追加一些参数,参数列表如下:

    f - failed:失败的用例
    E - error:出错的用例
    s - skipped:跳过的用例
    x - xfailed:标记失败的用例
    X - xpassed:标记成功的用例
    p - passed:成功用例
    P - passed with output:成功用例并输出信息
    a - all except pP:所有pP状态以外的用例

  • 相关阅读:
    poj3294 Life Forms(后缀数组)
    1628. White Streaks(STL)
    1523. K-inversions(K逆序对)
    1890. Money out of Thin Air(线段树 dfs转换区间)
    1350. Canteen(map)
    1521. War Games 2(线段树解约瑟夫)
    1003. Parity(并查集)
    1470. UFOs(三维树状数组)
    1471. Tree(LCA)
    1494. Monobilliards(栈)
  • 原文地址:https://www.cnblogs.com/mind18/p/15621182.html
Copyright © 2020-2023  润新知