前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Pytest的基本应用(一)

Pytest的基本应用(一)

作者头像
无涯WuYa
发布于 2019-09-04 06:33:14
发布于 2019-09-04 06:33:14
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

Python的编程语言中,单元测试框架主要是pytest,unittest,和nose,其中应用最广泛的是unittest和pytest测试框架,unittest测试框架是内置的模块,安装完Python的解释器后,就可以直接导入使用,但是使用它的时候必须是继承TestCase类,才可以调用里面的方法,但是缺陷也是很明显的,它只能应用于面向对象的编程方式,无法应用于函数式的编程方式,Python语言它的优势的是可以是面向对象的编程方式,也可以是函数式的编程方式。pytest就显得自由,它把每一个以test_开头或者是_test结尾的都看成是一个测试对象,同时它的断言是Python的原生断言assert,这样使用起来更加的自由,只要编写的不管是模块还是类,符合它的要求,都是可以执行的。但是前提是需要安装pytest,它是属于第三方的库,安装的命令为:

pip install pytest

在这里先写一个函数的测试代码,来说明pytest的应用,创建f.py的模块,在里面编写以test开头的测试代码,然后在该目录下执行pytest,发现测试代码并没有执行,见如下截图:

为什么测试代码没有执行了?这是因为在pytest中,它会首先寻找以test_开头或者以_test结尾的测试模块,然后执行模块里面以test_开头或者是以_test结尾的测试代码,这里依据这个要去,编写测试模块,如下:

再次执行pytest,就会看到模块里面的测试代码都已执行,见如下的截图信息:

当然也查看详细的信息,使用到的命令为:pytest -v 就会显示出详细的执行信息,如下图所示:

在详细的信息中,会显示出执行了那个模块中的那个具体的测试用例,再完善下模块中的测试用例,执行多少个,在详细的信息中它都会显示出来,见完善后执行的截图信息,如下图所示:

在一个项目文件中,或者说是一个测试的包下面,会有很多的测试模块文件,但是并不是所有的测试模块文件需要执行,只是想执行某一个模块文件,那么就只需要在执行的时候指定这个文件就可以了,执行的命令为:pytest -v test_xunit_002.py,见执行后的结果截图信息:

见如上的截图信息,就只显示了test_xunit_002.py模块的测试代码,并没有执行另外一个模块的测试用例。

下面继续看Pytest中对测试用例执行结果的显示,如果是正确的显示passwd,也会使用.来表示,如果是错误的,也就是执行失败的,使用F来表示,也就是FAILED,完善test_xunit_0002.py模块的代码,见源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*-coding:utf-8 -*-


def test_001():
    assert  1==1


def test_002():
    assert  2==3 

见执行后正确的和错误的信息的表示,见如下的截图信息:

在执行结果中会显示出错误的详细信息,以及成功的个数和失败的个数。

在pytest框架中,如果没有指定目录,它默认是会搜索一个项目下所有可执行的测试模块以及测试模块里面的测试用例来进行的,并不在乎测试用例是在哪个package那个模块的,这样的一个过程成为“测试搜索”,只要符合它的规则的它都是会被执行的。在这里,增加几个包,在包里面增加几个测试模块,见目录结构的设计:

再次使用pytest -v来进行执行,来看“测试搜索”的过程,见执行的截图,如下图所示 :

依据如上的结果信息,pytest测试搜索的规则为:

  1. 测试文件最好是test开头或者是test为结尾
  2. 测试函数或者测试类方法应该当是test开头或者是test为结尾
  3. 测试类应当命名为Test<SomeThing>

下来依据案例继续看执行单个测试用例的文件,主要分为这么几个场景,第一个场景是执行某一个模块下的某一个测试用例,第二个场景是执行某个模块下某一分类的测试用例,先来看第一个场景,指定模块下具体的测试用例,见执行的命令:

如果某一个测试用例名称是唯一的,或者说是某一些分类,那么就可以使用命令行的-k,以及--collect-ony,-k允许使用表达式指定希望运行的测试用例,或者多个前缀或者是后缀的测试用例名称相同,--collect-only主要的应用于筛选,见模块的源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*-coding:utf-8 -*-
import  pytest

def test_001():
    pass

def test_login_001():
    pass

def test_login_002():
    pass

def test_logout_001():
    pass

def test_logout_002():
    pass

当然也可以显示出执行的详细的信息:

-m是可以很快速到找到测试类别的分组,比如登录模块是一部分的测试用例,退出是一部分的测试用例,这里我们还是以开放平台为案例,也就是说在一个测试模块中 ,有很多的测试用例,但是只是想执行openapi的测试用例,见案例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*-coding:utf-8 -*-


import  pytest

def test_001():
    pass

def test_login_001():
    pass

def test_login_002():
    pass

def test_logout_001():
    pass

def test_logout_002():
    pass

@pytest.mark.openapi
def test_open_api_001():
    pass

@pytest.mark.openapi
def test_open_api_002():
    pass

这里实现只是单纯的执行openapi的测试用例,其它的测试模块就不再执行了,执行的命令是:pytest -m openapi,见执行后的结果截图:

见执行的详细信息:

在实际的测试场景中,一般性的我们希望不管测试用例执行失败也好成功也好,都希望测试用例能够正常的执行,但是也有一种场景是执行的时候遇到测试用例执行失败,就立刻停止,这里会使用到的命令是-x,见案例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*-coding:utf-8 -*-


def test_001():
    assert 1==1

def test_002():
    assert 1+1==1

def test_003():
    assert 2+2==4

我们希望测试用例执行失败,就立刻停止,执行的命令为:pytest -x

执行到第二个测试用例,由于断言失败,所以测试用例再没有继续执行。这是符合我们的预期结果的。当然也可以指定最大失败的次数,它的命令为:--maxfail=参数,参数也就是指的是最大的失败次数。继续执行,执行的命令为:pytest --mailfail=参数

上面指的是最大失败的次数是0,所以也就等于不管是否失败,都执行所有的测试用例。这个需求相对来说使用的还是比较少,一般的来说我们都还是希望所有的测试用例执行,到最后再说具体结果的事,失败的当然再具体定位和分析,然后得出比较客观的结论报告。--tb=no是关闭错误信息,--tb=short是输出assert错误的信息,--tb=line是一行输出所有的所有,具体依据如下的截图信息来看这三个的区别和它的应用场景,第一个场景是有错误,但是不显示错误的信息,执行的命令是:pytest --tb=no

第二个场景是有错误就只输出assert的这一行的信息,执行的命令为:pytest --tb=short

第三场景是显示错误信息,并且显示在一行的内容,执行的命令为:pytest --tb=line,如下图所示:

--lf命令值的是执行测试用例失败后,希望能够定位到该测试用例并且重新执行,它的好处是能够很快速的找到失败的测试用例见案例的源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*-coding:utf-8 -*-


def test_001():
    assert 1==1

def test_002():
    assert 1+1==1

def test_003():
    assert 2+2==4

中间的测试用例断言它是存在问题,但是我们希望能够很快速的定位到,执行的命令为:pytest --lf,见输出结果截图:

显示出第二个测试用例失败,很快速的定位到了,并且显示出了断言的失败信息。

--ff是执行完剩余的测试用例,是一个很奇怪的解释,是不是意味着执行终止了,然后由它负责执行完剩余的测试用例了,是否和-x命令冲突了,执行的命令为:pytest --ff

-v就是很简单了,打印出很详细的信息,-q与-v是相反的,就是打印出简单的信息,见执行的命令:

如上可以看到打印的信息确实很简单的,但是有个好处是失败的测试用例它还是显示出了很详细的信息的。这点我觉得特别的好。

--duration是统计出那些测试用例执行速度慢,这点在接口测试特别的好用,可以看到那个接口请求响应慢,默认是0,耗时从长到短依次排序显示,见案例的源码,同样的网络环境测试那个网站访问速度快。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*-coding:utf-8 -*-

import  requests


def test_get_page_baidu(url='http://www.baidu.com/'):
    r=requests.get(url=url)
    assert r.status_code==200

def test_get_page_taobao(url='http://www.taobao.com/'):
    r=requests.get(url=url)
    assert r.status_code==200

def test_get_page_qq(url='http://www.qq.com/'):
    r=requests.get(url=url)
    assert r.status_code==200

执行的命令为:pytest --duration=0,见执行后的命令信息:

真的是没有对比就没有伤害,有了对比伤害也就出来了,百度的耗时是最长是,淘宝是耗时是最短的。结果是那么的让人不可思议的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
网站出现卡顿是什么原因,要怎么解决?
网站卡顿是指在用户访问网站时,页面加载缓慢,交互不流畅的现象。这种问题严重影响用户体验,可能导致用户流失和业绩下降。本文将探讨网站卡顿的原因,并提供解决卡顿问题的方法,帮助开发人员提升网站性能和用户体验。
海拥
2023/06/27
1.3K0
网站出现卡顿是什么原因,要怎么解决?
网络性能优化全攻略:让你的网络速度飞起来(7/10)
在1999年之前,人们一般认为网络的结构都是随机的。但随着Barabasi和Watts在1999年分别发现了网络的无标度和小世界特性并分别在世界著名的《科学》和《自然》杂志上发表了他们的发现之后,人们才认识到网络的复杂性。
正在走向自律
2024/12/18
1.3K0
网络性能优化全攻略:让你的网络速度飞起来(7/10)
32. 网站性能介绍
网站性能对于普通用户来说,最直接的体现就是响应时间。用户在浏览器上直观感受到的网站响应速度,即从客户端发送请求,到服务器返回响应内容的时间。
Devops海洋的渔夫
2022/01/17
4830
32. 网站性能介绍
安装SSL证书会拖慢网站访问速度吗?
随着网络安全意识的提高,越来越多的网站开始采用SSL证书来保护用户数据的安全性。然而,一些人担心安装SSL证书会导致网站的访问速度变慢。本文将解释SSL证书的工作原理,并讨论SSL证书对网站访问速度的影响。同时,我们还将提供一些减小SSL证书影响的方法,以帮助读者更好地理解和管理SSL证书。
海拥
2023/06/27
8120
安装SSL证书会拖慢网站访问速度吗?
Jtti:云服务器文件传输很慢怎么回事儿
随着云计算技术的不断发展,越来越多的企业和个人开始使用云服务器。然而,很多用户在进行文件传输时常常遇到速度缓慢的问题,这不仅影响工作效率,还可能导致重要任务的延误。那么,云服务器文件传输很慢的原因是什么呢?如何有效解决这些问题?本文将对此进行详细探讨。
jtti
2024/08/23
4940
如何在3分钟内提高网站打开速度?
对于一个用户来说,判断一个网站好坏的首要指标就是网站的打开速度。有研究表明:用户打开网站最满意的时间是3秒以下,网站打开时间超过10秒,就会有98%的用户选择直接关闭网站。如此严重的用户流失对于站长和企业来说,都是非常严重的问题:无论你的网站布局有多么合理,素材有多么精美,内容有多么无敌,都再无用武之地。这时候,我们该怎么办? 在开始分析解决问题前,先得对整个网站系统有个清晰的理解。网站是单机部署,还是多机部署?有没有用到负载均衡?当前网站的QPS多高,各机器负载情况如何?最好能用可视化图形画出清晰
腾讯云开发者
2021/05/11
2.4K0
Jtti:常见的云服务器加速方式有哪些
云服务器加速方式可以提高服务器性能、优化网络连接和加速应用程序响应时间。以下是一些常见的云服务器加速方式:
jtti
2023/09/20
4180
如何优化VPS服务器性能,提升网站访问速度?
随着互联网的发展,越来越多的企业开始使用VPS服务器来托管其网站。然而,一些企业经常会遇到网站速度慢、响应时间长等问题,这不仅会影响用户的体验,还会导致客户流失。因此,优化VPS服务器的性能,提升网站访问速度变得尤为重要。本文将介绍如何通过一系列优化措施来提高VPS服务器的性能,从而实现网站的快速访问。
一枕寒凉
2023/05/10
5.2K0
通过DeepSeek来优化提高WordPress网站的打开速度
优化WordPress网站的打开速度需要从多个层面入手,涵盖服务器性能、代码优化、资源加载策略等。以下是详细的优化方向及具体操作建议:
用户7055642
2025/04/25
1490
通过DeepSeek来优化提高WordPress网站的打开速度
国外主机带来的惊喜!你不可错过的网站加速秘籍!
在当今数字化时代,网站速度对于用户体验和搜索引擎排名至关重要。而选择合适的主机服务提供商是确保你的网站快速加载的关键。这篇文章将向你介绍国外主机的惊喜,并提供一些不可错过的网站加速秘籍!如果你想了解如何优化你的网站并提升用户体验,那么请继续阅读。
一只扑棱蛾子
2023/05/24
2.1K0
国外主机带来的惊喜!你不可错过的网站加速秘籍!
一文了解CDN(内容分发网络)
在快速发展的数字时代,内容分发网络(CDN)已成为优化网站性能、提升用户体验的关键技术。本文将深入探讨CDN的工作原理,以及它是如何改善数据传输和网络安全性的。
coderidea
2023/12/26
8380
一文了解CDN(内容分发网络)
图片数量多的网页打开慢的原因和解决办法
一个页面里面引入了大量小图片,单张大小约十几KB,网站文本主体显示较快,但整个页面打开的速度很慢,浏览器F12控制台上看大多都是排队从服务器下载图片,加载图片。
参谋带个长
2024/06/21
5890
浅谈影响网站打开速度慢的十大原因
在做网站SEO优化时,经常会遇到网站打开速度慢的问题,影响了整个网站的用户体验。用户通过搜索引擎来到网站,网站的打开速度就是第一印象,这印象分要是丢了,会影响整个网站的布局,首先是网站跳出率极高,转化率基本没有,更别说订单了。以下是茹莱神兽整理的关于影响网站打开速度的十大原因分析:
茹莱神兽
2022/02/19
3.4K0
浅谈影响网站打开速度慢的十大原因
缓存服务器:web服务器搭建要考虑的因素有哪些
在搭建Web服务器时,需要考虑多个因素以确保服务器的性能、安全性和可扩展性,以下是一些主要考虑因素的详细描述:
jtti
2024/05/30
1680
一篇文章弄懂CDN技术原理
概述 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰。
java思维导图
2018/11/08
2.3K0
web网站加速之CDN(Content Delivery Network)技术原理
在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度、优化现有Internet中信息的流动,需要在用户和服务器间加入中间层CDN. 使用户能以最快的速度,从最接近用户的地方获得所需的信息,彻底解决网络拥塞,提高响应速度,是目前大型网站使用的流行的应用方案.
用户5640963
2019/07/26
2.9K0
web网站加速之CDN(Content Delivery Network)技术原理
详解web缓存(转)
缓存分为服务端侧(server side,比如 Nginx、Apache)和客户端侧(client side,比如 web browser)。常用的服务端缓存有CDN缓存,客户端缓存就是指浏览器缓存。
山河木马
2019/03/05
6110
详解web缓存(转)
网络优化系列:探讨网络请求的性能提升策略
网络请求的性能直接关系到用户体验的优劣。本文将探讨网络请求的各个关键步骤,并提供针对每个环节的优化策略,以提升整体网络性能。此外,本文还将回顾笔者的相关历史文章,形成一个系统的网络优化系列,帮助读者更好地理解和应用这些优化方法。
陆业聪
2024/11/14
2660
网络优化系列:探讨网络请求的性能提升策略
《大型网站技术架构》读书笔记三:大型网站核心架构要素
此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。
Edison Zhou
2018/08/20
5530
《大型网站技术架构》读书笔记三:大型网站核心架构要素
【详解】解决远程连接mysql很慢的方法(mysql_connect打开连接慢)
在开发和运维过程中,有时会遇到从远程服务器连接MySQL数据库时速度非常慢的问题。这种情况不仅影响开发效率,还可能对生产环境造成负面影响。本文将探讨几种常见的解决方案,帮助优化远程连接MySQL的速度。
大盘鸡拌面
2025/02/03
5020
推荐阅读
相关推荐
网站出现卡顿是什么原因,要怎么解决?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档