【二、自动化测试】5 分钟快速上手 pytest 测试框架

发布时间:2024年01月22日

Pytest的简介

Pytest 是 Python 的一种易用、高效和灵活的单元测试框架,非python自带,属于第三方插件,支持单元测试和功能测试

  • 简单易用,快速上手

  • 支持单元测试和复杂功能测试,同时可以能够支持selenium/appnium等自动化测试、接口自动化测试(pytest+requests)

  • 社区生态良好,有大量的pytest扩展插件,且可以自定义扩展,如 pytest-allure(定制html测试报告生成)、pytest-xdist(多CPU分发)

  • pytest拥有良好的jenkins集成能力

备注

  • pytest官方文档:https://docs.pytest.org/en/latest/contents.html#toc

  • 第三方库:https://pypiorg/search/?q=pytest

官方文档

官网有一定的示例用于初始学习pytest案例

Pytest使用原则及安装

  • 测试文件,名称须以test_*.py或*_test.py命名

  • 用例识别

    • 可以识别Test*类中包含所有的test_*方法

    • 不在class中所有的test_*命名方法

    • 注意:类中不能有__init__方法,否则含有init会被认定为特殊功能类

  • pytest可以执行unittest框架编写的测试用例和测试方法

pytest安装

与unittest不同,unittest是python自带的单元测试工具,而pytest则是第三方库,需要手动安装,安装方式则同样简单,使用pip指令即可安装(pip是安装python包时自动安装的)

# 使用pip查看安装了哪些插件或库
pip list

# 直接使用pip查看安装pytest库
pip install pytest
# 如下图所示安装成功

# 如果你在pip list的时候查看有安装pytest,那么可以将其升级一下,避免版本太低不适配
pip install -U pytest
# 查看当前版本号
pip show pytest

Pytest用例创建、执行

使用pytest创建并执行

创建一个并且执行一个pytest测试用例(使用pytest指令,自识别和查找执行)

  • 使用vim 在当前目录下,创建一个名称为test_all.py的文件

  • 使用pytest解释器直接执行(需要已经安装pytest库)

使用python指令执行

  • py文件中需要有main函数即入口函数,如果没有入口函数则无法执行,需要增加入口函数如图所示

使用pycharm创建并执行

pycharm简介见官网:https://www.jetbrains.com/zh-cn/pycharm/,这里我所使用的为社区版,社区版本目前是免费使用

创建一个简单的pytest的py工程

使用pycharm新建工程,设置虚拟环境,并根据使用原则设定对应pytest测试用例内容

  • 创建内容

  • 使用pycharm执行当前的测试类,结果什么都没有,原因还是没有入口函数

  • pycharm使用pytest解释器执行【需要安装pytest】

在setting中输入pytest,找到Python Intergrated Tools,在Defalut test runner中选择pytest且在下方点击Fix开始安装pytest库

设置中查看安装成功

pytest解释器执行,点击可执行的按钮,执行结果查看

  • pycharm中python解释器执行

增加入口函数,直接执行方法,结果同上

  • pytest参数使用(具体使用pytest --help查看,此处使用-k -v

# pytest -k 执行测试用例 加上-v会输出详细日志
# -v则是输出详细日志
# -k是一个表达式
pytest -k 'test_a or test_b or test_c' -v

测试用例参数化

参数化测试 pytest库提供了@pytest.mark.parametrize装饰器,可以实现参数化测试,简化编写多个相似测试用例的工作,参数化执行能够看到同等类型请求接口的结果

夹具(Fixture)的使用

fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余

部分用例需要登录,部分用例不需要登录,可以建立一个Fixture来解决这个问题,a、b、c

传入到要使用的方法中

如果数据有用到的结果返回,则使用{方法名}进行结果接收

以上本文完,如果你觉得有用就“点个赞呗👍”

作者简介:

程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流


欢迎关注我,? 和我一起探索测试之路,终身成长

文章来源:https://blog.csdn.net/weixin_53991455/article/details/135737521
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。