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 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

关注 + 收藏 + 点赞哦,谢谢啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python分析推特_用Python关注者的关注者抓取Twitter数据的最快方法

我在用Python在Twitter上做一个关于用户社交关系的研究。在问题是“什么是最快的方式抓取某个用户的关注者信息”我搜索了很多信息,目前正在使用Tweepy:c tweepy.Cursor(api.followers_ids, idcentre, count5000).items()while True:try:followers_ids_…

python修复不了_如何修复Python代码?

当您将变量定义为str()时,就是将它们分配给一个空字符串(尝试在命令shell或IDLE中运行str(),然后查看其返回值)。在然后,使用input()函数,您将为某些字符串重新定义变量,并且在if语句中,您将使用这些比较运…

为什么不可以使用哈曼顿距离_K-means真的不能使用曼哈顿距离吗?

问题说到k-means聚类算法,想必大家已经对它很熟悉了,它是基于距离计算的经典无监督算法,但是有一次在我接受面试时,面试官问了我一个问题:“k-means为什么不能使用曼哈顿距离计算,而使用欧式距离进行计算&a…

linux 查看进程_Linux怎么查看和监控每个进程的实时流量

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号**“智传网优”**直接开始自助**视频学习**1. 前言NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。来自NetH…

mysql修改密码1820_mysql5.7初始化密码报错ERROR1820(HY000):YoumustresetyourpasswordusingALTERUSERstateme...

1,mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码cat /var/log/mysqld.log | grep password或者:grep temporary password /var/log/mysqld.lo2,然后执行 mysql -uroot -p,输入上面的到的密码进入&am…

idea集成python_IDEA集成Python插件,SDK配置

(第一次写在博客园添加随笔, 会有些生硬,有不对的地方和描述错误之处希望可以指出)最近在学习一个新的知识点,涉及到Python的使用,因为第一次接触很多地方都不是很明白 ,好,废话不多说,现在直接…

python 弹窗不阻断线程_Javascript 如何阻断程序的运行

通常情况下 JavaScript 是单线程的,一段 Js 程序的运行会占满整个程序进程,我们通常会想方设法的通过异步编程来减少程序的阻塞,那么我们今天反其道而行之,看看通过怎么样正常的方式来阻塞 Js 运行。无限循环单线程的 JavaScript …

linux复制文件夹到另一个目录_Linux|一个命令行统计给定目录中有多少个子目录,学浪计划...

wc命令用于统计指定文件的字节数、字数、行数、并将统计结果显示出来。一般格式: wc [选项] [文件]选项:-c,--bytes 统计字节数-l,--lines 统计行数-w,--words 统计字数ls命令-l 以长格式显示文本的详细信息。-R 表示递…

mysql源码安装分析_MySQL源码分析(0):编译安装及调试(转)

编译安装为了实现MySQL的更高级别的性能调优,我们通常需要理解其内部实现机制,并对其进行优化调试。在下面的系列中,我们会分别介绍MySQL的部分内部实现机制。首先我们介绍如何从源代码部署一台MySQL服务器。1.下载MySQL Community Server源码…

前端做后台管理系统有前途吗_关于后台管理系统前端项目的思考

开发后台管理系统是大部分前端开发人员接触过的项目,如何更好的进行项目的搭建、组件的开发、数据结构的设计等等,这些都是需要考虑的问题。以下是我结合一些项目的经历和其他大佬的项目代码与技术分享,做出了对于后台管理系统中前端项目的思…

用python绘制熊猫图案_绘制带有熊猫和Matplotlib的一分钟烛台

给出了以下Pandas数据帧的示例date open high low close volume0 2015-03-13 08:00:00 71.602 71.637 71.427 71.539 0.0002491 2015-03-13 08:01:00 71.541 71.563 71.461 71.501 0.0002152 2015-03-13 08:02:00 71.521 71.537 71.504 71.533 0.0000483 2015-03-13 08:03:00 7…

mysql修改主从复制id_mysql主从复制设置

三、mysql复制master和每个slave是通过unique ID来区分的(server-id选项),而且每个slave需要配置好master的主机名,日志文件名,和日志位置这些可以通过在slave会话中使用命令CHANGE MASTER TO ,存储在slave的master.info文件中--begin1.在mas…

响应式编程优点 有效_什么是响应式编程?

响应式编程是一种通过异步和数据流来构建事物关系的编程模型。这里每个词都很重要,“事物的关系”是响应式编程的核心理念,“数据流”和“异步”是实现这个核心理念的关键。为了帮助大家理解这个概念,我们不妨以APP初始化业务为例来拆解一下这…

虚拟跳线软件干什么用的_视频教程:用 ESI 的虚拟跳线给你的声音添加效果

本视频讲述了如何在互联网上给你的声音添加效果。你可以使用任何想用的效果器,而且不仅可以输入你的声音,输入信号还可以是任何乐器音源,例如键盘或吉他,你甚至可以直播你的整个工程。请先看视频:视频中使用Bitwig给声…

利用python进行数据分析第一版和第二版区别_《利用Python进行数据分析·第2版》第1章 准备工作...

1.1 本书的内容本书讲的是利用Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点。我的目标是介绍Python编程和用于数据处理的库和工具环境,掌握这些,可以让你成为一个数据分析专家。虽然本书的标题是“数据分析”,重点确实Py…

极光推送java demo_极光推送- 3 分钟 Demo - 极光文档

3 分钟快速使用 JPush Android Demo本文目的在于,指导新接触极光推送的开发者,在短短几分钟时间内把极光推送跑起来:安装 Demo 客户端到手机在 Portal 上推送通知客户端收到推送并显示在状态栏创建极光推送开发者帐号Portal 上创建应用使用注…

python猴子偷桃_Python实例100个(基于最新Python3.7版本)

Python3 100例原题地址:http://www.runoob.com/python/python-100-examples.htmlgit地址:https://github.com/RichardFu123/Python100Cases转载请标注:https://blog.csdn.net/weixin_41084236/article/details/81564963原例为Python2.7版本重…

java ldap添加用户名密码_java ldap用户密码md5加密

在这里不过多介绍ldap,因为这样的文章特别多,这里就简单直接的记录这一个问题。在springboot中通过引入spring-boot-starter-data-ldap,使用LdapTemplate真的挺方便,现在遇到一个问题,添加用户时,userPassw…

python什么元素为真_如何使用Python基础内置函数

如何使用Python基础内置函数发布时间:2020-08-05 13:46:59

java dumpstack_Java获取执行进程的dump文件及获取Java stack

转发自https://blog.csdn.net/MCC_MCC_MCC/article/details/806231561.Windows/Linux环境下查看Java进程ID方法使用Java自带的工具VisualVM工具实现,在CMD或者是Linux终端下执行“jvisualvm”命令即可以进入VisualVM控制台,双击左侧的进程即可以查看到详…