Python自动化测试框架详解!

随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了开发时间。而且由于这些框架被广泛使用,他们具有很好的健壮性,并且具有广泛多样的用例集和技术来轻易发现微小的缺陷。今天,我们将看一看常见的 Python 自动化测试框架。

常见的测试框架

1、Unittest

unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。

通过继承unittest.TestCase来创建一个测试用例。

举个例:

import unittest

def fun(x):
return x + 1

class MyTest(unittest.TestCase):
def test(self):
self.assertEqual(fun(3), 4)

执行后成功。

但是,如果将期望的结果改成5,则执行的结果如下图所示:

2、 Doctest

doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果.即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。

举个例子:

def square(x):
"""Squares x.

>>> square(2)
4
>>> square(-2)
4
>>> square(5)
25
"""

return x * x

if __name__ == '__main__':
import doctest
doctest.testmod()

当执行该代码后,会执行文档内>>> 后面的测试代码,并与下一行的结果进行比对。执行的结果如下:

但是,如果我们把结果改一下,square(2)的结果改成5,测试代码如下:

def square(x):
"""Squares x.

>>> square(2)
5
>>> square(-2)
4
>>> square(5)
25
"""

return x * x

if __name__ == '__main__':
import doctest
doctest.testmod()

执行的测试结果如下所示:

3、py.test

pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:
①非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
②能够支持简单的单元测试和复杂的功能测试
③支持参数化
④执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
⑤支持重复执行失败的case
⑥支持运行由nose, unittest编写的测试case
⑦具有很多第三方插件,并且可以自定义扩展
⑧方便的和持续集成工具集成

编写pytest测试样例

编写pytest测试样例非常简单,只需要按照下面的规则(和nose类似):
测试文件以test_开头(以_test结尾也可以)
测试类以Test开头,并且不能带有 init 方法
测试函数以test_开头
断言使用基本的assert即可

example.py

setup_class/teardown_class 在当前测试类的开始与结束执行。

setup/treadown 在每个测试方法开始与结束执行。

setup_method/teardown_method 在每个测试方法开始与结束执行,与setup/treadown级别相同。

执行pytest测试样例

执行测试样例的方法很多种,上面第一个实例是直接执行py.test,第二个实例是传递了测试文件给py.test。其实py.test有好多种方法执行测试:

4、Nose

Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等。

nose的详细文档: https://nose.readthedocs.org/en/latest/

nose不是python自带模块,需要用pip安装

nose相关执行命令:

1、 nosetests –h查看所有nose相关命令

2、 nosetests –s执行并捕获输出

3、 nosetests –with-xunit输出xml结果报告

4、 nosetests -v: 查看nose的运行信息和调试信息

5、 nosetests -w 目录:指定一个目录运行测试

nose 特点:

a) 自动发现测试用例(包含[Tt]est文件以及文件包中包含test的函数)

b) 以test开头的文件

c) 以test开头的函数或方法

d) 以Test开头的类

经过研究发现,nose会自动识别[Tt]est的类、函数、文件或目录,以及TestCase的子类,匹配成功的包、任何python的源文件都会被当做测试用例。

5、tox

最大的特色,是自动最测试环境的管理以及使用多个解析器配置进行测试。

tox的详细文档: http://testrun.org/tox/latest/

6、Unittest2

是unitest的升级版。对API进行了改善以及更好的诊断语法。

unittest2的详细文档:https://pypi.python.org/pypi/unittest2

首先,安装

pip install unittest2
为了以后能在unittest与unittest2之间进行切换,最好的代码编写方式如下:

import unittest2 as unittest

class MyTest(unittest.TestCase):
...

7、mock unittest.

mock是用来测试python的库。在python3.3版本以后,这个是一个标准库。对老版本来说,使用pip install mock进行安装。

mock的精髓在于,你可以使用模拟的对象来替代你的系统的一部分,然后验证后续的执行是否正确。
mock的详细文档:http://www.voidspace.org.uk/python/mock/

总结:

我这篇文章,主要是讲基于 python 语言的自动化测试框架的一些设计思想和基本使用示例。其实工具的使用方法很简单,但是如何利用好这些工具来进行软件生产,则需要其它的计算机技能了。

“软件的自动化测试是有成本的,而且成本不低,基本上相当于在原有的功能开发工程 的基础上再建立一个平行的 测试开发工程 ”。

也就是说,如果你对自动化测试有你的期望值,那么就肯定是要付出相应的代价和精力的。好的东西也是需要优秀的人花大量的时间去完成的。在正式进入到自动化测试的领域之前,先要建立这样的价值观才能在软件测试这条路上走的更远。

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

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

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

相关文章

【数据结构实战】从0打造你的专属顺序表

专栏:《数据结构实战篇》 生活中有着无穷无尽的数据需要存储,大到全国人口普查,小到微信、QQ好友列表,都需要有一个合理的存储方式才能使得我们的数据更方便管理,线性表就是其中之一 一、线性表 线性表(li…

RFID标签实现托盘智能化管理

一、RFID技术概述 1.1 RFID技术原理 RFID技术,即无线射频识别技术,是一种利用无线电波进行非接触式自动识别和数据交换的技术。其核心优势在于能够实现远距离、快速、批量的识别,相较于传统的条形码技术,RFID技术在物资管理领域展…

net core 生成URL HtmlHelper

HtmlHelper Url.Action Url.RouteUrl RedirectToAction public IActionResult Privacy(){return RedirectToAction("Index");}Html.ActionLink Html.BeginForm Html.ActionLink 与 Url.Action 1.两者者是根据给定的Controller,Action 生成链接, 但是H…

零日漏洞被谷歌的 AI 工具发现

谷歌的 AI 研究工具 Big Sleep 取得了重大突破,发现了 SQLite 中的漏洞,SQLite 是全球使用最广泛的数据库引擎之一。 Google Project Zero 和 Google DeepMind 团队最近在官方博客文章中分享了这一里程碑,标志着 AI 驱动的漏洞检测在现实世界…

Github 2024-11-07 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10HTML项目1Kubernetes: 容器化应用程序管理系统 创建周期:3618 天开发语言:Go协议类型:Apache License 2.0Star数量:106913 个Fork数…

Java学习笔记之类

文章目录 类和对象的基础属性/成员变量⚠️ 属性的注意事项和细节⚠️ 构建函数 类和对象的区别类和对象的内存分配机制练习 成员方法方法定义⚠️ 方法使用细节⚠️ 形参列表细节⚠️ 方法内部细节⚠️ 方法调用细节方法入门代码01⚠️ 行参和成员方法重名方法入门代码02方法递…

链表删除相关算法题|删除值为x的节点|删除最小值节点|删除值在区间内的节点|删除重复节点|删除绝对值相等的节点(C)

删除值为x的节点 在带头结点的单链表L中,删除所有值为X的结点,并释放其空间,假设值为的结点不唯一 算法思想 删除单链表的节点需要三个指针 一个是遍历链表的工作指针cur,一个是指向cur的上一个节点的指针prev,一个…

C++:哈希表的实现

一、哈希表的基本概念 1、负载因子:假设哈希表中已经映射存储了N个值,哈希表的大小为M,那么负载因子 N / M,负载因子有些地⽅也翻译为载荷因子/装载因子等,他的英文为load/factor。负载因子越大,哈希冲突的…

2024年11月软考考前注意事项

一、重要时间节点 准考证打印时间: 大部分省市的准考证打印时间从11月4日起开始,但上海、甘肃等地区则稍晚,从11月6日起开放打印。 请务必注意所在地区的具体打印时间,并尽早打印准考证,以免因错过时间而影响考试。…

书生大模型实战营Linux+InternStudio 关卡任务

一、端口映射 使用以下命令进行端口映射 ssh -p {YOUR_PORT} rootssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyCheckingno 命令解释: -p 37367:是指定 SSH 连接的端口为 37367。rootssh.intern-ai.org.cn:表示要以…

道品科技智能水肥一体化技术要点及实施效果

## 一、引言 水肥一体化技术是现代农业中一种重要的耕作方式,旨在通过合理配置水资源与肥料,提高作物产量和质量,达到节水、增效和环保的目的。随着全球人口的增加和耕地资源的减少,水肥一体化技术在农业生产中的应用愈加重要。 …

sqlserver使用bak文件恢复数据库

进入数据库 sqlcmd -S localhost -U SA -P password备份文件 #备份格式BACKUP DATABASE your_database_name TO DISK path_to_backup_file.bak;#举例 1> BACKUP DATABASE XJZDataTest TO DISK /root/mssql.bak; 2> go使用备份文件恢复数据库 1、查询备份文件中的数据…

CSP/信奥赛C++刷题训练:经典深搜例题(1):洛谷1605 :迷宫

CSP/信奥赛C刷题训练:经典深搜例题(1):洛谷1605 :迷宫 题目描述 给定一个 N M N \times M NM 方格的迷宫,迷宫里有 T T T 处障碍,障碍处不可通过。 在迷宫中移动有上下左右四种方式&#x…

yolov8涨点系列之Concat模块改进

文章目录 Concat模块修改步骤(1) BiFPN_Concat3模块编辑(2)在__init_.pyconv.py中声明(3)在task.py中声明yolov8引入BiFPN_Concat3模块yolov8.yamlyolov8.yaml引入C2f_up模块 在YOLOv8中, concat模块主要用于将多个特征图连接在一起。其具体…

越权访问漏洞

V2Board Admin.php 越权访问漏洞 ## 漏洞描述 V2board面板 Admin.php 存在越权访问漏洞,由于部分鉴权代码于v1.6.1版本进行了修改,鉴权方式变为从Redis中获取缓存判定是否存在可以调用… V2Board Admin.php 越权访问漏洞 漏洞描述 V2board面板 Admin.ph…

安装和运行开发微信小程序

下载HBuilder uniapp官网 uni-app官网 微信开发者工具 安装 微信小程序 微信小程序 官网 微信小程序 配置 运行 注意:运行前需要开启服务端口 如果运行看不到效果,设置下基础库选别的版本 配置

小檗碱和卤代苄基异喹啉生物碱的代谢工程合成-文献精读79

De novo biosynthesis of berberine and halogenated benzylisoquinoline alkaloids in Saccharomyces cerevisiae 在 酿酒酵母(Saccharomyces cerevisiae)中从头合成小檗碱和卤代苄基异喹啉生物碱 小檗碱的酵母代谢工程生物合成-文献精读78 苄基异喹…

鸿蒙开发案例:七巧板

【1】引言(完整代码在最后面) 本文介绍的拖动七巧板游戏是一个简单的益智游戏,用户可以通过拖动和旋转不同形状的七巧板块来完成拼图任务。整个游戏使用鸿蒙Next框架开发,利用其强大的UI构建能力和数据响应机制,实现了…

【TS】九天学会TS语法——1.TypeScript 是什么

今天学习的是TypeScript 基础,目标是了解 TypeScript 的基本概念,安装 TypeScript,编写第一个 TypeScript 程序。 TypeScript 简介安装 TypeScriptTypeScript 编译过程编写第一个 TypeScript 程序 随着前端开发的不断发展,TypeScr…

Docker学习—Docker的安装与使用

Docker安装 1.卸载旧版 首先如果系统中已经存在旧的Docker,则先卸载: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2.配置Docker的yum库 首先…