1.为什么要使用pytest

pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:

  • 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  • 能够支持简单的单元测试和复杂的功能测试
  • 支持参数化
  • 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
  • 支持重复执行(rerun)失败的case
  • 支持运行由nose, unittest编写的测试case
  • 可生成html报告
  • 方便的和持续集成工具jenkins集成
  • 可支持执行部分用例
  • 具有很多第三方插件,并且可以自定义扩展

2.安装pytest

pip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

如果已经安装过的,也可以进行更新升级一下。

pip3 install -U pytest


 查看版本

pytest --version

pytest sql怎么写 pytest简书_单元测试

 

3. 快速开始

#  _*_coding:utf-8_*_
# @Author  : lu
# @Time    : 2019/11/2 22:27
# @file    : test_demo.py
# @Software: PyCharm

import pytest

class TestDemo():
    def test_one(self):
        x = 'this'
        assert 'h' in x

    def test_two(self):
        x = 'hello'
        assert hasattr(x, 'check')

    def test_three(self):
        a = 'hello'
        b = 'hello world'
        assert a in b

if __name__=='__main__':
    pytest.main(['-q','test_demo.py'])

然后,cmd进入test_demo.py所在目录,直接执行:

pytest sql怎么写 pytest简书_测试用例_02

 

 

 知识点

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

 

4.pytest用例规则

用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的

  • 测试文件名以 test_*.py 文件和*_test.py
  • 以test_开头的函数
  • 以Test开头的类,不能包含__init__方法
  • 以test开头的类里面的方法
  • 所有的包package必须要有__init__.py 文件
  • 断言使用assert

5.pytest用例执行规则

注意,下面讲的都是在cmd中执行pytest命令

(1) 某个目录下所有的用例

pytest

(2) 执行某个py文件下用例

pytest test_demo.py

(3) 运行test_demo.py模块里面的某个函数,或者某个类,或者类中的某个方法

加v或者不加v都可以,加v,打印的信息更详细

pytest -v test_demo.py::test_raiseerror
pytest -v test_demo.py::TestDemo
pytest -v test_demo.py::TestDemo::test_one

(4)  -m 标记表达式

pytest -m app

将运用@pytest.mark.app装饰器装饰所有测试,后面再展开讲

(5) -q简单打印,只打印测试用例的执行结果

pytest -q test_demo.py

(6) -s详细打印

pytest -s test_demo.py

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

pytest test_demo.py -x

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

pytest test_demo.py --maxfail=1

(9) -k 匹配用例名称

执行测试用例名称包含所有one的用例

pytest -s -k one test_demo.py

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

pytest -s -k “not one” test_demo.py

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

pytest -s -k "method or raiseerror" test_demo.py

 

6.pycharm运行pytest

平时写代码,咱们都在Pycharm写的,怎么可能一直用cmd来跑用例呢,现在我们就来看看在Pycharm中如何运行Pytest

  1. 首先,我们先要去settings里面设置单元测试框架为Pytest
  2. 如果是nosetests的话,右键运行是以python脚本运行的哦
  3. 如果设置了unittest则是以unittest框架去运行

pytest sql怎么写 pytest简书_单元测试_03

pytest sql怎么写 pytest简书_pytest sql怎么写_04

 

 

注意

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