pytest基本使用

一.pytest安装

pip install pytest:安装

pip install pytest==version:指定版本安装

pytest --version:查看版本

pip install -u pytest:更新

pip install pytest-html:安装html报告插件

pytest --html=url:生成html报告

二.定义文件,类,函数规范

1.定函数时,函数名字前加个test_,如:def test_one:  print "xxxxx"

2.定义class的时候Test...,以Test开头,如:Testclasee

3.定义.py文件的时候以test_开头,如:test_case

三.pytest常用参数

pytest -h:查看帮助

pytest --collect-only package名:收集要运行文件中的哪些函数,但是不运行

pytest -v package名:-v可查看具体哪个文件下的哪个函数运行错误或失败

pytest -k “函数1 or 函数2”:指定一些test_函数运行

pytest -m “参数“  package名:指定参数运行函数(可在函数上方标记参数@pytest.mark.参数)

pytest -x package:遇到一个错误时停止运行(在-x 后加个-v可查看具体哪个文件下的哪个函数运行错误或失败)

pytest --maxfail=x   package名:设置最大错误数,当运行错误大于x后停止运行

pytest -s package名:打印函数中的print显示在命令行

pytest --lf package名:显示运行错误的函数信息

pytest --ff package名:正确的错误的都显示出来

5.fixture

1.pytest.fixture可用在普通函数上面,test_函数引用时可直接使用函数名引用返回值

2.fixture优先级运行

(1).在根目录下新建配置文件conftest.py

(2)在conftest.py文件下编写运行前后的程序

所有.py文件运行前后

每个文件.py运行前后

每个class运行前后

每个function运行前后

3.fixtrue中的参数(scope='function',params=None,autouse=False,ids=None,name=None)

(1)scope:控制fixture的作用范围,有四个取值,根据作用范围大小划分:session> module> class> function

                       --function:函数或者方法级别都会被调用,默认值为function

                       --class:每一个类调用一次,一个类中可以有多个方法

                       --module:每一个.py文件调用一次,该文件内又有多个function和class

                       --session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module

(2)params:可以实现前置函数的参数化,调用前置函数的测试用例可以根据前置函数不同的参数执行多次

(3)autouse:默认值为False,不自动调用,开启后

                          scope=function或者未设置,则每个测试用例都会自动调该前置函数;

                          scope=class,则会在测试类中的第一个测试方法前自动调该前置函数;

                          scope=module,则会在测试模块中的第一个测试函数前自动调该前置函数;

                          scope=session,则会在所有测试模块调用中的第一个测试函数前自动调用

4)ids:params 测试 ID 的一部分

5)name:默认装饰器的名称

6.parametrize参数化(数据驱动)

若参数场景过多时可以导入csv文件或连接数据库

7.pytest-order排序

(1).安装

pip install pytest-order

(2).编写

可定义在class和function上,数字也可为-1,-2,-3,-表示倒数运行

也可写成:@pytest.mark.order(5)

若编写好运行顺序后需要在中间插入一条case,before=“函数名”

 

8.pytest_collection_modifyitems钩子函数

pytest-order只能控制单个py文件内的case执行顺序,若是多个.py,还是默认通过a-z,0-9来执行的

def pytest_collection_modifyitems(config, items):
    # 期望用例顺序按照.py文件执行
    print('期望用例顺序按照.py文件执行')
    appoint_classes = {"TestLogin": [], "TestSearch": [], "TestAddCar": [], "TestSettlement": [], "TestSubmit": []}
    for item in items:
        for cls_name in appoint_classes:
            if item.parent.name == cls_name:
                appoint_classes[cls_name].append(item)
    items.clear()
    for cases in appoint_classes.values():
        items.extend(cases)

钩子函数,用来控制多.py执行顺序。在conftest.py中定义改函数,修改appoit_classes中的case类名即可,方便简洁

 

posted @ 2021-10-07 16:56  余生没有余生  阅读(245)  评论(0)    收藏  举报