pytest学习笔记 01

pytest是一个单元测试框架,在python中比较主流,另一个比较主流的就是unittest。

可以来干嘛呢?可以做自动化,接口也行,UI也可以,可以配合其它的测试工具(或模块)丰富自身,比如测试报告、断言和参数化;可以做别的(目前我没有接触,手动捂脸)。

unittest这个是官方库,python自带的框架;而pytest是在unittest基础上进一步封装的,可以兼容unittest脚本。

pytest的有点有什么呢?

1.资料丰富、入门简单、容易上手;

2.支持简单的单元测试和复杂的功能测试;

3.支持参数化;

4.执行过程用例可跳过,可标记预期失败;

5.支持失败case重复执行;

6.兼容unittest编写的case;

7.可使用html测试报告;

8.可与jenkins集成;

9.第三方插件丰富,支持自定义扩展。

怎么安装呢?

        cmd中操作:

pip install pytest
pip install pytest --default-timeout=6000 -i https://pypi.tuna.tsinghua.edu.cn/simple  # 如果超时可以更换清华源

  安装完成后查看pytest版本:

pytest --version

  pytest学习笔记 01

 

 pytest编写用例的时候需要按照规范来编写,否则用例将不能被pyterst识别并执行:

  • 文件名要以test_*.py或*_test.py命名
  • 函数以test_开头
  • 类以Test开头,且不能包含__init__方法
  • 方法(类里的)以test_开头
  • 所有的包必须有__init__.py文件

这里我用的pycharm进行测试的,所以要在pycharm中设置一下执行框架,方便操作。

pytest学习笔记 01

 用例的执行规则(cmd中执行pytest命令)

可以使用命令行参数执行 pytest -h 或者 pytest -help查看 pytest 帮助文档

pytest学习笔记 01

 

 下面说一下常用的参数

  • 某个目录下的所有用例
    • pytest
  • 执行当前文件夹下的所有文件
    • pytest 文件名/  
  • 执行具体的某一个测试文件
    • pytest 脚本.py  
  • 匹配用例名称
    • pytest -k "case" test_one.py   # 执行用例名称包含case的所有用例  
    • pytest -s -k "not case" test_one.py   # 执行用例名称不包含case的用例
    • pytest -s -k "unionPay or weChat" test_one.py   # 执行用例名称包含unionPay或者weChat的用例
  • 按节点运行
    • pytest test_moudle.py::test_func   执行某个模块下的某个方法
    • pytest test_module.py::TestClass::test_func  执行某个模块下某个类下的某个方法
  • 遇到错误是停止测试 -x
    • pytest strart.py -x
  • 当用例错误个数达到指定数量时停止测试 --maxfail=num
    • pytest start.py --maxfail=6
  • 详细打印用例的执行结果  -s,  -v更详细
    • pytest -s start.py
  • 简单打印用例执行结果
    • pytest -q start.py    

 常用的断言

pytest使用python自带的assert关键字进行断言: assert A==B   如果A==B为True,断言通过,A==B为False,单元失败,用例执行失败。

先看一个断言成功的例子:

 

class TestClass(object):

    # def __init__(self):
    #   print('初始化函数')
    def test_func1(self):
        print('测试用例1==========')
        result = 10
        assert result == 10

 执行结果如下:

pytest学习笔记 01

 

 在看一下断言失败的情况:

 pytest学习笔记 01

 

执行结果如下:

pytest学习笔记 01

 

 总结一下pytest断言常用的几种情况:

  • assert A: 判断 A 是否为真
  • assert not A: 判断 A 是否为假
  • assert A in B: 判断B是否包含A
  • assert A==B: 判断A是否等于B
  • assert A!=B: 判断A是否不等于B

结合上面的断言,用例执行完成后可以有一下几种状态:

  • passed:执行通过
  • failed:执行失败,也就是断言失败
  • error:代码问题导致执行错误
  • xfail:预期失败,结合@pytest.mark.xfail()使用

 

上一篇:pytest.ini配置文件中文报错解决方法


下一篇:推特与Android交谈