pytest基础学习

前言

pytest是单元测试框架,python当中比较流行的单元测试框架,一个是pytest,一个是unittest,用来做

自动化,无论是UI还是接口,主要是可以配合对应的测试工具,使其有精美的报告,丰富的断言和参数

化。unittest这个框架是官方库,pytest是在unittest框架基础上进行的进一步封装。pytest框架是可以

兼容运行unittest写的脚本的。

好处

  1. 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  2. 能够支持简单的单元测试和复杂的功能测试
  3. 支持参数化
  4. 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
  5. 支持重复执行(rerun)失败的 case
  6. 支持运行由 nose, unittest 编写的测试 case
  7. 可生成 html 报告
  8. 方便的和持续集成工具 jenkins 集成
  9. 可支持执行部分用例
  10. 具有很多第三方插件,并且可以自定义扩展
    安装命令
    pip install pytest

查看request版本

pytest --version

pytest用例的设计原则

用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的

文件名以 test_.py 文件和 test.py
以 test
开头的函数

以 Test 开头的类,不能包含 init 方法

以 test_ 开头的类里面的方法

所有的包 pakege 必须要有 init.py 文件

pycharm设置执行用例配置

查看pytest命令行参数

在pycharm中的terminal面版中输入:pytest -h 或者pytest -help

1,执行当前文件夹下面的所有文件:

pytest 文件名/

2,执行具体的某一测试文件:

pytest 脚本名称.py

3,执行测试用例名称包含qq的所有用例

pytest -k qq test_1.py

4,执行测试用例名称不包含qq的所有用例

pytest -s -k "not qq" test_1.py

5,执行同时匹配不同的用例名称

pytest -s -k "wechat or webo" test_1.py

6,执行运行.py模块里面的某个函数

pytest test_mod.py::test_func

7,运行.py模块里面,测试类里面的某个方法

pytest test_mod.py::TestClass::test_method

8,遇到错误时停止测试

pytest -x test_class.py

9,简单打印,只打印测试用例的执行结果

pytest -q test_1.py

10,详细打印

pytest -v test_1.py

或者:pytest -s test_1.py

断言

pytest 里面断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种

用例执行状态:

passed:测试通过

failed:断言失败

error:用例本身写的质量不行,本身代码报错(譬如:fixture不存在,fixture里面有报错)

xfail:预期失败,加了 @pytest.mark.xfail()

特殊的函数

模块级别:

setup_module:在每个模块执行前执行

teardown_module:在每个模块执行后执行

(有几个模块就有几对)

函数级别:

setup_function:在每个函数执行前执行

teardown_function:在每个函数执行后执行

(有几个函数就有几对)

类级别:

setup_class:在每个类执行前执行

teardown_class:在每个类执行后执行

(有几个类就有几对)

方法级别:

setup_method:在类里面的每个方法执行前执行

teardown_method:在类里面每个方法执行后执行

方法细化级别:

setup

setdown

(和方法级别一致)

跳过测试用例:

(跳过执行测试用例,有可选参数reason:跳过的原因,会在执行结果中打印)

复制代码
@pytest.mark.skip
def test_wechat():
print('此测试用例不会被执行')

注意:condition需要返回True才会跳过

复制代码
@pytest.mark.skipif(sys.platform == 'win32', reason="does not run on windows")
def test_function(self):
print("不能在window上运行")

参数化:

@pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

常用插件:

1,失败重试:pip install pytest-rerunfailures

2,allure报告插件:pip install allure-pytest

3,多断言插件:pip install pytest-assume

4,html报告插件:pip install pytest-html

5,用例重复执行插件:pip install pytest-repeat

项目中的conftest.py文件

conftest.py配置fixture注意事项:

pytest会默认读取conftest.py里面的所有fixture

conftest.py 文件名称是固定的,不能改动

不同目录可以有自己的conftest.py一个项目中可以有多个conftest.py

测试用例文件中不需要手动import conftest.py,pytest会自动查找

fixture优势:

命名方式灵活,不局限于 setup 和teardown 这几个命名

conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture

scope="module" 可以实现多个.py 跨文件共享前置

scope="session" 以实现多个.py 跨文件使用一个 session 来完成多个用例

复制代码
@pytest.fixture(scope="function", params=None, autouse=False, ids=None,
name=None)
def fixture_name():
print("fixture初始化的参数列表")

参数含义:

scope:可以理解成fixture的作用域,默认:function,还有class、module、package、session

四个【常用】

autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都

会自动调用该fixture

name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name

相关推荐
Summer_Uncle1 小时前
【C++学习】指针
c++·学习
光影少年2 小时前
AIGG人工智能生态及学习路线和应用领域
人工智能·学习
递归不收敛2 小时前
多模态学习大纲笔记(未完成)
人工智能·笔记·学习·自然语言处理
FPGA-李宇航3 小时前
FPGA中,“按键控制LED灯实验”学习中常见问题、解决思路和措施以及经验总结!!!(新手必看)
学习·fpga开发·按键控制led灯
正经教主3 小时前
【Trae+AI】和Trae学习搭建App_01:项目架构设计与环境搭建
学习·app
普蓝机器人3 小时前
面向智慧农业的自主移动果蔬采摘机器人:融合视觉识别与自动驾驶的智能化农作系统研究
人工智能·学习·机器人·移动机器人·三维仿真导航
lazily-c4 小时前
Web后端开发总结
java·学习·web·1024程序员节
于顾而言6 小时前
【笔记】Comprehensive Rust语言学习
笔记·学习·rust
im_AMBER7 小时前
React 06
前端·javascript·笔记·学习·react.js·前端框架
zyq99101_18 小时前
树与二叉树的奥秘全解析
c语言·数据结构·学习·1024程序员节