pytest 测试实战 1 - 入门篇

目录

  • pytest 介绍与安装
  • pytest 常用执行参数
  • pytest 框架结构
  • pytest 参数化

pytest 介绍

  • 单测框架,比 unittest 测试框架更灵活
  • 入门难度低
  • 第三方库丰富性
  • 通用性
  • 与 allure 生成的报告非常的美观
  • 定制性强

pytest 安装

pytest 运行

三种运行方式:

  • Pycharm 界面运行

  • 右键文件/目录运行

  • 使用命令行方式运行

常用的执行参数

pytest --help 帮助文档,查看所有命令行参数
pytest -x 遇到失败的用例就停止执行
pytest -m mark标签名  标记
pytest -k “add”   匹配所有名称中包含add的用例(‘add or div’ ‘TestClass’)
pytest --collect-only 只收集用例
pytest --junitxml=./result.xml   生成执行结果文件

pytest 框架结构

类似的 setup,teardown 同样更灵活

模块级: setup_module/teardown_module 模块始末,全局的(优先最高)
函数级: setup_function/teardown_function 只对函数用例生效(不在类中)
类级:   setup_class/teardown_class 只在类中前后运行一次(在类中)
方法级: setup_method/teardown_methond 开始于方法始末(在类中)
方法级: setup/teardown 运行在调用方法的前后

pytest 配置

  • pytest.ini 规则
    • pytest 的主配置文件,一般放在项目工程的根目录
    • 指定 pytest 的运行方式
    • 不能使用任何中文符号

pytest 配置

[pytest]
markers  自定义mark 标签名
addopts  运行时参数(可添加多个命令行参数,空格分隔,所有参数与命令行一致)
python_files  自定义测试文件命名规则
python_classes = Test_*   自定义测试类命名规则
python_functions= test_* check_*    自定义测试方法命名规则
norecursedirs = result logs datas test_demo*   运行时忽略某些文件夹

pytest.ini 配置日志

https://ceshiren.com/t/topic/13105

[pytest]
;日志开关 true false
log_cli = true
;日志级别
log_cli_level = info
;打印详细日志,相当于命令行加 -vs
addopts = --capture=no
;日志格式
log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
;日志时间格式
log_cli_date_format = %Y-%m-%d %H:%M:%S

注意: windows系统,pytest.ini 文件不能使用中文注释

实现参数化

待测试的输入和输出是一组数据, 可以把测试数据组织起来。

用不同的测试数据调用相同的测试方法

  • 参数化装饰函数
  • ids 参数增加可读性
  • 叠加参数化

mark.parametrize 参数化

  • 场景:测试数据是传⼊的,测试的预期结果也是传⼊的,⼆个不同的参数⼀⼀对应,输⼊的数据经过调⽤执⾏后结果是否与预期⼀致
  • 解决:使⽤ mark 中的@pytest.mark.parametrize 进⾏参数化和数据驱动更灵活
  • 应用:
    • 1、在方法,类上加上装饰器都可以,
    • 2、另外组合方式可以实现更多测试用例的自动生成

pytest 测试框架课后作业

  • 1、补全计算器(加减乘除)的测试用例
  • 2、使用参数化完成测试用例的自动生成
  • 3、在调用测试方法之前打印【开始计算】
  • 4、在调用测试方法之后打印【计算结束】