从0到1精通自动化测试,pytest自动化测试框架,doctest测试框架(十四)

news2024/11/19 0:44:16

一、前言

doctest从字面意思上看,那就是文档测试。doctest是python里面自带的一个模块,它实际上是单元测试的一种。
官方解释:doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果

doctest测试用例可以放在两个地方

  1. 函数或者方法下的注释里面
  2. 模块的开头

二、案例

先看第一个案例,将需要测试的片段,标准格式,需要运行的代码前面加>>> ,相当于进入cmd这种交互环境执行,期望的结果前面不需要加 >>>

>>> multiply(4, 3)
    12
>>> multiply('a', 3)
    'aaa'

放到multiply函数的注释里

def multiply(a, b):
    """
    fuction: 两个数相乘
    >>> multiply(4, 3)
    12
    >>> multiply('a', 3)
    'aaa'
    """
    return a * b
if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

运行结果

Trying:
    multiply(4, 3)
Expecting:
    12
ok
Trying:
    multiply('a', 3)
Expecting:
    'aaa'
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.multiply
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

从运行的结果可以看出,虽然函数下方的注释里面有其它内容“fuction: 两个数相乘”,但不会去执行,只识别“>>>”这种符号。2个测试用例都是通过的,实际的结果与期望的结果一致

三、失败案例

doctest的内容放到.py模块的开头也是可以识别到的

# 保存为xxx.py
'''
fuction: 两个数相乘
>>> multiply(4, 8)
12
>>> multiply('a', 5)
'aaa'
'''

def multiply(a, b):
    """
    fuction: 两个数相乘
    """
    return a * b
if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

运行结果2个都失败

**********************************************************************
1 items had failures:
   2 of   2 in __main__
2 tests in 2 items.
0 passed and 2 failed.
***Test Failed*** 2 failures.

verbose参数,设置为True则在执行测试的时候会输出详细信息

四、cmd执行

以上案例是在编辑器直接运行的,如果在cmd里面,也可以用指令去执行

$ python -m doctest -v xxx.py

m 参数指定运行方式doctest
-v参数是verbose,带上-v参数相当于verbose=True

五、pytest运行

pytest框架是可以兼容doctest用例,执行的时候加个参数 —doctest-modules ,这样它就能自动搜索到doctest的用例

$ pytest -v —doctest-modules  xxx.py


如下是函数下的文档

 fuction: 两个数相乘

>>> multiply(4, 3)
12
>>> multiply('a', 5)
'aaa'

 运行结果

D:\test1122\a>pytest -v --doctest-modules  xxx.py
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 -- d:\soft\
python3.6\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.0', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages':
{'pytest': '3.6.3', 'py': '1.5.4', 'pluggy': '0.6.0'}, 'Plugins': {'metadata': '
1.7.0', 'html': '1.19.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'D:\\soft\\j
dk18\\jdk18v'}
rootdir: D:\test1122\a, inifile:
plugins: metadata-1.7.0, html-1.19.0, allure-adaptor-1.7.10
collected 1 item

xxx.py::xxx.multiply FAILED                                              [100%]

================================== FAILURES ===================================
___________________________ [doctest] xxx.multiply ____________________________
004
005     fuction: 两个数相乘
006     >>> multiply(4, 3)
007     12
008     >>> multiply('a', 5)
Expected:
    'aaa'
Got:
    'aaaaa'

D:\test1122\a\xxx.py:8: DocTestFailure
========================== 1 failed in 0.16 seconds ===========================

结果可以看出,文档里面的每一行都被执行了,当遇到测试不通过的用例时,就不会继续往下执行了

六、doctest独立文件

doctest内容也可以和代码抽离开,单独用一个.txt文件保存

在当前xxx.py同一目录新建一个xxx.txt文件,写入测试的文档,要先导入该功能,导入代码前面也要加 >>>
>>> from xxx import multiply
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'

 cmd执行“python -m doctest -v xxx.txt测试结果

>python -m doctest -v  xxx.txt
Trying:
    from xxx import multiply
Expecting nothing
ok
Trying:
    multiply(4, 3)
Expecting:
    12
ok
Trying:
    multiply('a', 3)
Expecting:
    'aaa'
ok
1 items passed all tests:
   3 tests in xxx.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

【软件测试技术交流(资料分享)】:320231853(备注C)icon-default.png?t=N5K3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=VhgK91CsO3OcxW86SoFS1zYSMHCtLapU&authKey=t1D%2F3BhXbUcLKimCIzg91AXnhvhU0RvSTRQDRzK3JcwlXtJFCQFyiaGK0cYZBI5v&noverify=0&group_code=320231853

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

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

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

相关文章

iostat命令详解

语法&#xff1a; iostat [ 选项 ] [<时间间隔> <次数> ] 支持的参数及参数详解&#xff1a; -c&#xff1a;仅显示CPU统计信息&#xff0c;与-d选项互斥 -d&#xff1a;仅显示磁盘统计信息&#xff0c;与-c选项互斥 -h&#xff1a;使用NFS&#x…

Prophet算法框架预测输出及使用方法

Prophet 时间序列预测框架入门实践笔记 接续上文&#xff0c;预测结果&#xff1a; forecast m.predict(future) forecast[[ds, yhat, yhat_lower, yhat_upper]].tail(48)forecast 是Pandas的DataFrame&#xff0c;数据项及含义如下&#xff1a; ‘ds’&#xff1a; 是日期时…

内容变现有了VVIP会员门槛,微博这么做图个啥?

文 | 螳螂观察 作者 | 易不二 充分竞争的存量时代&#xff0c;用户是最宝贵的平台资产。 这不仅体现在今年618期间&#xff0c;各大电商平台的“抢人大战”&#xff0c;更具体的风向还在于&#xff0c;作为移动互联网时代最有影响力的社交媒体之一&#xff0c;微博调整了新的…

网络安全——数据链路层安全协议

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.数据链路层安全协议简介 1.数据链路安全性 二.局域网数据链路层协议 1…

2023年亚马逊云科技中国峰会记录

前言 有幸抽到了亚马逊云科技中国峰会的门票&#xff0c;恰好又是在上海举行的&#xff0c;并且看预告有很多热点内容&#xff0c;所以就参加了。 27日一早就赶到了世博中心&#xff0c;此时已经排起了长队。 看来与会者还是蛮多的。 整体分为以下几个环节&#xff1a; 一.上…

津津乐道设计模式 - 外观模式详解(简化女友使用你的支付账户购物的支付体验)

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

spark外置external shuffle service使用介绍

shuffle是什么 shuffle是Hadoop大数据计算中&#xff0c;一个必不可少的环节&#xff0c;通过shuffle可以将不同节点上的同类数据给移动到一起&#xff0c;这在分组&#xff0c;排序&#xff0c;聚合的场景中非常常见&#xff0c;简单图示如下&#xff1a; MapReduce数据处理模…

Vue.js中的状态管理:理解和使用Vuex

目录 前言 Vue.js 样式绑定 Vue.js class class 属性绑定 实例 1 实例 2 实例 3 实例 4 数组语法 实例 5 实例 6 Vue.js style(内联样式) 实例 7 实例 8 实例 9 Vue.js 组件 全局组件 全局组件实例 局部组件 局部组件实例 Prop Prop 实例 动态 Prop Pro…

echarts+echarts-gl vue2制作3D地图+下钻功能+标记点功能,解决dblclick事件失效问题,解决地图下钻后边框不更新保留问题

目录 先看实现效果&#xff1a;​编辑 步骤一 安装echarts和echarts-gl 步骤二 设置地图容器 在methods中设置初始化地图方法并在mounted中调用 在methods中设置初始化地图方法 在mounted中调用 打开页面效果&#xff1a;​编辑 步骤三 1、给地图添加双击事件dblcli…

Linux安装后门监测工具chkrootkit

官网&#xff1a;chkrootkit -- locally checks for signs of a rootkit locally checks for signs of a rootkit Chkrootkit is named Top 10 Tools to Scan Linux Servers for Vulnerability and Malware by Cyber Security News. Debian安装 sudo apt install chkrootkit#…

BigDecimal有哪些坑?

BigDecimal概述 BigDecimal是Java编程语言中的一个类&#xff0c;用于进行高精度的十进制数值计算。它提供了精确的数值表示和计算&#xff0c;可以处理比基本数据类型&#xff08;如double和float&#xff09;更大范围和更高精度的数字。 Java的基本数据类型&#xff08;如i…

在线考试教学系统平台系统源码/视频教学系统PHP源码/在线考试系统PHP源码

在线考试教学系统平台系统源码&#xff0c;视频教学系统PHP源码&#xff0c;在线考试系统PHP源码。 安装说明&#xff1a; 1、部署好网站环境&#xff1a;php5.6mysql 2、将源码传至网站根目录&#xff0c;php源码用二进制上传&#xff0c;或者上传压缩包在空间解压 3、将据库…

独热编码和Embedding

对于一个大小为N词典&#xff0c;给出一个N*N的矩阵。将这些词分别进行编码。再者&#xff0c;例如&#xff0c;香蕉与水果这两个词词意接近&#xff0c;我们引进余弦相似度来计算两者相似度。余弦值越接近1&#xff0c;就表明夹角越接近0度&#xff0c;也就是两个向量越相似。…

团体程序设计天梯赛-练习集L2篇⑧

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

css基础(三)

目录 一、CSS三大特性 1.层叠性 2.继承性 3.行高的继承 4.CSS三大特性之优先级 5.优先级注意的问题 6.CSS权重的叠加 二、盒子模型 1.盒子模型组成部分 2.盒子模型边框border 3.边框的复合写法 4.表格细线边框 5.边框会影响盒子实际大小 6.盒子模型内边距padding 7.盒子模型外边…

文心一言 VS 讯飞星火 VS chatgpt (49)-- 算法导论6.2 1题

一、参照图6-2的方法&#xff0c;说明 MAX-HEAPIFY(A&#xff0c;3)在数组 A(27&#xff0c;17&#xff0c;3&#xff0c;16&#xff0c;13&#xff0c;10&#xff0c;1&#xff0c;5&#xff0c;7&#xff0c;12&#xff0c;4&#xff0c;8&#xff0c;9&#xff0c;0)上的操作…

怪物设计记录

一、怪物的对抗性 《怪物猎人世界》 1.生态系的重视&#xff0c;高低差&#xff0c;怪物密度 3.怪物的活动范围 4.瘴气之谷 设定&#xff1a;鲸落等等 5.设定上的爬升 6.怪物设计原则&#xff1a; 和同一只怪物多次战斗&#xff0c;仍然能感觉到乐趣 让玩家尝试不同种类的…

责任链模式(Chain of Responsibility)

别名 命令链&#xff08;Chain of Command&#xff09;。 定义 责任链是一种行为设计模式&#xff0c;允许你将请求沿着处理者链进行发送。收到请求后&#xff0c;每个处理者均可对请求进行处理&#xff0c;或将其传递给链上的下个处理者。 前言 1. 问题 假如你正在开发一…

监听器-Listener

Servlet规范中的监听器-Listener 观察者设计模式, 所有的监听器都是观察者设计模式的体现。 什么是观察者设计模式呢&#xff1f; 它是事件驱动的一种体现形式。就好比在做什么事情的时候被人盯着。当对应做到某件事时&#xff0c;触发事件。 观察者模式通常由以下三部分组成…

【话题达人】你觉得存款难吗?如何看待半数年轻人存款不住10万?这不是基操

导读 近日&#xff0c;有调查称 大概五分之一的年轻人存款在一万元以内。10万元存款是一个“坎”&#xff0c;存款超过10万就会超过53.7%的人。年轻人(23-28) 和 存款 两个词碰撞在一起&#xff0c;引来了广泛的关注和讨论。你认为年轻人存款难吗&#xff1f; 先说结论&#…