python制作考试系统_Python系统学习 - Pytest单元测试框架
哈咯,大家,我们今天来学习pytest单元测试框架,这个框架要比unittest更加易于使用,结构性也更加好,希望大家能够从中学习到有用的东西,然后在下一章,我们来使用pytest单元测试框架来搭建一个web自动化测试项目,一起加油!
直接上整体学习项目结构图:pytest项目结构
pytest1.安装pytest:pip3 install pytest
2.pytest框架下的,测试文件和测试函数都要以test开头
3.在命令行输入,pytest,即会执行test开头的文件
4.pytest.main()也同样可以开始执行 - pytest会在当前命令行所在目录下全局搜索test开头的文件进行执行测试
这里我们主要针对unittest 和 pytest的不同之处进行学习
一、断言:
pytest并没有提供专门的断言方法,而是直接使用assert进行断言,如:
assert a == b
assert a in b
assert abc() is True
assert not abc()
assert abc() is False
二、Fixture:
是对测试方法、测试函数、测试类和整个测试文件进行初始化或还原测试环境
例:
# 装饰器从session -> module -> class -> function
(都是针对每个里面包含的用例去执行,覆盖单位是用例)
session:多个文件调用一次,可以跨.py文件调用,每个.py是一个module
module:每个.py文件调用一次,每个.py是一个module
class:每个类调用一次
function:每个函数或方法调用一次
# 如果你想一个module下的都用上,那就打开改成True, 如下,这样就不需要往每个函数里传入fixture
# yield xxx接着后续的代码实现tearDown的功能
# 如果是把fixture单独存放,定义一个conftest.py, 该文件要和case在同级目录下,case文件中声明# content of conftest.py
conftest.py:
# coding = utf8
import os
os.path.abspath(".")
from time import sleep
import pytest
"""
a py file which saved pytest's fixture for use
"""
@pytest.fixture(scope = "function")
def before_case_execute():
sleep(3)
yield before_case_execute
sleep(3)
test_sample.py:
# coding = utf8
# content of conftest.py
import os
os.path.abspath(".")
import pytest
from time import sleep
# 装饰器从session -> module -> class -> function
# 如果你想一个module下的都用上,那就打开改成True, 如下,这样就不需要往每个函数里传入fixture
# yield实现tearDown的功能
@pytest.fixture(scope = "function")
def before_each_case():
sleep(3)
print("Set up now")
yield before_each_case
sleep(3)
print("Tear down now")
def add(x):
return x + 1
# def test_add(before_each_case):
def test_add(before_case_execute):
assert add(3) == 4
if __name__ == "__main__":
pytest.main()三、参数化
pytest的参数化与unittest类似,通过@pytest.mark.parameterize进行装饰,传入需要的值名、值、以及为每一个值指定对应的case名
test_parameterize.py:
# coding = utf8
import os
os.path.abspath(".")
# pytest参数化
import pytest
@pytest.mark.parametrize(
"x, y, z",
[(1, 2, 9), (4, 5, 9), (7, 8, 5)],
ids = ["case1", "case2", "case3"]
)
def test_add(x, y, z):
assert x + y == z
# terminal进入当前py文件路径,pytest -v test_parameterize.py指定执行
# if __name__ == "__main__":
# pytest.main(["-v", "-k add", "./test_parameterize.py"])四、运行测试
1.指定名称中包含某字符串的用例执行:pytest -k add test_parameterize.py
2.减少运行的冗长日志信息:pytest -q test_parameterize.py
3.如果出现一条测试用例失败则退出测试:pytest -x test_parameterize.py
4.运行测试目录:pytest ./pytest_object
5.指定特定类或方法执行:pytest test_parameterize.py::test_add 用::进行分隔
6.通过main()运行测试:pytest.main(["-v", "-k add", "./test_parameterize.py"]) 每个参数用逗号隔开
五、生成测试报告
1.生成JUnit XML文件:pytest ./pytest_project --junit-xml=./pytest_project/report/pytest_log.xml
2.生成在线测试报告:pytest test_parameterize.py --pastebin=all 执行到最后会生成一个链接,如下:View paste B3CAbpaste.net
六、conftest配置文件
(conftest.py 是pytest特有到本地测试配置文件:
1.可以用来设置项目级别的Fixture
2.导入外部插件
3.指定钩子函数)
pytest扩展1.生成HTML格式的测试报告:
pip3 install pytest-html
pytest ./pytest_project --html=./pytest_project/report/pytest_html_result.html
2.在用例失败时重试:
pip3 install pytest-rerunfailures
pytest -v pytest_expand.py --reruns 3
(重试机制可以增加测试用例的稳定性,避免因为一些网络原因、机器卡顿导致的问题)
3.pytest-parallel扩展:
pip3 install pytest-parallel
pytest -q pytest_expand.py --tests-per-worker auto
(使用并行运行测试case测试可能会导致互相产生干扰,需要谨慎使用)
# coding = utf8
import os
os.path.abspath(".")
import pytest
"""
pytest扩展
"""
# pytest ./pytest_project --html=./pytest_project/report/pytest_html_result.html
def test_add():
assert 1 + 1 == 3
关注 + 收藏 + 点赞哦,谢谢啦~
python制作考试系统_Python系统学习 - Pytest单元测试框架相关推荐
- pytest单元测试框架简介
一.什么是单元测试框架 单元测试框架是指:在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试. 二.单元测试框架的分类 Java: Juint.TestNG Python: unni ...
- pytest单元测试框架
参考:https://www.bilibili.com/video/BV14i4y1c7Jo?from=search&seid=5485646383256203318 1.单元测试框架 2.单 ...
- pytest单元测试框架基本操作
pytest 什么是单元测试框架? 单元测试是指在软件开发当中,针对软件的最小单元(函数.方法)进行正确性的检查测试. 单元测试框架主要做什么? 测试发现:从多个文件里面去找到我们测试用例. 测试执行 ...
- python制作考试系统_python测试框架数据生成工具最全资源汇总
xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...
- 人工智能python线上培训系统_Python人工智能学习线路
Python有非常多优秀的深度学习库可用,比如matplotlib.Numpy.sklearn.keras等大量的库,像pandas.sklearn.matplotlib这些库都是做数据处理.数据分析 ...
- python中的帮助系统_python系统模块
Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...
- python语言1002python语言_PYTHON语言学习
PYTHON 语言学习 通过两个星期的自学 python 语言,初步了解到 python 的知识构架.它比 C 语言和 C++ 语 言在某种程度上来说要简单些, 但是也有很多我不懂的东西. 陈老师给我 ...
- python制作英语字典_python如何制作英文字典
本文实例为大家分享了python制作英文字典的具体代码,供大家参考,具体内容如下 功能有添加单词,多次添加单词的意思,查询,退出,建立单词文件. keys=[] dic={} def rdic(): ...
- python制作查询软件_python 制作本地应用搜索工具
一.准备工作 请确保已经安装tkinter.pyperclip.threading 二.预览 1.启动 这是程序启动的主界面. 2.运行 搜索之后的界面. 3.结果 选择应用,右击鼠标复制它的下载链接 ...
最新文章
- esl8266开发之旅_从ESL老师到越南软件开发人员的旅程
- ASP.net 2.0 Migrating系列 - Master Pages 感触
- P1217 回文质数(打表)
- Designing GANs:又一个GAN生产车间
- UVA11825: Hackers' Crackdown (状压dp)
- SAP UI5 使用 CSS 的一些注意事项
- python3安装第三方库教程
- Python高手之路【十】python基础之反射
- Unsupported major.minor version 51.0
- C/C++ 程序设计员应聘常见面试试题深入剖析(2)
- Docker从理论到实践(八)------Docker网络基础配置
- 数字金字塔MySQL存储过程_千金良方——MySQL性能优化金字塔法则
- BZOJ - 4516: [Sdoi2016]生成魔咒
- torch.nn模块 池化层
- 反激式开关电源输出电压的PID控制之MATLAB仿真
- 考研完形填空 方法技巧*
- 托管 非托管_托管的完整指南-第1部分
- 6S管理的导入怎么做才能行之有效?
- SSM整合(基于配置类整合
- 螺旋方阵 螺旋方阵题目描述所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。
热门文章
- Javascript实现重力弹跳拖拽运动效果
- linux——线程通信(2)
- android设置大小能用小数,Android中关于保留小数点位数的处理
- Js拼接嵌套php代码,分享一个js文件中嵌套php会出错的问题
- java正则匹配非html字符串_java正则表达式去除html中所有的标签和特殊HTML字符(以开头的)...
- c语言改变doss窗口的颜色,C语言第三次模拟练习题部分解答
- pytorch的backward参数
- tensorflow中GPU的设置
- QT综合示例:QT串口通信
- javaweb实现验证码功能