前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈Tavern之API实战

漫谈Tavern之API实战

作者头像
无涯WuYa
发布2020-02-25 13:10:49
1.7K1
发布2020-02-25 13:10:49
举报
文章被收录于专栏:Python自动化测试

API的测试用例编写文章和接口测试维度的文章中体系中,详细的介绍了API测试点编写和涉及到的知识体系。其实在更加细致的角度上,API的测试也是需要考虑它的分层,很多时候我们听过金字塔的模型,以及基于金字塔模型演变后的菱形,后微服务架构模式下新的金字塔的模型,其实就单纯的API的测试角度上,也是存在它的分层,关于分层,在后面的文章中会详细的介绍少。在平常的工作中,我们接触到的API的测试,主要是基于这么几个维度,分别是单个API的验证,外部依赖API的验证,和基于业务场景的API验证。

就单纯的先说单个API的测试,针对单个API的测试,可以从它的功能行,安全性和性能的维度展开测试,安全要考虑这个接口是否进行了参数的加密,和是否增加了反爬虫机制,以及请求限制次数,IP白名单的思想来展开设计测试点,性能主要需要考虑它的并发性,以及基于它是IO密集型还是CPU密集型来验证服务端的资源情况,功能方面的考虑,在服务端的测试技术文章里面有很多详细的介绍。

在本文章中,就以一个具体的案例来演示如何高效的来测试它,被测试的API的源码为:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8
from flask import  Flask,jsonify
from flask_restful import  Api,Resource,reqparse


app=Flask(__name__)
api=Api(app)

class LoginView(Resource):
   def get(self):
      return {'status':0,'msg':'ok','data':'this is a login page'}

   def post(self):
      parser=reqparse.RequestParser()
      parser.add_argument('username', type=str, required=True, help='您的用户名验证错误')
      parser.add_argument('password',type=str,required=True,help='账户密码不能为空')
代码语言:javascript
复制
      parser.add_argument('age',type=int,help='年龄必须为正正数')
      parser.add_argument('sex',type=str,help='性别只能是男或者女',choices=['女','男'])
      args=parser.parse_args()
      return jsonify(args)


api.add_resource(LoginView,'/login',endpoint='login')

if __name__ == '__main__':
   app.run(debug=True)

如果需要单纯的验证上面的接口,需要测试具体的点,比如username或者password为空的验证,以及age参数是否为整数,以及sex如果传的不是男或者女的处理,针对这样的单接口的测试场景,我们可以使用Tavern来很轻松的解决该问题,并且把它的测试场景覆盖到。

那什么是Tavern了?Tavern是用于HTTP,MQTT或其他协议的基于pytest的高级API测试框架。我们为什么需要选择它,因为它具备如下的优势:

1、轻量级,简单,高效,即使你没有任何的代码简单,只要按照我下面的步骤,也是可以很轻松高效的完成API的自动化测试

2、容易编写,阅读和理解,它是基于yaml文件来编写API的测试点的,所以看起来很直观

3、可以测试基于HTTP协议以及MQTT和其他的协议

4、它的生态在不断发展和完善中

要使用它,首先需要安装相关的信息,但是必须已经安装了Python环境,建议是Python3.7版本的,它支持Python 2.7 / 3.4-3.7。下来需要安装的库分别是:

pip install pytest==4.5.0

pip install tavern

安装如上的库之后,下来就需要在yaml文件里面编写具体的API了,如创建test_login.tavern.yaml,在里面编写的测试点内容为:

代码语言:javascript
复制
test_name: 测试登录接口

stages:
  - name: test login api
    request:
      url: http://127.0.0.1:5000/login
      method: POST
      data:
        username: 无涯
        password: asd888
        age: 18
        sex: 男
    response:
      status_code: 200
      body:
        username: 无涯
---
test_name: 用户名为空验证

stages:
  - name: test login api
    request:
      url: http://127.0.0.1:5000/login
      method: POST
      data:
        password: asd888
        age: 18
        sex: 男
    response:
      status_code: 400
      body:
        message:
          username: 您的用户名验证错误
---
test_name: 密码为空验证

stages:
  - name: test login api
    request:
      url: http://127.0.0.1:5000/login
      method: POST
      data:
        username: wuya
        age: 18
        sex: 男
    response:
      status_code: 400
      body:
        message:
          password: 账户密码不能为空
---
test_name: age参数不是整数

stages:
  - name: test login api
    request:
      url: http://127.0.0.1:5000/login
      method: POST
      data:
        username: wuya
        password: asd888
        age: asd
        sex: 男
    response:
      status_code: 400
      body:
        message:
          age: 年龄必须为正正数
---
test_name: sex参数只能为男或者女

stages:
  - name: test login api
    request:
      url: http://127.0.0.1:5000/login
      method: POST
      data:
        username: wuya
        password: asd888
        age: 18
        sex: asd
    response:
      status_code: 400
      body:
        message:
          sex: 性别只能是男或者女

在上面的文件内容中,可以很清晰的看到每个接口的请求信息,以及它的响应数据,和响应数据里面的业务数据。基于yaml文件的格式编写后,在该文件的目录下,执行命令:

pytest -v test_login.tavern.yaml 就会很清晰的执行验证每个测试点,如下图所示:

如果被测试的测试点失败,执行后也会显示出来,比如新增请求http://httpbin.org/get,实际会请求成功,但是status_code我们给500,如:

代码语言:javascript
复制
test_name: 请求httpbin.org

stages:
  - name: test httpbin.org
    request:
      url: http://httpbin.org/get
      method: GET
    response:
      status_code: 500

执行后,断言失败的错误信息展示如下图所示:

可以说Tavern非常的简单而且很高效,来测试基于单个接口的验证,即使不会代码也是可以完成API的自动化测试。

感谢您的阅读,后续会逐步的介绍Tavern在API自动化测试方面的应用案例实战。

武汉加油,中国加油!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档