1.Tavern介绍
1.1 Tavern 和 Postman
Tavern是一个用Python实现的接口自动化测试工具,支持RESTful API 和MQTT。
和主流工具Postman相比,有以下优点:
· 使用yaml的描述测试用例,简单、清晰、直观,特别是对于非开发人员而言
· 与pytest无缝集成,可用pytest的强大功能和各种插件
· 功能齐全的Python环境,允许你轻松编写各种自定义断言
· 支持对MQTT系统测试
当然,Tavern也一些劣势:
· 没有GUI
· 没有API monitoring
· 没有Mock Server
tavern只专注做好一件事:API自动化测试,其他事情应当交给专业的工具去做(因为在Python世界中,有足够多的专业工具)。通常情况下,Tavern有三种使用方式,以适用于不同的技术基础、应用场景,分别是:
· 作为pytest插件使用
· 作为命令行工具使用
· 作为python库使用
其内部使用pytest、requests等知名python自动化测试工具,如果你对这些工具有经验,使用tavern非常容易,如果没有经验,也可以借此进行了解,为日后自定义测试框架打好基础。本节课是介绍第一种,也就是最容易上手的方式,无论你是否拥有Python经验,都能够快速实现接口自动化测试,也就是只用一个yaml文件就能轻松实现接口自动化。
1.2 安装Python
首先你应该一个python环境,如果没有的话下载下面两个安装包,默认安装即可:
Python 3.9.5: https://www.python.org/downloads/release/python-395/
PyCharm 2021.3.2: https://www.jetbrains.com/pycharm/download/#section=windows
1.3 安装Tavern
当你安装好Python环境后,只需要执行一个命令即可安装。
pip install tavern
1.4 第一个测试用例
安装好之后,我们通过第一个测试用例可以来体验一下
创建一个yaml文件,文件名为 test_zxtest01.tavern.yaml ,并写入以下内容
test_name: 第一个测试用例 stages: - name: 验证接口是否请求成功 request: url: http://www.baidu.com method: GET response: status_code: 200
使用命令行运行:pytest test_zxtest01.tavern.yaml
2. YAML语法简介
Tavern的特点之一便是“使用YAML进行管理用例“,这极大的提高了用例的简易和直观,尤其是对于没有编程经验的人来说,降低了使用门槛。接下来我们简单介绍YAML的语法,以及Tavern使用YAML定义用例的用法。
2.1 YAML语法
YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。
在yaml之前,程序大多使用json、xml、ini等格式进行数据的描述和传输,这些格式数据类型简单、可读性不好,yaml作为一种数据格式,但是可读性大大提高,方面人类直接编辑、查看里面的内容。
yaml中的常用数据类型分为两类、八种:
容器类,可以存放其他类型
· 序列(Sequence):类似Python中列表
· 映射(Mapping):类似Python中的字典
标量类
· 空值(Null): 类似Python中的None
· 布尔值(Boolean):类似Python中的布尔值
· 整数(Integer):类似Python中的整数
· 浮点数(Floating Point):类似Python中的浮点数
· 字符串(String):类似Python中的字符串
· 时间(Timestamps):类似Python中的datetime
上面可以看出来,绝大部分的yaml数据类型和python的内置数据类型可以一一对应,所以有Python基础非常方便理解yaml里的内容,下面看一个简单的例子
2.2 Tavern的测试用例格式
Tavern专注与Restful API的接口中自动化测试,大家知道Restful API 是基于HTTP协议,报文分为请求request 和响应response,Tavern的测试用例也是这样:发生请求,验证响应。
以前文为例,每一个tavern测试用例,有2个部分组成:
· test_name: 用例名称
· stages: 用例阶段
其中用例阶段是一个列表,由一个或多个阶段组成,每个阶段由3个部分组成
· name :步骤名称
· request: 接口请求参数
· response:预期的响应 (也就是断言)
所以前面的第一个例子,我们可以这样理解:
用例名称: 第一个Tavern测试用例 阶段步骤: 1. 验证接口返回指定状态码或json
其中接口的请求方式:
· 向 http://www.baidu.com发出 GET 请求
断言 :
· 状态码200
3. 复杂常见举例
3.1 一文件多用例
因为在实际测试过程中,测试一个接口往往不会像前面一个只有一个用例。如何在一个yaml里面写多个用例,并且执行呢?只需要在用例与用例之间用“---”隔开就行:
test_name: 商城登陆接口
可以从执行结果里面看到,3条用例已经被执行,并且通过:
3.2 关联
在实际工作中,往往会碰到上一个接口响应中的某些数据会被作为后面接口的请求参数,这就是需要用到关联处理。比如:特斯汀接口测试项目中的登录接口,如果需要完成登录,那么必须先获取token,并将其放入heard中。那这样的操作怎样在tavern中完成呢?
首先,编写一个获取token的方法:
可以看到,同样可以执行成功:
3.3 报告的生成
由于tavern跟pytest无缝衔接,在pytest中我们可以使用allure生成漂亮的测试报告,在这里一样可以,我们只需要在命令行输入相应的命令即可:
在执行时输入:
pytest .\test_demo2.tavern.yaml --alluredir=index # index为指定存在测试数据的目录
执行完成后,再输入:
allure generate index -o index/html --clean #将测试报告生成在index下的html文件夹内
最后,进入index/html即可打开测试报告:
END
免费领取软件测试课程笔记+超多学习资料+学习完整视频,微信关注官方公众号:特斯汀软件测试
本文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
网友评论