哈咯,大家,我们今天来学习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 B3CA​bpaste.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单元测试框架相关推荐

  1. pytest单元测试框架简介

    一.什么是单元测试框架 单元测试框架是指:在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试. 二.单元测试框架的分类 Java: Juint.TestNG Python: unni ...

  2. pytest单元测试框架

    参考:https://www.bilibili.com/video/BV14i4y1c7Jo?from=search&seid=5485646383256203318 1.单元测试框架 2.单 ...

  3. pytest单元测试框架基本操作

    pytest 什么是单元测试框架? 单元测试是指在软件开发当中,针对软件的最小单元(函数.方法)进行正确性的检查测试. 单元测试框架主要做什么? 测试发现:从多个文件里面去找到我们测试用例. 测试执行 ...

  4. python制作考试系统_python测试框架数据生成工具最全资源汇总

    xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...

  5. 人工智能python线上培训系统_Python人工智能学习线路

    Python有非常多优秀的深度学习库可用,比如matplotlib.Numpy.sklearn.keras等大量的库,像pandas.sklearn.matplotlib这些库都是做数据处理.数据分析 ...

  6. python中的帮助系统_python系统模块

    Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...

  7. python语言1002python语言_PYTHON语言学习

    PYTHON 语言学习 通过两个星期的自学 python 语言,初步了解到 python 的知识构架.它比 C 语言和 C++ 语 言在某种程度上来说要简单些, 但是也有很多我不懂的东西. 陈老师给我 ...

  8. python制作英语字典_python如何制作英文字典

    本文实例为大家分享了python制作英文字典的具体代码,供大家参考,具体内容如下 功能有添加单词,多次添加单词的意思,查询,退出,建立单词文件. keys=[] dic={} def rdic(): ...

  9. python制作查询软件_python 制作本地应用搜索工具

    一.准备工作 请确保已经安装tkinter.pyperclip.threading 二.预览 1.启动 这是程序启动的主界面. 2.运行 搜索之后的界面. 3.结果 选择应用,右击鼠标复制它的下载链接 ...

最新文章

  1. esl8266开发之旅_从ESL老师到越南软件开发人员的旅程
  2. ASP.net 2.0 Migrating系列 - Master Pages 感触
  3. P1217 回文质数(打表)
  4. Designing GANs:又一个GAN生产车间
  5. UVA11825: Hackers' Crackdown (状压dp)
  6. SAP UI5 使用 CSS 的一些注意事项
  7. python3安装第三方库教程
  8. Python高手之路【十】python基础之反射
  9. Unsupported major.minor version 51.0
  10. C/C++ 程序设计员应聘常见面试试题深入剖析(2)
  11. Docker从理论到实践(八)------Docker网络基础配置
  12. 数字金字塔MySQL存储过程_千金良方——MySQL性能优化金字塔法则
  13. BZOJ - 4516: [Sdoi2016]生成魔咒
  14. torch.nn模块 池化层
  15. 反激式开关电源输出电压的PID控制之MATLAB仿真
  16. 考研完形填空 方法技巧*
  17. 托管 非托管_托管的完整指南-第1部分
  18. 6S管理的导入怎么做才能行之有效?
  19. SSM整合(基于配置类整合
  20. 螺旋方阵 螺旋方阵题目描述所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。

热门文章

  1. Javascript实现重力弹跳拖拽运动效果
  2. linux——线程通信(2)
  3. android设置大小能用小数,Android中关于保留小数点位数的处理
  4. Js拼接嵌套php代码,分享一个js文件中嵌套php会出错的问题
  5. java正则匹配非html字符串_java正则表达式去除html中所有的标签和特殊HTML字符(以开头的)...
  6. c语言改变doss窗口的颜色,C语言第三次模拟练习题部分解答
  7. pytorch的backward参数
  8. tensorflow中GPU的设置
  9. QT综合示例:QT串口通信
  10. javaweb实现验证码功能