pytest测试框架系列 - 快速入门和简单使用

前言

  • python常用测试框架有Unittest、Doctest、Nose及Pytest
  • unittest大部分人都非常清楚,都用来做自动化,无论是UI还是接口自动化
  • Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,但是很多插件不支持python3
  • doctest是python自带的一个模块,你可以把它叫做“文档测试”(doctest)模块,使用起来不太方面,被大家放弃使用
  • pytest是基于unittest开发的另一款更高级更好用的单元测试框架,提供了丰富的插件且容易使用,二次开发也比较简单

那大家为什么都推荐使用Pytest

pytest 的官方网站对Pytest说明如下特点:

  • 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  • 能够支持简单的单元测试和复杂的功能测试
  • 支持用简单的assert语句实现丰富的断言
  • 自动识别测试模块和测试函数
  • 安装插件即可支持参数化,使用非常简单
  • 模块化夹具用以管理各类测试资源
  • 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
  • 支持重复执行(rerun)失败的 case
  • 支持运行由 nose, unittest 编写的测试 case
  • 可生成 html 报告,特别有allure报告插件
  • 方便的和持续集成工具 jenkins 集成
  • 支持用例筛选,支持执行部分用例
  • 具有很多第三方插件,并且可以自定义扩展,截止目前已有800多个各式各样的插件

pytest和Unittest区别

类型UnittestPytest
用例编写规则测试文件必须先import unittest
测试类必须继承unittest.TestCase
测试方法必须以“test_”开头
测试类必须要有unittest.main()方法
测试文件名必须以“test_”开头或者"test"结尾
测试方法必须以“test
”开头
测试类命名以"Test"开头
用例执行默认执行全部用例,也可以通过加载testsuit,执行部分用例可以通过@pytest.mark来标记类和方法,pytest.main加入参数("-m")可以只运行标记的类和方法
用例前置和后置提供了setUp/tearDown,只能针对所有用例提供模块级、函数级、类级、方法级等不同级别
更有fixture更加灵活
参数化需依赖第三方库如ddt、paramunittest库使用@pytest.mark.parametrize装饰器
断言很多断言格式(assertEqual、assertIn、assertTrue、assertFalse)使用python自带的assert即可,比较自由方便
报告使用HTMLTestRunner.py库有pytest-HTML、allure插件
失败重跑无此功能使用插件pytest-rerunfailures即可完成,不需要编写多余代码
并发测试无此功能使用插件pytest-xdist即可完成,不需要编写多余代码

安装Pytest

  • 在编辑器或者cmd命令窗口输入: pip install pytest 或者 pip install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com,安装的是最新版
    cmd窗口

  • 在编译器安装模块界面安装(pycharm为例):File -> Settings->Project->Project Interpreter ->点击"+"号->搜索框输入 pytest,选择pytest,点击Install Package
    pycharm安装
    查看版本
    cmd输入框输入:pytest --version
    pytest版本

快速开始

# _*_coding:utf-8 _*_
# @Time  :2021/7/1 22:18
# @Author  : king
# @File    :test_01.py
# @Software  :PyCharm
# @blog     :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试开发知识库】


def func(x):
    return x + 1


def test_answer():
    assert func(3) == 5


class TestClass:
    def test_one(self):
        x = "king"
        assert "k" in x

    def test_two(self):
        assert func(2) == 3

然后,cmd进入当前文件目录,直接执行 pytest
执行结果
需掌握的知识点

  • 如果只输入 pytest ,就会开始从当前目录及其子目录下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 开头函数并执行
  • 如果只想执行某个文件,可以 pytest test_01.py
  • 加上-q,就是显示简单的执行结果: pytest -q test_01.py
  • 加上 -v,就是显示详细的执行结果: pytest -v test_01.py

Pytest用例的编写遵循原则

默认情况下,使用Pytest编写用例时候,需要按照下面的规则去写,否则不符合规则的测试用例不会执行(后续会讲解如果更改用例搜索执行规则)

  • 文件名以 test_*.py 文件和*_test.py
  • test_ 开头的函数
  • Test 开头的类,不能包含 __init__ 方法
  • test_ 开头的类里面的方法
  • 所有的包 pakege 必须要有__init__.py 文件

Pytest cmd命令行窗口里面执行用例搜索规则

  1. 某个目录下所有的用例 cmd命令行输入:pytest
    pytest
  2. 执行某一个 py 文件下用例 pytest 脚本名称.py
    在这里插入图片描述
  3. 运行模块里面的某个函数,或者某个类,某个类里面的方法

pytest test_01.py::TestClass::test_one
pytest test_01.py::TestClass
pytest test_01.py::test_answer

执行结果
4. -m 标记表达式(后面详细讲解)

pytest -m smoke

将运行用 @pytest.mark.smoke 装饰器装饰的所有测试用例,后面再详细讲解标记相关内容

  1. -q 简单打印,只打印测试用例的执行结果

pytest -q test_01.py

执行结果

  1. -v 详细打印

pytest -v test_01.py

-v 详细打印

  1. -s 打印print 调式相关信息

pytest -s test_01.py

-s

  1. -x 遇到错误时停止测试
    作用调式用例时使用,遇见失败就停止

pytest test_01.py -x

-x

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

pytest test_01.py --maxfail=1

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

  1. -k 匹配用例名称、根据用例名称排除某些用例、同时匹配不同的用例名称

pytest -s -k xkw test_01.py
pytest -s -k “not xkw” test_01.py
pytest -s -k “test_answer or test_two” test_01.py

注意
pytest 是可以兼容 unittest 脚本的,前面写的 unittest 用例稍微做下修改就能用 pytest 框架去运行

以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!

如果觉得文章不错,欢迎关注微信公众号,微信公众号每天推送相关测试技术文章
个人微信号

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试之路king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值