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

相关推荐
虾球xz3 分钟前
游戏引擎学习第270天:生成可行走的点
c++·学习·游戏引擎
吃货界的硬件攻城狮1 小时前
【STM32 学习笔记】USART串口
笔记·stm32·单片机·学习
XQ丶YTY1 小时前
记录一下学习kafka的使用以及思路
分布式·学习·kafka
吴爃1 小时前
linux搭建hadoop学习
linux·hadoop·学习
海尔辛1 小时前
学习黑客Linux Flags and Switches 入门
linux·运维·学习
冰茶_2 小时前
WPF之绑定模式深入
学习·microsoft·微软·c#·wpf·绑定模式
吃货界的硬件攻城狮2 小时前
【STM32 学习笔记】I2C通信协议
笔记·stm32·单片机·学习
晨曦学习日记2 小时前
C++学习笔记
c++·笔记·学习
Humbunklung2 小时前
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类字体QFont)
笔记·python·学习·pyqt
Kx…………2 小时前
Java EE(Spring+Spring MVC+MyBatis)从入门到精通企业级应用开发教程——1初识MyBatis框架
学习·spring·java-ee·mvc·mybatis