pytest介绍

pytest的使用

 

 pytest优点

入门简单,文档丰富

支持单元测试,功能测试

支持参数化,重复执行,部分执行,测试跳过

兼容其他测试框架(nose,unittest 等)

支持生成html报告

可集成CI环境(Jenkins 等)

第三方插件丰富,良好的自定义扩展性

 

环境安装

pip  install  pytest

 

一、pytest 对比 unittest

1、unittest是python中的官方库,兼容性更好,更稳定,pytest在安装的时候,可能会出现和python版本的兼容问题。

2、unittest编写用例一定要以类的形式去编写,而且必须要继承TestCase,

3、pytest编写用例,既可以使用类的形式,又可以使用函数的形式,并且无需继承  

4、unittest要自己加载用例到套件,再去执行,pytest更加智能,会自动查找用例

5、pytest可以对用例打便签做分类管理,可以通过便签筛选用例,执行用例更加的灵活

6、pytest有用例失败重运行机制,unittest没有。

7、pytest支持的插件非常丰富,功能扩展性强。

8、pytest用例执行的前置后置处理更加灵活

9、执行顺序不一样,unittest是按照ASCLL码顺序执行,pytest是从上到下的顺序执行

10、unittest有好多种断言方法,pytest只有assert

11、unittest参数化需要结合ddt使用,pytest有自己的参数化方法 @pytest.mark.parametrize装饰器

12、Pytest测试类以Test开头,并且不能带有 init 方法

 

二、pytest 运行的方式

方式一:命令行输入 pytest

方式二:使用pycahrmpytest方式运行用例文件方式三:创建一个启动文件:

方式三:创建一个启动文件:

  运行参数

    pytest.main()

指定测试模块:  

  #  pytest  文件名

    pytest  test_mod.py

指定测试目录:

  #  pytest  文件路径

    pytest  testcases

指定测试用例执行:

  # 测试节点的组成:

    # py模块名::类名::函数名

      pytest test_dome.py::TestLogin::test_login_pass 

    #  pytest  py模块名::函数名

      pytest test_dome.py::test_demo2

通过关键字表达式过滤执行:

  # 这条命令会匹配文件名、类名、方法名匹配表达式的用例

    pytest  -k  "MyClass  and  not  method"

通过标记表达式执行

  #  这条命令会执行被装饰器  @pytest.mark.smoke  装饰的所有测试用例

    pytest  -m  smoke

 

三、测试用例的规范

 

1、发现用例的规则

 

  1、测试文件 以 *_test.py 开头或者结尾

 

  2Test开头的类 test开头的方法【并且不能带有__init__方法】

 

  3、模块中test开头的函数注意点:

 

    1pytest 是以方法为单位发现用例的,你写不写测试类根本不重要。

 

    2、在那个目录下执行pytest,就在哪个目录下按照上述规则去查找

 

 

 

 

2、自定义查找规则:pytest.ini

[pytest]
# 文件以test开头和test(check开头和check结尾)结尾都会当成测试用例
python_files =
test*.py
*基础版1.py
cheack_*.py
test_*.py


# 方法以test开头和test(check开头和check结尾)结尾都会当成测试用例
python_functions =
test*
*test
check*
*check

# 类以test开头和test(check开头和check结尾)结尾都会当成测试用例
python_classes =
Test*
*Test
Check*
*Check

 

 

 

四、用例打标记

需求:有一部分老的用例,一部分新用例,我只想运行对用例进行标注,打标签

1、注册标签

  mark 注册:创建 pytest.ini 文件

 

 

 

 

 

五、用例执行顺序

 1unittest用例执行排序:

  根据ASCII码来排序

2pytest用例执行的顺序:

  文件名称 ASCII 码排序

  文件内根据定义的的方法的先后顺序,从上到下执行

 

六、断言

使用关键字:assert断言

  assert  a  %  2  ==  0

 

七、测试报告

 

pip  install  pytest-html

 

#  第一种:log  普通文本:  TextTestRunner

--resultlog=report/demo.txt 相对路径

 

#  第二种:xml, 生成  xml  文件

--junitxml=report/demo.xml

 

#  第三种:html  HTMLTestRunner,

--html=report/demo.html

#  第四种:allure :

allure  是一个通用的测试报告的框架。python,  java,php,  ruby

 

八、参数化(数据驱动)

pytest写的用例,如何实现用例数据参数化? 使用pytest.parametrize

@pytest.mark.parametrize("用例方法中接收的参数名",数据)

 

 

 

 

九、fixture

"""
fixture(scope="function") 根据方法运行
fixture(scope="class") 根据类运行
fixture(scope="module") 根据模块运行
fixture(scope="package") 根据包运行
fixture(scope="session") 根据会话对象运行
fixture(autouse="True") autouse="True"会自动加到所有用例前后置

定义:
1.@pytest.fixture(scope="function")
2.@pytest.fixture(scope="class")
调用:
1.在用例方法参数中,写上前后置的方法名
2.在定义前后置方法的

注意点:前后置方法可以统一放到congtest.py文件中(用例文件中直接使用,不需要导入)

方式一:

 

方式二:

 

方式三:

 

posted @ 2021-03-01 17:26  北京测试菜鸟  阅读(6813)  评论(0编辑  收藏  举报