写点什么

Python 数据驱动测试 unittest+ddt

  • 2022 年 9 月 13 日
    北京
  • 本文字数:2217 字

    阅读完需:约 7 分钟

本文将介绍如何使用 python 快速进行 http/https 接口自动化测试脚本搭建,实现自动请求、获取结果、数据对比分析,导出结果到 Excel 等功能,包括 python 的 requests、pandas、openpyxl 等库的基本使用方法。

测试需求介绍

通常,在我们的项目中,我们的接口测试需求一般都是构造不同的请求数据,然后发送请求到接口,拿到接口返回后,对返回的字段进行提取和校验,最后将结果存放在 excel 表格中方便查阅。接口一般是 http 或 https 请求,发送的结构一般是 json body 或 json 结合一些文件附件,请求的返回结果都是 json 格式,我们的测试 case 可以用 Excel 或者数据库保存,结果可以保存在数据库或者直接存在 Excel 中,下面将具体拆解需求及逐步介绍实现过程。

请求体的定制和发送请求

构造每次发送的请求内容和向接口自动发送请求是构造自动化测试脚本的核心,我们实现这一步骤主要是使用 python 的 requests 库,下面详细做一下详细介绍。

01

发送简单的 http post 请求

发送请求前,我们需要明确请求的 body,我们的 body 为 json,具体内容如下:

我们可以把这个作为模板保存为 text.json 文件作为模板,这样可以直接读取为后面构造请求体做准备。这一步我们可以这样处理,这里借助了 yaml 包,可以把 json 转换为字典,也可以使用 python 自带的 json,效果一样。

获取到了请求体模板后,我们得到了变量 request_body,这是一个字典类型的数据,我们就可以对其进行参数化,以此构造我们需要的请求体了,例如我们要对每次请求的请求 id、用户名、以及 text 的内容做修改,可以这样操作,左边是需要修改的字段,右边是我们需要的变量。

构造好要发送的数据,就可以准备发送请求了,在发送请求之前我们还有一点工作要做,那就是设置请求接口的一些参数和一些请求头的定制,这里我们简单举例如下:

我们定制了请求参数和请求头,就可以发送类似如下 URL 的请求:

我们再把之前构造好的 body 加上,再用 requests 库的 post 方法发送请求,这里用到了方法中的 data 参数,它接收的是一个 json,因此在发送之前对之前的字典变量还需做下转换再发送,这里用 python 自带的 json 库,使用其中的 dumps 方法即可将字典转换为 json:

至此,一个基本的 http post 请求就发送完成了,注意到,我们有一个名为 r 的 Response 对象。我们可以从这个对象中获取所有我们想要的信息。

02

更加复杂的请求

前面我们介绍了最简单的 http post 请求,在此基础上,我们有时还需要一些更加复杂的请求,比如带一个文件,https 请求等,下面简单讲解一下如何实现:

比如我们想要发送一个带有格式为 pcm 的音频文件到接口中,并且接口是 https 的

注意到,发送 https 请求需要做 ssl 认证,在方法中使用 verify 参数,这个参数默认值是 True,一般不需要验证的话,需要将这个置为 False。还有一个需要注意的地方是,我们设置了一个 timeout,防止请求过程超时,导致程序无响应。

对请求返回数据进行关键数据抓取

在发送请求的步骤里我们有一个名为 r 的 Response 对象。我们可以从这个对象中获取所有我们想要的信息。

获取内容有如下几种方法,我们可以根据自己的需要来使用:

得到的一般为 json 格式的文本:

我们可以对 json 进行转换,使用 json.loads 方法,将一个 json 对象转换为 python 的字典,这样方便获取其中我们想要的一些字段,这一步很简单,就不做详细介绍了。

如何执行 case 和存储测试结果

首先我们看一下我们的 case,我们的 case 是使用 Excel 进行编写的,具体如下:

如何读取 Excel,获取其中的 case 呢?我们使用了 python 中的 pandas 库。这个库很强大,有很多处理数据的方法,我们在这只使用其中读取 excel 的方法,具体代码如下:

这样我们就将表格数据转换了一个 list,每个 list 中是一个字典格式,也就是我们的 case,具体格式如下:

这样做的目的是我们可以将表头和每个 case 做一个映射,形成一个字典,这样可以更加灵活操作 case 以及做数据对比。

有了 case list,加上之前我们发送请求和获取结果的步骤就可以进行批量接口测试了,这里使用一个 for 循环就可以批量跑起来了:

我们将每次返回的结果,按照 case 的格式拼接成一个字典,就是我们的结果数据,将每个结果字典再存储到一个列表中,就得到了整个的结果字典列表,我们将它命名为 case_result_list,这时,我们再次使用 pandas 库,可以把这个列表转换为 dataframe 格式:

之后我们将 dataframe 保存为 excel 文件:

至此,我们已经完成了从获取 case 到发请求获取结果,保存结果的全部流程。

对结果数据进行标识处理

经过以上的操作,我们已经完成了批量发请求,获取结果的过程,如果我们需要对结果单元格做一些处理,比如标红加粗等操作,使测试结果中的错误信息更加明显,需要怎么操作呢?这里我们使用了 python 中的 openpyxl 库。这个库也是可以对 Excel 表格进行读写操作,并且可以插入一些公式和样式。我们在这里使用的是样式操作,我们根据单元格中的数据对结果进行标红加粗操作:

最后得到的测试结果如下,通过使用 openpyxl,我们还可以在结果中追加行,增加一些测试结果的统计信息,如 case 数、error 数,错误率正确率等。

以上就是一次完整的接口自动化测试脚本搭建,实现自动请求、获取结果、数据对比分析,导出结果到 Excel 等功能,每一个步骤都比较简单,可以快速搭建出满足需求的自动化测试脚本,方面快速验证服务端接口。

其中使用的 requests 库、pandas 库是在 python 常用的库,功能很强大,后续大家可以参考其官方文档进行深入了解。

更多学习资料戳

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=infoQ&timestamp=1662366626&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
Python数据驱动测试 unittest+ddt_Python_测吧(北京)科技有限公司_InfoQ写作社区