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区别

类型 Unittest Pytest
用例编写规则 测试文件必须先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
  1. 执行某一个 py 文件下用例 pytest 脚本名称.py
在这里插入图片描述
  1. 运行模块里面的某个函数,或者某个类,某个类里面的方法

pytest test_01.py::TestClass::test_one

pytest test_01.py::TestClass

pytest test_01.py::test_answer

执行结果
  1. -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 框架去运行

欢迎您给我留言,我们一起讨论。

*如果觉得文章不错,欢迎关注微信公众号

微信公众号

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容