前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻量级测试框架Tavern(二)

轻量级测试框架Tavern(二)

作者头像
无涯WuYa
发布2021-07-09 11:44:03
8950
发布2021-07-09 11:44:03
举报

轻量级测试框架(一)中,可以很清晰的看到Easy to Write, Easy to Read and Understand的设计。下面我们还是结合复杂的API测试用例来看这部分的应用,也就是说我们依据前面的案例逐步的分离出响应数据和请求头信息,以及API接口之间的依赖关系,原始的Yaml文件内容为:

代码语言:javascript
复制
test_name: 登录GET请求
stages:
  - name: 登录GET请求
    request:
      url: http://localhost:5000/login
      method: POST
      json:
        username: wuya
        password: admin
        sex: 男
        age: 18
    response:
      status_code: 200
      json:
        age: 18
        password: admin
        sex: "男"
        username: wuya

这个时候我们分离把响应数据,一般针对被测的API来说,它的响应数据是特别多,我们分离出外部的文件里面,然后来进行验证,那么分离出的Python文件为testing_utils.py,该文件里面的内容为:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8

def message_login_success(response):
   dict1={"age": 18,"password": "admin","sex": "男","username": "wuya"}
   assert response.json()==dict1

这样我们可以直接在Yaml文件里面调用该外部文件的,具体最新的Yaml文件的内容为:

代码语言:javascript
复制
test_name: 登录GET请求
stages:
  - name: 登录GET请求
    request:
      url: http://localhost:5000/login
      method: POST
      json:
        username: wuya
        password: admin
        sex: 男
        age: 18
    response:
      status_code: 200
      verify_response_with:
        function: testing_utils:message_login_success

在如上的文件中,当我们在结果验证中分离出外部文件,这个地方使用verify_response_with,然后来加载外部的文件信息。

下面具体演示如何使用外部文件来处理参数之间的传递,这地方具体以登录成功后,把认证信息token传递给登录成功后的接口请求,我们把token认证的这部分单独写在外部文件中,然后通过外部文件的模式来解决参数之间的传递问题。我们先在PostMan来看这部分,登录认证授权的接口为:

下来调用查看所有书籍的信息,我们需要传递token的认证信息,具体如下所示:

下面具体结合Tavern来实现这部分,外部文件处理登录成功后的认证信息:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8
from box import  Box
import  requests

def generate_token():
   '''获取token的信息'''
   r=requests.post(
      url='http://localhost:5000/auth',
      json={"username":"wuya","password":"asd888"})
   headers={'Authorization':'jwt {0}'.format(r.json()['access_token'])}
   return Box(headers)

Yaml文件的内容为:

代码语言:javascript
复制
test_name: 获取所有书籍信息
stages:
  - name: 获取所有书籍信息
    request:
      url: http://localhost:5000/v1/api/books
      method: GET
      headers:
        $ext:
          function: testing_utils:generate_token
    response:
      status_code: 200

下来把断言的部分增加到外部文件中,这些主要是获取全部书籍后的信息,那么更新后的外部文件内容为:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8
from box import  Box
import  requests

def generate_token():
   '''获取token的信息'''
   r=requests.post(
      url='http://localhost:5000/auth',
      json={"username":"wuya","password":"asd888"})
   headers={'Authorization':'jwt {0}'.format(r.json()['access_token'])}
   return Box(headers)

datas={
   "datas": [
      {
         "author": "wuya",
         "done": True,
         "id": 1,
         "name": "Python接口自动化测试实战"
      },
      {
         "author": "无涯",
         "done": False,
         "id": 2,
         "name": "Selenium3自动化测试实战"
      }
   ],
   "msg": "ok",
   "status": 0
}

def get_all_books(response):
   assert response.json()==datas

当然这个时候把数据分离到文件中,修改后的外部文件代码为:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8
from box import  Box
import  requests
import  json

def generate_token():
   '''获取token的信息'''
   r=requests.post(
      url='http://localhost:5000/auth',
      json={"username":"wuya","password":"asd888"})
   headers={'Authorization':'jwt {0}'.format(r.json()['access_token'])}
   return Box(headers)

def get_all_books(response):
   assert response.json()==json.load(open('data.json'))

再次查看最新的Yaml文件,把断言和授权认证都分离到外部文件来加载外部文件来执行,具体如下:

代码语言:javascript
复制
test_name: 获取所有书籍信息
stages:
  - name: 获取所有书籍信息
    request:
      url: http://localhost:5000/v1/api/books
      method: GET
      headers:
        $ext:
          function: testing_utils:generate_token
    response:
      status_code: 200
      verify_response_with:
        function: testing_utils:get_all_books

再次执行,就可以看到执行后的结果输出:

在如上中,我们可以看到使用Tavern很轻松的就能够实现API的自动化测试,以及很轻松的处理数据的分离以及API之间的依赖关系。再次强调Tavern的设计哲学:Easy to Write, Easy to Read and Understand。

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

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

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

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

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