美文网首页
Pytest_基础知识

Pytest_基础知识

作者: Gakki0725 | 来源:发表于2021-07-06 10:26 被阅读0次
    作者:Gakki

    01 Pytest 用例规则

    Pytest 可以在不同的函数、包中发现用例,发现的规则如下:

    • 文件名以 test_ 开头的 py 文件
    • 以 test_ 开头的函数
    • 以 Test 开头的类
    • 以 test_ 开头的方法
    • 注:所有的包必须要有 init.py 文件

    02 Pytest 运行方式

    1. 单独执行某一个 py 文件里所有的用例:
      pytest test_login.py

    2. 执行目录下所有的用例:
      pytest testcase/

    3. 单独执行某个用例

    以函数形式的用例
    pytest test_login.py::test_login
     
    以类形式的用例
    pytest test_login.py::TestClass::test_login
    

    03 setup 和 teardown 函数

    1. setup和teardown主要分为:模块级,类级,功能级,函数级。
    2. 存在于测试类内部

    函数级别:运行于测试方法的始末,即:运行一次测试函数会运行一次 setupteardown
    类级别:运行于测试类的始末,即:在一个测试内只运行一次 setup_classteardown_class ,不关心测试类内有多少个测试函数。

    04 装饰器之 Fixture

    Fixture 装饰器的用途:

    1. 做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用Fixture来实现。
    2. 测试用例的前置条件可以使用Fixture实现,比直接使用Pytest框架的setup()和teardown()函数更加灵活。
    3. Fixture是Pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制。
    4. Fixture可以实现Unittest不能实现的功能,比如:Unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是Fixture却可以解决这个问题。

    Fixture 参数说明:
    fixture(scope="function", params=None, autouse=False, ids=None, name=None):

    入参说明:

    • scope:表示被 @pytest.fixture() 装饰器所标识方法的作用域。作用域有四个级别,函数 function(默认) ,类 class ,模块 module ,包 package/session 。说明:function 作用域包含函数和方法。
    • params:一个可选的参数列表,用于做 Fixture 的参数化。可将数据提供给其他的 Fixture ,或者所有测试使用它 。
    • autouse:autouse=Ture 则开启自动使用 Fixture 功能,也是调用 Fixture 函数一种方法。Fixture 装饰器会自动执行作用域范围内的所有用例的前后置。autouse 默认值为 Flase 。
    • ids:一个字符串 id 的列表,即当使用params参数化时,给每一个值设置一个变量名。如果没有提供 ID , params 将自动生成 ID 。
    • name:表示给被 @pytest.fixture() 装饰器修饰的方法取一个别名,调用时可以使用别名调用。默认为装饰器所装饰的函数名称。
      注:Fixture装饰器既可以实现部分用例的前后置,也可以是现实全部用例的前后置。
    import pytest
    # 1.py
    @pytest.fixture(scope='module', autouse=True)
    def test1():
        print('\n开始执行module')
    @pytest.fixture(scope='class', autouse=True)
    def test2():
        print('\n开始执行class')
    @pytest.fixture(scope='function', autouse=True)
    def test3():
        print('\n开始执行function')
    def test_a():
        print('---用例a执行---')
    def test_d():
        print('---用例d执行---')
    class TestCase:
        def test_b(self):
            print('---用例b执行---')
        def test_c(self):
            print('---用例c执行---')
    if __name__ == '__main__':
        pytest.main(['-s', '1.py'])
    

    输出结果:

    collected 4 items
    
    1.py 
    开始执行module
    
    开始执行class
    
    开始执行function
    ---用例a执行---
    .
    开始执行class
    
    开始执行function
    ---用例d执行---
    .
    开始执行class
    
    开始执行function
    ---用例b执行---
    .
    开始执行function
    ---用例c执行---
    .
    
    ============================== 4 passed in 0.04s ==============================
    
    

    05 跳过(Skip)及预期失败(xFail)

    根据特定条件,不执行标识的测试函数。

    • 方法:
      skipif(condition, reason=None)
    • 参数:
      • condition:跳过的条件,必传参数
      • reason:标注原因,必传参数
    • 使用方法:
      @pytest.mark.skipif(condition, reason="xxx")

    跳过执行测试函数

    • pytest.mark.skip(reason=" ") 可传入一个非必须参数reason表示原因

    自定义@pytest.mark.skip()标签

    • skip_test = pytest.mark.skip() 或 myskip = pytest.mark.skipif(condition=...)
    • 装饰时用该变量代替标签即可:@skip_test

    标记为预期失败函数

    • 方法:
      xfail(condition=None, reason=None, raises=None, run=True, strict=False)
    • 常用参数:
      • condition:预期失败的条件,必传参数
      • reason:失败的原因,必传参数
    • 使用方法:
      • @pytest.mark.xfail(condition, reason="xx")

    使用xfail标记指示你希望测试失败。运行用例的时候,在失败时不会报告回溯。相反,终端报告会将其列在“预期失败”(XFAIL)或“意外传递”(XPASS)部分中。

    06 装饰器之 mark

    函数数据参数化,方便测试函数对测试数据的获取。

    • 方法:
      • parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
    • 常用参数:
      • argnames:参数名
      • argvalues:参数对应值,类型必须为list
        当参数为一个时格式:[value]
        当参数个数大于一个时,格式为:[(param_value1,param_value2.....), (param_value1,param_value2.....)]
    • 使用方法:
      • @pytest.mark.parametrize(argnames,argvalues),参数值为N个,测试方法就会运行N次

    07 pytest 参数

    • -K EXPRESSION:执行某个关键字的用例,用例要匹配给出的表达式;使用python的语法,匹配的范围是文件名、类名、函数名为变量,用and来区分。
    • --maxfail=num:当错误个数到达给定数时,退出测试,这里就不列举实例了,结果与-x类似。
    • -m MARKEXPR:只能运行有相应标识的测试用例,使用这个参数,测试用例要使用@pytest.mark.marker修饰。
    • -v:详细结果
    • -q:极简结果显示,简化控制台的输出
    • -s:输入我们用例中的调式信息,比如print的打印信息等
    • -V:可以输出用例更加详细的执行信息,比如用例所在的文件及用例名称等
    • --junit-xml=path:输出xml文件格式,在与jenkins做集成时使用
    • --result-log=path:将最后的结果保存到本地文件中

    相关文章

      网友评论

          本文标题:Pytest_基础知识

          本文链接:https://www.haomeiwen.com/subject/bmsmultx.html