前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《上海悠悠接口自动化平台》-1.新增API 与 各参数的描述

《上海悠悠接口自动化平台》-1.新增API 与 各参数的描述

作者头像
上海-悠悠
发布2023-01-03 13:24:06
5420
发布2023-01-03 13:24:06
举报

前言

每个API 对应一个接口,每个API 的关键字参数根据httprunner2 框架来定义的

API 描述

我们先看一个简单的登录接口,接口描述如下

代码语言:javascript
复制
    访问地址:/api/v1/login/
    请求类型:POST
    请求头部:application/json
    请求参数:{"username":"test", "password":"123456"}

需注意的是接口地址,只需要写相对路径,比如http://127.0.0.1:8000/api/v1/login/ 前面的http://127.0.0.1:8000 这部分是环境地址,因为环境是可变的, 环境会有多套:

  • 开发环境
  • 测试环境
  • 联调环境
  • 预发布环境。

所以不要在接口地址里面把环境地址写死了

代码语言:javascript
复制
小笔记
如果你的接口地址里面带有 `http/https` 前缀的绝对地址, 那么你选运行环境的时候,环境会无效,运行的时候根据你写死的地址运行
如果你的接口地址是相对地址`/api/v1/login/`, 那么可以选不同环境运行

对照api的yaml文件

代码语言:javascript
复制
name: login case1
request:
    url: http://127.0.0.1:8000/api/v1/login/
    method: POST
    headers:
        Content-Type: application/json
        User-Agent: python-requests/2.18.4
    json:
        username: test
        password: 123456
validate:
     - eq: [status_code, 200]

参数解释:

request 参数

request 参数对应 requests 库里面的 Request 对象

代码语言:javascript
复制
import requests

s = requests.Session()
r = s.request()

可以点进去request 看源码可以支持哪些参数

代码语言:javascript
复制
def request(
        self,
        method,
        url,
        params=None,
        data=None,
        headers=None,
        cookies=None,
        files=None,
        auth=None,
        timeout=None,
        allow_redirects=True,
        proxies=None,
        hooks=None,
        stream=None,
        verify=None,
        cert=None,
        json=None,
    )

创建一个Request

代码语言:javascript
复制
# Create the Request.
        req = Request(
            method=method.upper(),
            url=url,
            headers=headers,
            files=files,
            data=data or {},
            json=json,
            params=params or {},
            auth=auth,
            cookies=cookies,
            hooks=hooks,
        )

如果你对requests有过一些基本的使用,结合上面的源码,那就很清楚每个参数是干什么的了

参数解释:

前面的登录接口示例

这里headers 参数可以不用加,type类型选了json,会自动在请求头部加上application/json 格式 (这是requests框架自带的功能)

变量的声明与使用

账号和密码不能写死了,因为可能在其它地方会用其它账号登录,需要复用API接口

变量的声明格式$varname,需注意的是变量必须放在字符串中声明,如上图。

声明变量后,必须要设置变量,不然用例转换不通过

这里的变量值给个初始值,方便调试通过

Validate 校验结果

接下来就是断言的使用,当用例运行完之后,我们需要添加检查点,校验返回结果。 API 层我们不需要加业务逻辑校验,只做接口基本校验,这里的接口还不涉及业务逻辑,简单的判断是200 OK就行了,或者校验结果返回的是JSON格式

Response 对象

那么校验的时候,有哪些对象可以使用呢?如果check地方写的语法不正确,那么会有以下报错

代码语言:javascript
复制
available response attributes: status_code, cookies, elapsed, headers, content, text, json, encoding, ok, reason, url.

可以接收的 response 对象 status_code:状态码200, 404 等 cookies:cookies elapsed:响应时间 headers:返回头部 content:响应内容的bytes数据 text:响应内容的文本数据 json:响应内容的json数据 encoding:响应编码 ok:返回bool值,状态码小于400为True reason:状态码对应的描述,如:OK, NOT FOUND等 url: 完整url地址

如果你对requests框架熟悉,那么跟Response定义是一一对应的

代码语言:javascript
复制
class Response:
    """The :class:`Response <Response>` object, which contains a
    server's response to an HTTP request.
    """

    __attrs__ = [
        "_content",
        "status_code",
        "headers",
        "url",
        "history",
        "encoding",
        "reason",
        "cookies",
        "elapsed",
        "request",
    ]

提取返回结果

我们在提取返回结果的时候,经常会用到

  • status_code 响应状态码
  • body或content 响应body内容
  • headers 响应头部

比如我们响应的头部内容

返回的头部以字典方式返回

代码语言:javascript
复制
{ "Date": "Thu, 20 Oct 2022 14:21:09 GMT", "Server": "WSGIServer/0.2 CPython/3.6.8", "Content-Type": "application/json", "Allow": "POST, OPTIONS", "X-Frame-Options": "SAMEORIGIN", "Content-Length": "110", "Vary": "Cookie", "Set-Cookie": "sessionid=in28ks6u92r7bvreklxcysdkuhklff3w; expires=Thu, 03-Nov-2022 14:21:09 GMT; HttpOnly; Max-Age=1209600; Path=/" }

于是可以通过点的方式取值

代码语言:javascript
复制
headers.Content-Type

这样就能取到对应的值”application/json”

如果是需要提取body内容

代码语言:javascript
复制
{ 
"code": 0, 
"msg": "login success!", 
"username": "test1", 
"token": "eeefb5f49316d9ecba367473fae6130b595cb7be" 
}

于是可以这样取值

代码语言:javascript
复制
body.code
body.token

注意:并不是所有的token取值,都是body.token, 还有一种情况,token可能嵌套在data里面

代码语言:javascript
复制
{ 
    "code": 0, 
    "msg": "login success!", 
    "data": {
        "token": "eeefb5f49316d9ecba367473fae6130b595cb7be" ,
        "username": "test1"
    }
}

那么token取值是这样的

代码语言:javascript
复制
body.data.token
代码语言:javascript
复制
小笔记
1.body 和 content 通用
2.字典取值body.key名称,如果有嵌套:body.key.嵌套的key, 继续点取值

学到这里一些基础的概念差不多的都掌握了,还有一些复杂场景:hooks 和extrat 功能没有讲到。

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

本文分享自 从零开始学自动化测试 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • API 描述
  • request 参数
  • 变量的声明与使用
  • Validate 校验结果
  • Response 对象
  • 提取返回结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档