pytest基础知识一
pytest基础知识一
pytest的介绍
pytest官网:http://www.pytest.org/
pytest是Python的一款单元测试框架,在学习自动化测试过程中,我们最开学习的都是线性脚本,但是当学到一定阶段以及业务复杂度和数据量上来后,我们必须需求一种全新的框架思维来管理和规范我们的测试脚本,从而实现高类聚低耦合的理念。
pytest的作用
pytest的安装与版本查看
安装: pip install -U pytest
版本查看: pytest --version
pytest的基本应用
编写第一个简单的pytest应用
# 被测试函数
def add(a, b):
return a + b
# 测试脚本
def test_add():
assert 3 == add(1, 2)
运行结果:
platform win32 -- Python 3.8.7, pytest-6.2.5, py-1.10.0, pluggy-0.13.1
rootdir: E:\Home_Work\Home_Work2\pytest01
plugins: allure-pytest-2.9.43, Faker-8.10.1, cov-2.12.1, forked-1.3.0, html-2.1.1, metadata-1.11.0, rerunfailures-10.1, testconfig-0.2
.0, xdist-2.3.0
collected 1 item
test\test_add.py . [100%]
========================================================= 1 passed in 0.94s =========================================================
E:\Home_Work\Home_Work2\pytest01>
pytest文件和函数命令规则
pytest文件必须以 test开头或者 _ _ test.py 结尾,如 test__add 或 add_test.py结尾,否则在pytest解释器运行时,文件不能够被收集到。
pytest文件中测试类命名时,必须用Test开头
pytest文件中方法与函数命名必须要用 test__ 开头,函数没有用__test结尾的说法
def div(a, b):
return a / b
class TestDiv:
def test_div(self):
assert 1 == div(1, 1)
pytest文件的三种运行方式
命令行运行
进入需要执行的Python文件目录下,打开命令行,输入pytest 文件名 如:pytest test_add.py
PyCharm界面运行
window:
第一步先设置默认运行的框架
第二步:点击倒三角,执行脚本
pytest.main()运行pytesr文件
1.删除之前运行过的IDE缓存
2.使用pytest.mian()运行pytest文件
要将默认框架切回unittest,用Python去运行才会生效
# 测试脚本
class TestAdd:
def test_add(self):
assert 3 == add(1, 2)
def test_add2(self):
assert 5 == add(1, 4)
if __name__ == '__main__':
pytest.main(["TestAdd::test_add2", "-vs"])
pytest常用的命令行运行参数
在实际生产中,测试用例都会在Jenkins或服务器上运行,那么这时候运行方式都是采用命令行去运行
例如在Jenkins运行接口测试用例
- pytest -k “add” 执行所有测试用例名中含有“add”的用例
- pytest – s 打印测试用例中print语句
- pytest -v 增加打印细节
- pytest – x 一旦发现失败用例,停止运行
- pytest -maxfail=2 当测试遇到两条失败,立刻停止运行
- pytest -m “标签名” 给测试用例加标签
pytest的框架结构
模块级: setup_module/teardown_module 模块始末,全局的(优先最高)
函数级: setup_function/teardown_function 只对函数用例生效(不在类中)
类级: setup_class/teardown_class 只在类中前后运行一次(在类中)
方法级: setup_method/teardown_methond 开始于方法始末(在类中)
方法级: setup/teardown 运行在调用方法的前后
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
模块级(setup_module/teardown_module)模块始末,全局的(优先最高)
函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
方法级(setup_method/teardown_methond)开始于方法始末(在类中)
类里面的(setup/teardown)运行在调用方法的前后
'''
# 模块级别
def setup_module():
print("资源准备:setup module")
def teardown_module():
print("资源准备:teardown module")
def test_case1():
print("case1")
def setup_function():
print("资源准备:setup function")
def teardown_function():
print("资源消毁:teardown function")
class TestDemo:
# 执行类 前后分别执行setup_class teardown_class
def setup_class(self):
print("TestDemo setup_class")
def teardown_class(self):
print("TestDemo teardown_class")
# 每个类里面的方法前后分别执行 setup, teardown
def setup(self):
print("TestDemo setup")
def teardown(self):
print("TestDemo teardown")
def test_demo1(self):
print("test demo1")
def test_demo2(self):
print("test demo2")
class TestDemo1:
# 执行类 前后分别执行setup_class teardown_class
def setup_class(self):
print("TestDemo setup_class")
def teardown_class(self):
print("TestDemo teardown_class")
# 每个类里面的方法前后分别执行 setup, teardown
def setup(self):
print("TestDemo setup")
def teardown(self):
print("TestDemo teardown")
def test_demo1(self):
print("test demo1")
def test_demo2(self):
print("test demo2")
来源:张三♞