pytest简介、安装与准备 L1

1、Pytest 测试框架

前言

  • 自动化测试前,需要提前准备好数据,测试完成后,需要自动清理脏数据,有没有更好用的框架?
  • 自动化测试中,需要使用多套测试数据实现用例的参数化,有没有更便捷的方式?
  • 自动化测试后,需要自动生成优雅、简洁的测试报告,有没有更好的生成方法

Pytest 背景与优势

Pytest 是什么?

  • pytest 能够支持简单的单元测试和复杂的功能测试;
  • pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试;
  • 使用 pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。
  • pytest 支持 315 种以上的插件;

为什么要选择 Pytest

  • 丰富的第三方插件
    • 报告
    • 多线程
    • 顺序控制

为什么要选择 Pytest

  • 简单灵活
# content of test_sample.py
def inc(x):
    return x + 1


def test_answer():
    assert inc(3) == 5

为什么要选择 Pytest

  • 兼容 unittest
  • 定制化插件开发

Pytest 安装与准备

Pytest 环境安装

  • 前提:本地已配置完成 Python 环境
  • 第一种方式 pip install pytest
  • 第二种方式 PyCharm 直接安装

运行第一个脚本

# content of test_sample.py
def inc(x):
    return x + 1


def test_answer():
    assert inc(3) == 5

实操

  • 1、创建目录 Desktop(桌面)/pytestdemo1
  • 2、创建文件 test_first.py
  • 3、打开【terminal】 /【命令提示行 cmd】
  • 4、运行 pytest 回车

2、Pytest 命名规则

Pytest 有哪些格式要求?

  • 文件名
  • 方法/函数

Pytest 测试用例编写规则是什么?

类型 规则
文件 test_开头 或者 _test 结尾
Test 开头
方法/函数 test_开头
注意:测试类中不可以添加__init__构造函数

练习

  • (多选)下面哪个测试方法,符合 pytest 命名规范
    • A、测试类 TestDemo
    • B、测试方法 test_demo
    • C、测试文件 testdemo
    • D、测试包 test_demo
      答案:ABD

3、pycharm 配置与界面化运行

Pycharm 界面化安装 Pytest

pytest

Pycharm 默认测试执行器为Pytest

  1. 进入 Tools->Python Intergrated Tools
  2. 选择 Default test runner 为 pytest

pytest

4、pytest 用例结构

用例结构

  • 三部分构成
    • 用例名称
    • 用例步骤
    • 用例断言

测试用例示例

def test_XXX(self):
    # 测试步骤1
    # 测试步骤2
    # 断言  实际结果 对比 预期结果
    assert ActualResult == ExpectedResult

类级别的用例示例

class TestXXX:
    def setup(self):
        # 资源准备
        pass

    def teardown(self):
        # 资源销毁
        pass

    def test_XXX(self):
        # 测试步骤1
        # 测试步骤2
        # 断言  实际结果 对比 预期结果
        assert ActualResult == ExpectedResult

5、pytest 用例断言

pytest 测试用例断言

  • 什么是断言
  • 断言的用法

什么是断言

断言(assert),是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果。当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。

断言的用法

  • 断言写法
    • assert <表达式>
    • assert <表达式>,<描述>
assert <bool expression>;       
assert <bool expression> : <message>;    

示例 1

  • 第一种:assert <表达式>
  • 第二种:assert <表达式>,<描述>
def test_a():
    assert True

def test_b():
    a = 1
    b = 1
    c = 2
    assert a + b == c, f"{a}+{b}=={c}, 结果为真"

示例 2

  • assert <表达式>
def test_c():
    a = 1
    b = 1
    c = 2
    assert 'abc' in "abcd"

import sys
def test_plat():
    assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"