当前位置 : 主页 > 编程语言 > python >

pytest用例编写和执行

来源:互联网 收集:自由互联 发布时间:2022-06-15
一、pytest的优点 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考 可以自动识别测试模块和测试函数,支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函

一、pytest的优点

  • 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  • 可以自动识别测试模块和测试函数,支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数
  • 支持参数化
  • 执行测试过程中可以将某些测试跳过(skip),或者xfail处理对某些预期失败的case标记成失败
  • 支持重复执行(rerun)失败的 case
  • 支持运行由 nose, unittest 编写的测试 case
  • 可生成 html 报告
  • 方便的和持续集成工具 jenkins 集成
  • 可支持执行部分用例
  • 具有很多第三方插件,,例如报告插件pytest-html、allure-pytest、失败重试插件pytest-rerunfailures,并且可以自定义扩展
  • 二、安装和测试用例编写规则

    1.安装

    # 安装
    pip install -U pytest
    # 换源安装
    pip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
    # 查看版本
    pytest --version

    2.测试用例编写规则

    pytest的测试用例不用像unittest一样还要测试类先继承,只需要满足测试用例条件,函数还是类的方法都可以作为测试用例

    1.测试模块(py文件)名称必须是 test_*.py 或 *_test.py
    2.目录下所有的包 package 必须要有__init__.py 文件,包内的模块(py文件)才能识别为测试模块
    3.测试类的类名必须以Test开头,且不能包含 __init__ 方法,不然就算类中有以test开头的方法也不会执行
    4.测试用例名称必须是test_开头,无论是单独的一个函数还是测试类下的方法,否则不会识别为测试用例

    三、命令行执行测试用例

    应用场景:自动化测试需要自动执行命令来运行脚本

    1.基础命令

    运行方式:cd切换目录到目标目录,执行以下命令可以执行不同的测试用例:

    pytest # 【所有】 先cd到某个目录下,执行目录下所有合规模块和包中所有测试用例
    pytest test_01.py # 【模块】 执行test_01.py模块下所有测试用例
    pytest -v test_01.py::test_3 # 【函数】 运行test_01.py模块里面的test_3用例
    pytest test_01.py::TestClass # 【类】 运行test_01.py模块里面TestClass类下所有用例
    pytest test_01.py::TestClass::test_4 # 【方法】 运行test_01.py模块里面某个类,某个类里面的方法

    pytest用例编写和执行_用例

    2.命令可用参数

    除了基础命令,我们可以增加各种参数来达到不同的执行和打印效果,常用参数见下:

    -x # 遇到错误时停止测试===============================================================================================
    pytest start.py -x
    --maxfail=num,当用例错误个数达到指定数量时,停止测试=====================================================================
    pytest start.py --maxfail=1

    -k # 根据用例名称筛选某些用例执行或者不执行==============================================================================
    pytest -v -k test_4 test_01.py # -k 匹配用例名称,执行测试用例名称包含test_4的所有用例
    pytest -v -k "test_4 or test_5" test_01.py # 多个条件去匹配用例名称,符合一个即可执行
    pytest -v -k "not test_4" test_01.py # 根据用例名称排除某些名称包含test_4的用例

    -m [标记表达式] # 仅运行与给定标记表达式标记的用例(用例需要提前被自定义mark标记),更详细使用点这里===============================
    eg:
    @pytest.mark.mark1
    def test_01():
    pass
    pytest -m 'mark1' 01_test.py # 01_test.py中其他case都被取消执行,相当于给case打了一个标签,对用例进行了分类,执行一类用例
    pytest -m 'mark1 and not mark2' 01_test.py

    # 打印报告相关
    -v, --verbose # 详细打印,比默认默认的报告多了session部分的执行结果和进度信息===============================================
    pytest -v start.py
    -q, --quiet # 简单打印,没有session那一整块(平台版本、python和pytest等版本信息、执行结果)===============================
    pytest -q start.py # 简单打印

    -r [chars] # 显示字符指定的额外测试摘要信息,可以是多个(默认 "fE" 只显示错误和失败用例)======================================
    # chars可选项:(f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed, (p)assed, (P)assed with output, (a)ll except passed (p/P), or (A)ll
    pytest -rfEp -v 01_test.py # 详细打印,结果显示 失败+错误+常规通过 三种,运行效果见下图

    -s # 用例中print打印信息相关,用例默认失败会输出,通过是不会输出打印信息的,加上这个就会关闭Captured staout call 输出信息功能(用例成功或者失败都不再输出),但是会显示在 test session start部分,更好看,相当于 --capture=no

    # 其他
    --markers #显示标记(内置、插件和每个项目的标记)
    -x, --exitfirst # 在第一个错误或测试失败时立即退出
    --runxfail # 报告xfail测试的结果,就好像它们没有被标记一样
    --lf, --last-failed # 仅重新运行上次运行失败的测试(如果没有失败,则全部重新运行)

    附图一:-rfEp执行效果

    pytest用例编写和执行_测试用例_02

    附图二:默认、-v、-q三种模式报告对比

    pytest用例编写和执行_用例_03

    附图三:-s 效果

    pytest用例编写和执行_用例_04

    pytest用例编写和执行_测试用例_05

     四、pytest用例执行顺序

    unittest中用例按照根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行

    pytest中同一py文件中用例默认是按照该文件从上到下的顺序执行的,但是有个插件,支持我们自定义执行顺序,更加随心所欲,详见:>>安静的博客<<

     

    五、pycharm执行测试用例 

    第一步:编写用例都是用的编辑器,使用cmd执行的话很麻烦,pycharm中可以直接按照下图设置,之后就会以pytest运行代码

    第二步:右键执行测试用例:

      1)执行整个目录:鼠标先点中最左侧目录,右键执行,会执行该目录下所有用例

      2)执行某个模块:鼠标点点中最左侧该模块,或者点到该py文件中空白的地方,右键执行

      3)执行整个测试类:鼠标点中类名,右键执行

      4)执行某个函数或类的方法:鼠标点中函数,右键执行

    pytest用例编写和执行_测试用例_06

     

    pytest用例编写和执行_测试用例_07

     

    网友评论