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

相关推荐
whoarethenext23 分钟前
C++ OpenCV 学习路线图
c++·opencv·学习
恰薯条的屑海鸥37 分钟前
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
网络·学习·安全·web安全·渗透测试
Lester_11011 小时前
嵌入式学习笔记 - freeRTOS vTaskPlaceOnEventList()函数解析
笔记·学习
moxiaoran57532 小时前
uni-app学习笔记二十三--交互反馈showToast用法
笔记·学习·uni-app
恰薯条的屑海鸥10 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
喜欢吃燃面10 小时前
C++刷题:日期模拟(1)
c++·学习·算法
2301_7976042411 小时前
学习记录:DAY32
学习
蓝婷儿12 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
叶子20242212 小时前
学习使用YOLO的predict函数使用
人工智能·学习·yolo
jackson凌12 小时前
【Java学习笔记】SringBuffer类(重点)
java·笔记·学习