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
Pycharm 默认测试执行器为Pytest
- 进入 Tools->Python Intergrated Tools
- 选择 Default test runner 为 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 下执行"