Python接口自动化测试之UnitTest详解

 基本概念

UnitTest单元测试框架是受到JUnit的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。

它分为四个部分test fixture、TestCase、test suite、test runner,分别是:

测试脚手架:为了开展项测试所需要进行的准备工作,以及所有相关的清理操作;

测试用例:一个测试用例是一个独立的测试单元。它检查输入特定的数据时的响应;

测试套件:它用于归档需要一起执行的测试用例;

测试运行器:是一个用于执行和输出测试结果的组件。

TestCase详解

类TestCase为测试用例提供了支持。通过继承TestCase来设置一个新的测试类,和设置测试方法,每个测试方法通过实际响应结果与预期结果对比来实现单元测试。

测试用例包括的方法:setUp()、tearDown()、setUpClass()、tearDownClass()。注意类名要以Test开头,测试用例的名称要以test开头

下面一个示例来展示:


import unittest
class Test_unittest(unittest.TestCase):def setUp(self) -> None:print('setup')def test(self):print('test')def tearDown(self) -> None:print('teardown')
if __name__ == '__main__':unittest.main()

在这里插入图片描述
可以看到运行结果打印了三条测试用例里的内容,setup和teatdown方法,在每次执行测试用例前后都会执行,如果再增加一条测试用例,setup和teardown也会再执行一次,如下图所示:
在这里插入图片描述

所以如果想初始化和结束方法只想执行一次的话,可以使用setUpClass()、tearDownClass(),但是注意得在方法前面添加注解@classmethod,看下面示例和结果:

import unittest
class Test_unittest(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print('setup')def testcase1(self):print('testcase1')def testcase2(self):print('testcase2')def tearDown(self) -> None:print('teardown')
if __name__ == '__main__':unittest.main()

在这里插入图片描述
可以看到,使用了setUpClass()方法就只初始化了一次,teardown没使用就每条用例都会执行一次。

常用方法

断言

测试用例中还有常用的断言和skip跳过测试用例。在UniTtest框架中也提供了一个自带的断言方式,主要有以下几种:在这里插入图片描述

skip跳过

在实际测试中,如有功能缺陷的功能点对应的自动化测试用例执行不了,或者不执行的用例,可以用skip()方法来操作,使用方法为:

1.unittest.skip(‘输入理由’)——无条件执行跳过操作

2.unittest.skipif(2>1,’理由’)——判断条件为true的时候执行

3.unittest.skipUnless(1>2’理由’)—判断条件为false的时候执行

4.unittest.expectedFailure—执行错误不计入不通过用例中

下面查看示例,testcase1方法被跳过,testcase2方法使用了断言,但是断言结果不对,于是有报错信息:

import unittest
class Test_unittest(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print('setup')@unittest.skipdef testcase1(self):print('testcase1')def testcase2(self):a = 1self.assertEqual(a,2,msg='error')print('testcase2')def tearDown(self) -> None:print('teardown')
if __name__ == '__main__':unittest.main()

在这里插入图片描述

测试套件

当一个类里有多个测试用例又不会同时运行的时候,可以选择把测试用例添加到suite中,中suite运行(pycharm中直接在文件中写不行,要重新新建一个py文件)。

1.直接一个一个添加到suite中:

在这里插入图片描述

解释:导入该文件中的类,定义一个套件名称,使用testsuite方法,对该套件添加测试用例,定义一个运行名称,使用运行方法,添加测试套件,即可运行(得一个个的添加测试用例)。

2.定义一个列表【】把用例都存进去,然后运行:在这里插入图片描述

3.直接读取类名的形式来运行(最简单,最方便,不能使用‘’):在这里插入图片描述
4.也是读取名字,不过容易找不到类,需要在前面加一个文件名。

TestRunner

1.编写完脚本之后重新新建一个文件然后添加用例到suite,即可全部执行。

2.在网上下载htmlTestrunner源码,复制到python/lib目录即可import导入:在这里插入图片描述

Python之request

主要方法解析

requests是Python实现的最简单易用的HTTP库,requests库7个主要方法:在这里插入图片描述

举例:普通接口测试的接口之间没有关联性,所以直接定义变量去发起get、post请求即可。在这里插入图片描述 

其中post的请求常用的分为json和formdata,两种方式请求的参数方式如截图所示。需要鉴权的,需要导入auth包,然后跟在请求方法后面。

requests方法详解

具体方法查看可以直接按住ctrl+左键点击requests方法查看源码。

在这里插入图片描述

1.url: 请求地址

2.data:字典,字节序列或文件对象,作为Request的内容

3.json: JSON格式的数据,作为Request的内容

4.headers: 字典, HTTP定制头

5.cookie: 字典或CooKiJar, Request中的cookie

6.auth: 元祖,支持HTTP认证功能

7.files: 字典类型,传输文件

8.timeout: 设定超时时间,秒为单位

9.proxies: 字典类型,设定访问代理服务器,可以增加登录认证

10.allow_redirects: True/False,默认为True,重定向开关

11.stream: True/False,默认为True,获取内容立即下载开关

12.verity: True/False默认Ture,认证ssl证书开关

13.cert: 本地ssl证书路径

Response返回方法详解

1.response.status_code #返回的http响应状态码

2.response.content #返回的是bytes型也就是二进制的数据

3.response.headers # 返回的http请求头

4.response.json() # 返回响应中的Json数据

5.response.url # 返回url

6.response.encoding # 返回响应的编码格式

7.response.cookies # 返回响应中的cookie

8.response.text #返回的是Unicode型的数据。—文本

Session详解

对于需要前后接口依赖的接口测试,比如从上一个请求中获取token用作下一个接口请求的参数去提交的话,用上面一种方法明显不合适,按照上面的方法需要定义很多变量,然后根据依赖去添加到对应的请求参数里。

下面这种方法,使用session会话的方式,贯穿前后,只要添加了一次,所有请求都能用到。在这里插入图片描述

解释:

1.这个是cynthia缺陷管理系统,登录的时候需要拿到响应里的cookie作为下一个请求的cookie,不然登录不上。

2.所以在UniTtest结构中,可以把登录操作放到setup里面,类似UI自动化一样,登录放在初始化中。

3.在setup中把响应的cookie值,加入到请求的里面去了,同时添加了浏览器UA。

4.参数可以复用,从头到尾请求的变量都是rsp,body里的参数都是dict,编写简单方便。在这里插入图片描述

定义一个变量s等于requests的session会话,后面都用这个s的会话去发起请求。

定义一个变量等于rsp等于s去发起请求的结果。

s会话请求的头文件中cookie需要添加tokenid,不然登录不上,这个id在rsp响应信息里。

因为响应信息是json字典格式,所以要添加到请求头里需要按照截图格式。

如果需要在字典中添加字段或者内容,按照截图的格式s.headers[‘xxx’]=“xxx”,如果字典中有这个key:value,那么value值会直接更新,没有这个key那么则会添加这个key:value到字典。

接口实战

添加token到头文件中

在公司实际项目中,调接口首先需要获取token,要先调用获取token的请求,然后拿到token值之后,在后面接口中添加到头文件中。

在这里插入图片描述

self.session.headers.update({“token”:rsp.json()[‘data’][‘token’]})
(左右滑动查看完整代码)

通过在setup初始化方法中调用获取token,来拿到token的值,然后添加到整个session的head中去,后续请求中都不需要额外添加head了。

使用ddt做参数化

ddt数据驱动测试,首先pip list ddt,安装第三方库,在代码最上方导入库中的data

from ddt import ddt,data,在测试类前面声明ddt,用@ddt:

在这里插入图片描述

1、在测试用例前声明使用data,用@data:

@data('test1','test2')
def test_ddt1(self,value):print(value)`在这里插入代码片`
(左右滑动查看完整代码)

运行结果中该用例执行了两次,分别输出的test1和test2。

2、data用法读取文件

此方法需要解包,故需要用到unpack方法,在测试用例前声明@unpack即可。

def readline(self):date = []file = open('D:\\base64\\keyid.txt','r',encoding='utf-8')for line in file:date.append(line.split())return date
@data(*readline(""))
@unpack
def test_ddt2(self,vars):print(vars)

对运行结果解释:定义一个读取文件的方法,定义一个list数组,使用file函数的open方法,读取文件名为“txt1”的文件,以read的形式,编码格式为utf-8,以for循环的方式一直循环读取每一行,以\n换行符为一行结尾,以逗号分隔每一个参数,最后返回data值以便下方直接调用。

上面写了读取方法之后,在测试用例前,直接使用该方法即可,@data(*readfile())这种形式,接着使用@unpack解包的方法即可。在这里插入图片描述

生成测试报告

按照上述的方法编写好测试用例后,结合UniTtest框架生成报告的HTMLTestRunner来生成接口测试报告。在这里插入图片描述

从网上找的HTMLTestRunner库文件,下载后放到Python安装目录的lib文件夹中就行,后续就可以直接调用了https://github.com/GoverSky/HTMLTestRunner_cn/issues在这里插入图片描述

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

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

相关文章

武汉大学计算机学院2010情景剧,武汉大学金秋情景剧大赛精彩落幕(组图)

作为金秋艺术节的“重头戏”,留香行板--情景剧大赛决赛于11月5日在信息学部大学生活动中心隆重开演。15个学院先后表演了精心编排的情景剧,最终经过激烈的角逐,新闻与传播学院凭借《方向》成功蝉联,与经济管理学院的《爱的礼赞》一…

快来带您了解中秋节的前世今生

中秋节是中国传统的节日,落在农历八月十五,一般是公历九月或十月上旬。 按中国古代历法的解释,八月是秋季的第二个月,称“仲秋”,八月十五又在仲秋之中,所以叫“中秋”。2022年,中秋节落在9月10…

MySQL数据库 *实验16 变量表达式和函数

只要你有想去的地方,全世界都会为你让路~ 1.定义一个变量x存放以下字符串 刘王张赵李钱朱何孙曾陈吴黄刘邓周毛江胡’; 2.定义一个变量len1存放x字符串的长度; 3.定义一个变量m1存放以下字符串 ‘依秋香巧花紫萱莉玉芳菊碧丽念雅红燕艳莲…

女孩砖厂打工照顾弟妹被网友拍下(图)

8日下午,网友“土家风情郎”在论坛贴出一组图片,反映贵州一名叫张倩倩的小女孩在砖厂打暑期工,还要照顾三个弟妹的情况,该帖发出后,许多网友赞赏女孩懂事。 年纪小小的她,有着同龄人少有的沉着淡定。 生活不…

opencv基础59-霍夫变换原理讲解及示例-cv2.HoughLines()->(直线,圆形检测)

霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用类似于投票的方式来获取当前图像内的形状集合,该变换由 Paul Hough(霍夫)于 1962 年首次提出。 最初的霍夫变换只能用于检测直线,经过发展后&#xff0…

直播预告|EasyV全新倾斜摄影组件上线!提升大规模、高精度实景建模效率

倾斜摄影,也被称为斜摄影或倾斜摄影测量,是一种高精度、高分辨率的遥感技术,用于获取地表地貌、建筑物、自然环境等目标的三维信息。在城市级数字孪生可视化建设过程中,通常会使用倾斜摄影技术以增强地理信息分析和虚拟建模的能力…

线性回归学习总结

一 、引文 1 回归分析 回归是统计学上用来分析数据的方法,以了解两个或多个变量之前的关系。通常是建立被解释变量Y和解释变量X之间关系的模型。回归分析的最早形式是最小二乘法。 勒让德和高斯都将该方法应用于从天文观测中确定关于太阳的物体的轨道(…

Java-低代码平台使用H2内存数据库

一、引言 作者目前在做的平台使用到了H2,这里介绍下使用场景、使用方式,出于以下两个原因会使用H2: 1、平台化的项目一般是用户使用脚本或者sql进行通用的执行,这样可以实现低代码平台,不需要管理类之间的引入、依赖、编译&#x…

制造业企业数字化转型之设备数据采集

导 读 ( 文/ 1894 ) 随着信息技术的快速发展和制造业的转型升级,企业数字化转型已成为保持竞争力和实现可持续发展的关键。在数字化转型过程中,设备数据采集作为重要的一环,发挥着关键的作用。设备数据采集通过收集、分析和利用设备所产生的数…

怎样找回e盘删除的文件夹?分享三种恢复方法

我们都知道,电脑可以划分多个区域来存储数据,例如C盘、D盘、E盘、F盘等,而不论是存储在哪个磁盘,都容易出现文件丢失的问题,那么电脑e盘文件夹删除了怎么恢复呢?下面小编分享一些方法,一起来看下…

C#多线程开发详解

C#多线程开发详解 持续更新中。。。。。一、为什么要使用多线程开发1.提高性能2.响应性3.资源利用4.任务分解5.并行计算6.实时处理 二、多线程开发缺点1.竞态条件2.死锁和饥饿3.调试复杂性4.上下文切换开销5.线程安全性 三、多线程开发涉及的相关概念常用概念(1)lock(2)查看当前…

基于计算机的色彩描述

计算机中的色彩描述方法主要有RGB、CMY、Lab、HSB、sRGB、YUV、YCbCr、YIQ等。 CMYK色彩模式主要用于使用色料呈色的彩色设备。CMYK模式实质指的是再现色彩时单位面积上含C、M、Y、K点的百分比。 Lab色彩模式是建立在CIE 1976 L*a*b 颜色空间基础上的色彩模式,包含…

HSV色彩范围

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。 H: 0 — 180 S: 0 — 255 V: 0 — 255 此处把部分红色…

OBS推流时的视频色彩相关参数设置

在使用OBS进行推流直播时,特别是采集卡采集摄像机信号进行推流直播时,我们可能会遇到这样的问题:   1.为什么流信号与源信号相比有色彩偏差?   2.明暗对比较大的视频信号,比如有树荫和太阳,在摄像机上可…

视频产生的本质及色彩空间:RGB 和 YUV

一、前言 在前面几篇文章中,我们完成了音频相关基础知识的学习,从今天开始,我们要暂别音频,继续学习视频相关基础内容。 虽说声音在我们日常的生活、工作、娱乐过程中,发挥着不可替代的作用,但人们常说&a…

彩色图像色彩模型

彩色图像处理可分为两个主要领域:全彩色处理和伪彩色处理。全彩色处理通常要求图像用全彩色传感器获取,伪彩色处理是对一种特定的单色灰度活灰度范围赋予一种颜色。 定义: 亮度:具体表达了无色的强度概念,显示图像的…

ArcGIS基础:分级色彩和换行标注(VbCrLf)操作(以制作社会经济分析图为例)

我们需要用到的实验数据如下: 村(点数据和面数据),主要属性就是【人口数】、【经济总量】,如下图所示。 点数据的要使用的两个字段【人口数】、【经济总量】如下: 面数据的要使用的两个字段【人口数】、【…

计算机图像处理入门基础知识——色域,色度图,色彩空间和色彩管理

作者:❄️固态二氧化碳❄️ (主页) 链接:(原创)计算机图像处理入门基础知识——色域,色度图,色彩空间和色彩管理 - 固态二氧化碳的博客 - CSDN博客 来源:CSDN博客 发表时间:2020年06月03日 18:36:36 著作权归作者所有。商业转载请…

Photoshop CS6 实例之用色彩范围抠图并合成背景

素材 素材1 素材2 步骤 打开素材1,如下所示: 执行“选择>色彩范围”菜单命令,然后在弹出的“色彩范围”对话框中设置“选择”为“取样颜色”,然后勾选“本地化颜色簇”选项,并设置“颜色容差”为200,如下所示设置…

选择技术之颜色范围

许多人一直困惑不知道如何在PS中调色,殊不知,调色的前提条件是要选中要调色的对象。 色彩范围就是Photoshop中的一个非常好用的选择命令。 菜单:选择/色彩范围 色彩范围的主要用途 1、选择某个对象 2、选择某种颜色 3、选择人像皮肤 4、选择照…