微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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编写用例的时候需要按照规范来编写,否则用例将不能被pyterst识别并执行:

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

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

可以使用命令行参数执行 pytest -h 或者 pytest -help查看 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断言常用的几种情况:

  • 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()使用

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐