• Pytest系列-快速入门和基础讲解(1)


    前言

    • 目前有两种纯测试的测试框架,pytestunittest
    • unittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口
    • pytest是基于unittest开发的另一款更高级更好用的单元测试框架

    单元测试框架介绍

    • 单元测试框架是在自动化测试或者白盒测试中对软件的最小单元(函数、方法)进行测试的框架
    • 单元测试框架的分类:python(unitest、pytest)、Java(Testing(主流)、Junit)
    • 单元测还框架主要做什么
      • 发现测试用例
      • 执行测试用例
      • 判断测试结果
      • 生成测试报告

    为什么要用Pytest

    pytest 的官方网站介绍,它具有如下特点:
    1、非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
    2、能够支持简单的单元测试和复杂的功能测试
    3、支持参数化
    4、执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
    5、支持重复执行(rerun)失败的 case
    6、支持运行由 nose, unittest 编写的测试 case
    7、可生成 html 报告
    8、方便的和持续集成工具 jenkins 集成
    9、可支持执行部分用例
    10、具有很多第三方插件,并且可以自定义扩展

    Pytest安装、简介以及常用插件安装

    Pytest安装

    cmd运行

    pip install -U pytest
    
    pip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
    
    • 1
    • 2
    • 3

    pycharm 直接安装
    在这里插入图片描述

    查看版本

    pytest --version
    
    • 1

    Pytest简介及常用插件安装

    pytest官方文档 : https://docs.pytest.org/en/latest/contents.html

    在这里插入图片描述
    步骤:打开Pycharm,在项目根路径下面 创建一个.txt的文件夹,将要安装的插件放进去 (注:使用此方法是在虚拟环境安装 DOS环境会安装不成功
    在这里插入图片描述
    打开控制台 输入安装语句 进行安装:
    在这里插入图片描述
    上面方法可能安装不成功,直接在terminal 单个安装也可以
    在这里插入图片描述

    Pytest 默认测试用例的规则以及基础应用

    Pytest 用例设计的规则

    用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的
    1、文件名必须以test_.py 文件开头和test.py结尾
    2、以 test
    开头的函数
    3、以 test 开头的类,且不能包含 _ _ init_ _ 方法
    4、以 test_ 开头的类里面的方法
    5、所有的包 package 必须要有__init__.py 文件

    Pytest执行基础应用

        **执行:Alt+Enter自动导报**
    
    • 1

    1、通过命令行执行方式执行,再terminal 和 cmd 中 直接执行。

    pytest  			执行某个目录下所有的用例
    pytest 脚本名称.py	执行某一个 py 文件下用例
    
    • 1
    • 2

    执行参数:
    (1)运行start.py 模块里面的某个函数,或者某个类,某个类里面的方法
    -v 和不加 -v 都可以,加 -v 的话,打印的信息更详细

    pytest -v 08_mark.py::TestClass::test_method
    
    pytest 08_mark.py::TestClass::test_method
    
    pytest test.py::test_answer
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (2)运行start.py 模块里面,测试类里面的某个方法

    pytest start.py::TestClass::test_two
    
    • 1

    (3) -m 标记表达式(先了解)

     pytest -m login
    
    • 1

    将运行用 @pytest.mark.login 装饰器修饰的所有测试
    (4)-q 简单打印,只打印测试用例的执行结果

    在这里插入代码片
    pytest -q test.py
    
    • 1
    • 2

    (5)-s 详细打印 (输出调试信息)

     pytest -s test.py
    
    • 1

    (6)-x 遇到错误时停止测试

     pytest test.py -x
    
    • 1

    (7)—maxfail=num,当用例错误个数达到指定数量时,停止测试

     pytest test.py --maxfail=1
    
    • 1

    (8)-k 匹配用例中包含某个字符串的名称
    执行测试用例名称包含http的所有用例

    pytest -s -k http test.py
    
    • 1

    (9)-k 根据用例名称排除某些用例

    1 pytest -s -k "not http" start.py
    
    • 1

    (10)-k 同时匹配不同的用例名称

    pytest -s -k "method or weibo" start.py
    
    • 1

    (11)-n=num 多线程运行(插件:pytest-cdist 已安装成功)

    pytest  -vs -n=2     两个线程一起执行
    
    • 1

    (12)–reruns=num 失败重跑, num 是重跑的次数(插件:pytest-rerunfailres 安装成功)
    一个进程里面有多个线程

    raise Exception()  抛出异常
    try except  解决异常
    
    pytest -vs --reruns=2   抛出异常后重新执行两次
    
    • 1
    • 2
    • 3
    • 4

    (13)–html 生成html报告 (插件:pytest-html 已安装成功)

    pytest --vs --html ./reporters/result.html   后面是存放的位置
    
    • 1

    2、通过主函数main方式执行,直接在代码运行文件最后添加。

    if __name__=='__main__';
    	pytest.mian()
    
    • 1
    • 2

    在项目名称下添加运行文件也可以执行:

    if __name__=='__main__';
    	pytest.mian(["-vs"])
    
    • 1
    • 2

    3、通过配置文件pytest.ini文件执行
    注意
    ① 一般放在项目的根目录下,名称必须是pytest.ini;

    ② 编码格式为 ANSI;当有中文时可能需要改变编码格式为UTF-8或GB2312 ;

    ③ pytest.ini文件可以改变默认的测试用例规则;

    ④ 不管是命令行也好还是说主函数运行也好,都会加载这个配置文件。
    举例:

    [pytest]        #配置文件
    #参数
    addopts = -vs -m "smoke" #表示 只执行smoke用例
    
    testpaths = ./testcases  #测试用例的位置
    
    python_files = test_*.py  #python文件名的规则,会执行对应文件的测试用例
    
    python_classes = Test* #python文件类名的规则,对应文件会执行测试用例
    
    python_functions = Test_*  #python文件方法名的规则,对应文件会执行测试用例
    ------------------------------------------------
    #测试用例分组执行。有时候用例多只执行个别模块的可以对测试用例进行分组执行。
    #标记
    markers =
    	smoke:冒烟用例
    	denglu:登录
    	product_manage:商品管理
    	.....
    #代码文件中的测试用例上面添加使用
    @pytest.mark.smoke
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    Pycharm运行Pytest

    1、首先,要去settings里面设置单元测试框架为Pytest
    2、如果是nosetests的话,右键运行是以python脚本运行的
    3、如果设置了unittest则是以unittest框架去运行
    在这里插入图片描述
    在这里插入图片描述

    注意

    pytest 是可以兼容 unittest 脚本的,写的 unittest 用例也能用 pytest 框架去运行。

    Pytest跳过测试用例

    无条件跳过

    在测试用例上方填写代码

    class Testcase@pytest.mark.skip(reason='无理由跳过')
      def test_01(self):
      		print("测试")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    有条件跳过

    在已有条件不满足的情况下,选择跳过

    class Testcase:
      work=1
      @pytest.mark.skipif(work<1,reason="工作少于1年跳过")
      def test_01(self):
      		print("测试")
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    视频监控管理平台/视频汇聚/视频云存储EasyCVR安全检查的相关问题及解决方法3.0
    CMake基本使用
    A-Level经济真题(2)
    网络基础(数据链路层)
    弘辽科技:淘宝流量不稳定该如何应对
    C++ 装饰器模式
    Linux用户管理— 用户组管理命令
    混沌系统在图像加密中的应用(基于哈密顿能量函数的混沌系统构造1.4)
    6.对象的实例化内存布局与访问定位
    程序设计部分 动态规划 习题
  • 原文地址:https://blog.csdn.net/m0_62091240/article/details/132685432