pytest_框架 -- 介绍及基本使用

pytest 介绍及基本使用

阅读目录:
  pytest 介绍
  pytest 测试用例编写规则
  安装pytest
  pycharm 默认测试执行
  第一个示例
  主要命令参数

pytest介绍

官网:https://www.osgeo.cn/pytest/contents.html

pytest是python语言中的一种单元测试框架,与其python自带的unittest测试框架类似 (拓展: java语言下的单元测试框架是 junit 和testng)

pytest可结合requests 实现接口测试, 结合 selenium/playwright、appium实现自动化测试

pytest特点:

1、 具有unittest绝大部分功能,易上手,功能灵活,文档丰富,有很多实例可以参考

2、 具有强大灵活的fixture固件,支持简单的单元测试和复杂的功能测试

3、支持参数化(parametrize)、数据驱动

4、执行待测试过程中可以将某些测试用例跳过(skip),或对某些预期失败的case标记成失败(xfail)

5、支持重复执行(return)失败的case

6、支持运行nose、unittest编写的测试case

7、支持执行部分用例(如:根据标记、或feature、stories等。)

8、支持很多第三方插件(顺序控制pytest-ordering、 allure报告allure-pytest、多线程 pytest-xdist 等),并可自定义开发插件

9、可生辰html报告, 也可结合allure生成精美的测试报告

10、方便jenkins集成 实现持续交付

pytest和unittest区别:

不同点unittestpytest
命名测试方法以test开头模块名必需以test_开头,或以_test结尾
框架结构写case必需定义类,测试类要继承unittest.TestCase不需要继承,可以是函数也可以是类中方法
测试报告使用HTMLTestRunner使用allure-pytest
数据驱动参数化使用第三方ddt参数化使用自带的parametrize
断言断言库丰富采用python断言: 使用assert关键字
失败重试不支持,可自定义类支持支持
固件-灵活的fixture固件
扩展性-快速自定义插件开发

pytest测试用例编写规则

类型规则
模块模块名必需以test_开头 -- test_*.py 或者以_test结尾 -- *testpy 建议: test+业务名称
测试类类名以Test开头
方法/函数以test开头
包名无特殊要求, 包必需要有__init__.py文件

pytest安装

前提环境: 已经安装、配置好python环境

通过命令安装

安装命令: pip install pytest

如果安装不了, 请更换pip源,可考虑使用清华镜像源

image (上图是已经安装完成的显示,补充: 升级到最新版本: pip install -U pyest)

通过pycharm安装

pycharm中安装需要的包,在settings中,选择Python Interpreter,然后点击“+”

image
image

搜索要安装的包,右下角可以选择需要的版本,最后左下角安装即可

image
image

验证安装是否成功:

pytest --version

image
image

pycharm默认测试执行器

settings中,进入Tools -> Python Intergrated Tools,Default test runner默认是自动发现的,可以直接选择pytest image

pycharm运行

左侧有绿色执行按钮 image 点击绿色按钮,用的pytest解释器执行的,而不是python解释器

image 结果 image

一次执行模块中所有方法

1、可以非测试方法处点右键执行

2、可以使用main方法运行:调用pytest函数执行测试,需要import pytest

  #!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @Author: zzd
# @wx: M_Haynes
# @Blog: https://editor.mdnice.com/?outId=3922c88879f84d9d87275683f6153499

import pytest

def inc(x):
    return x + 1

def test_a():
    print("---test_a")
    assert inc(0) == 1

class TestCase:
    def test_b(self):
        print("---test_b")
        assert "zz" in "zzd"

if __name__ == "__main__":
    pytest.main()
# 注解:pytest.main() 等价于 pytest.mian([",/]) 运行当前目录下的所有用例

点击main左侧绿色按钮: image 结果 image 补充:

如果放到vscode中,会执行工程下所有用例,只运行当前模块的用例,需要增加参数 file, 表示当前文件 image

命令运行

注意: 这里需要将前面写的 main 方法进行注销 image

在Terminal 中 进入项目目录,执行pytest

test_a改为失败,一个成功一个失败,成功是.,失败是F

pytest等价于python -m pytest image

注意: 如果没有main方法,执行 python case/test_zcs_example.py ,则不会有任何结果 image 如果有main方法: image

1. 用pytest的解释器执行用例:
  1、命令行中直接执行pytest
  2、pycharm 中方法和类、直接点绿色执行按钮,运行; 模块和包,选中模块或者包,右键运行;或者非测试方法处点击右键执行(此时pycharm已设置默认测试执行器师pytest)
2. 用python的解释器执行用例:
  1、命令中执行python -m pytest 调用pytest (jenkins持续集成可用到,可指定不同版本的python)
  2、有main函数,命令中执行python xxx.py, 调用py文件中main函数中的pytest.main(); 说明: 直接执行这个模块,被执行的模块是main(可 print(_name_)查看结果),如果此模块被其他模块导入,这个模块就不是main了

主要命令参数

image
image

-h参数

pytest -h 的结果分类:

  1. 命令行参数 用于pytest运行时的参数,比如-k、-m等,有通用类、报告类、收集类、调试类、日志类等

通用类 image 报告类 image 告警 image

收集 image

调试 image 日志 image 2. 元数据 image 3.配置参数:pytest.ini中配置的参数 image 4.环境变量 image 5.重跑失败 image

-s参数

示例:上面示例发现,如果用例执行成功,print内容没显示,可以加-s参数捕获print函数的输出 image

本文由 mdnice 多平台发布

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周承森

敲键盘不易~ 给点鼓励~ 感恩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值