zoukankan      html  css  js  c++  java
  • python应用(六、自动化测试框架-pytest)

    6.自动化测试框架-pytest
    官网:https://pytest.org
    传说中的python 鄙视链:pytest 鄙视 > unittest 鄙视 > robotframework 。

    6.1 pytest简介
    pytest是python的第三方单元测试框架,比自带unittest更简洁和高效,插件丰富,同时兼容 unittest 框架。
    1)pytest主要特点有以下几点:
    (1)简单灵活,容易上手,文档丰富;
    (2)支持参数化,可以细粒度地控制要测试的测试用例;
    (3)能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest + requests);
    (4)pytest具有很多第三方插件,并且可以自定义扩展。流行插件:

    较好用还有:
    pytest-selenium(集成selenium)、
    pytest-html(完美html测试报告生成)、
    pytest-rerunfailures(失败case重复执行)
    (5)测试用例的skip和xfail处理;
    (6)可以很好的和CI工具结合,例如jenkins

    2)编写pytest测试编写规则:
    (1)测试文件以test_开头或以_test结尾;
    (2)测试类以Test开头,并且不能带有_init_方法
    (3)测试函数以test_开头
    (4)断言使用基本的assert即可

    6.2 安装pytest
    1)pip install -U pytest # 安装pytest,如果已安装升级到最新版
    2)pytest –version # 查看pytest版本,验证安装成功

    6.3 两种运行方式
    1)编写main(),在pycharm中运行

    2)在cmd窗口,使用命令行

    参数说明:
    (1)-v:pytest -v 说明:可以输出用例更加详细的执行信息,比如用例所在的文件及用例名称等

    (2)-s:pytest -s 说明:输入我们用例中的调式信息,比如print的打印信息等

    (3)-m:pytest -m ”标记“ 说明:执行特定的测试用例。
    (4)-k:pytest -k "关键字" 说明:执行用例包含“关键字”的用例
    (5)-q:pytest -q 说明:简化控制台的输出,可以看出输出信息和上面的结果都不一样, 下图中有两个..点代替了pass结果

    6.4 pytest前置和后置
    1)类之外的前置和后置
    (1)setup_module eardown_module:模块级,运行在文件始末,只运行一次
    (2)setup_function eardown_function:函数级,在每个函数(用例)前后运行
    (3)setup eardown:运行在调用函数的前后,setup在setup_function之后运行,teardown 在teardown_function之前运行(类中生效、类外有函数时生效)

    运行结果:

    2)类之内的前置和后置
    (1)setup_class/teardown_class:类级,只在类中前后运行一次。
    (2)setup_method/teardown_method:方法级,在每个方法(用例)前后运行
    (3)setup/teardown:运行在调用方法的前后,setup在setup_method之后运行,teardown 在teardown_method之前运行(类中生效、类外有函数时生效)

    运行结果:

    6.5 pytest.ini配置文件
    在想要pytest.ini生效的项目或目录中新建pytest.ini文件


    执行结果(cmd和pycharm运行结果基本一致):

    6.6 断言:assert
    pytest里面的断言实际上就是python里面的assert断言方法。
      assert xx:判断xx为真
    assert not xx:判断xx不为真
    assert xx and yy:判断xx和yy都为真
    assert xx or yy:判断xx或yy为真
      assert a in b:判断b包含a
      assert a == b:判断a等于b
    assert a != b:判断a不等于b

    6.7 标记:@pytest.mark.xxx装饰器
    pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行。


    pytest -v -m tt01 # 执行用例test_1
    pytest -v -m tt # 执行用例test_1和test_2
    pytest -v -m "not tt" # 执行用例test_3
    pytest -v -m "tt01 or tt03" # 执行用例test_1和test_3

    6.8 跳过:@pytest.mark.skip装饰器
    1)@pytest.mark.skip(reason=None)
    (1)默认reason为空,@pytest.mark.skip()

    (2)可以装饰方法,也可装饰类。装饰类时,类中的所有方法都会跳过

    2)@pytest.mark.skipif(condition, reason=None)
    (1)condition为真时,跳过;为假时,执行。
    (2)填写condition后,reason必填。
    (3)不填condition,默认跳过

    6.9 参数化:@pytest.mark.parametrize()装饰器
    1)传入单个参数,@pytest.mark.parametrize(变量名,变量值)
    变量名为字符串;
    变量值为可迭代类型,一般使用列表

    运行结果:

    2)传入多个参数,@pytest.mark.parametrize(元组,元组组成的列表)

    执行结果:

    6.10 测试报告插件pytest-html
    1)安装pytest-html插件
    pip install pytest-html

    2)使用pytest-html插件
    在配置文件(pytest.ini)中的命令行参数中,增加:
    --html=用户路径/report.html

    运行测试文件后,出现测试报告:

    查看测试报告:

    6.11 失败重试插件pytest-rerunfailures
    1)安装pytest-rerunfailures插件
    pip install pytest-rerunfailures

    2)使用pytest-rerunfailures插件
    在配置文件(pytest.ini)中的命令行参数中,增加:
    --reruns n # n是重试次数
    --reruns-delay n # n是出错后,重试前的等待时间(单位:s)

    测试报告中,也可以看到重试了2次

    此时,三条测试用例,执行了0.12秒:

    增加重试时延:
    执行结果和上面相同,增加重试时延后,运行时间延长到4.15秒

    6.12 案例应用
    以后勤管理系统的接口测试为例,用pytest编写测试用例


    测试结果:

    测试报告:

    6.13 pycharm 部分测试用例不执行解决方法
    在pycharm中运行pytest测试用例,部分测试用例没有运行或运行后控制台没有显示pytest结果样式,可以改这里试试:
    1)编辑配置
    在要运行的用例中,下拉选择中点击【Edit Configuration...】

    2)删除所有配置信息
    点击【-】删除掉【Python tests】下面所有内容,保存退出。

  • 相关阅读:
    关于mybatis中mapper.xmlSQL语句书写的心得
    笔记
    SpringMVC的小总结
    配置generatorConfig.xml自动生成的代码的sql书写问题
    关于SQL中的排序问题
    鼠标的change事件
    Git学习笔记 --第一章
    XHR对象
    黑马程序员——java学习6(127-151)——多线程
    黑马程序员——java学习5(107-126)——内部类,异常,包
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14185269.html
Copyright © 2011-2022 走看看