前言

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

API 描述

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

    访问地址:/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 这部分是环境地址,因为环境是可变的,
环境会有多套:

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

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

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

对照api的yaml文件

name: login case1
request:url: http://127.0.0.1:8000/api/v1/login/method: POSTheaders:Content-Type: application/jsonUser-Agent: python-requests/2.18.4json:username: testpassword: 123456
validate:- eq: [status_code, 200]

参数解释:

参数 是否必须 作用
name 必选 接口的名称
request 必选 requests库的request 对象
validate 可选 校验结果,api层只做接口基本校验,比如状态码

request 参数

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

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

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

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

# 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有过一些基本的使用,结合上面的源码,那就很清楚每个参数是干什么的了

参数解释:

参数 是否必须 作用
method 必选 请求方式:GET/POST/PUT/DELETE
url 必选 尽量写相对路径: /api/v1/login/
type 可选 这个是区分参数类型:params/json/data
Query Params 可选 url上的查询参数,如:/api/data?page=1&size=10
json 可选 POST 请求的JSON 类型参数,application/json 格式
data 可选 POST 请求的data 类型参数,application/x-www-form-urlencoded 格式
headers 可选 请求头部参数

前面的登录接口示例

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

变量的声明与使用

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

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

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

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

Validate 校验结果

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

Response 对象

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

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定义是一一对应的

class Response:"""The :class:`Response <Response>` object, which contains aserver's response to an HTTP request."""__attrs__ = ["_content","status_code","headers","url","history","encoding","reason","cookies","elapsed","request",]

提取返回结果

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

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

比如我们响应的头部内容

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

{ "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=/" }

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

headers.Content-Type

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

如果是需要提取body内容

{
"code": 0,
"msg": "login success!",
"username": "test1",
"token": "eeefb5f49316d9ecba367473fae6130b595cb7be"
}

于是可以这样取值

body.code
body.token

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

{ "code": 0, "msg": "login success!", "data": {"token": "eeefb5f49316d9ecba367473fae6130b595cb7be" ,"username": "test1"}
}

那么token取值是这样的

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

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

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

  1. 搭建or部署接口自动化平台从零到一的过程

    接口自动化部署or搭建目录 前言 搭建 前端环境 后端环境 部署 部署环境 前端部署 后端部署 第一种方式后端部署 第二种方式后端部署 前言 首先感谢cheeath大佬的支持和帮助,自动化平台成功在服 ...

  2. 开源接口自动化平台sosotest的使用心得

    开始接触接口测试的时候,使用的jmeter,当时还是一个同事给分享了jmeter的基本操作功能. 后来研究接口自动化,想要利用jmeter来做这个,逐渐用上了数据库连接,前置,后置等略微高级一些的功能 ...

  3. 第四:SpringBoot生成Api管理mysql内保存的测试数据(接口自动化平台扩展)

    本篇文章讲解的是通过api去管理mysql内存储的测试数据,使用的是SpringBoot框架,同样是使用java语句. 关于SpringBoot的环境搭建,在之前的文章内讲解过,本篇不做过多叙述,有疑 ...

  4. API接口开放平台-淘宝API接口详解

    为了进行电商平台 的API开发,首先我们需要做下面几件事情. 1)开发者注册一个账号 2)然后为每个 应用注册一个应用程序键(App Key) . 3)下载 API的SDK并掌握基本的API基础知识和 ...

  5. 接口自动化平台(一):antd + antd pro 安装和简介

    目录 1. antd 1.1 进入ant.design官网做初步了解 1.2 安装antd 1.3 动手实际操作 2. ant design pro 2.1 antd pro介绍 2.2 antd p ...

  6. RestCloud API接口管理平台

    RestCloud API接口管理平台 RestCloud API管理平台是完全自主研发的企业级统一API接口管理平台,本平台不但可以从Java代码中的注解自动扫描生成API文档还能通过OpenAPI ...

  7. apache ant 安装_Jmeter+ Ant+jenkins 接口自动化框架实现

    一.文件配置 •编写jmeter脚本 •上传jmx脚本到jmeter目录下,新建一个Loadtest目录, •在Tomcat webapp 文件夹下面新建报告输出文件夹testReport: •将jm ...

  8. 利用自动化平台可以做的那亿点事 |得物技术

    前言 相信大家对接口自动化已经不陌生了,这是几乎我们每个迭代都会投入的事情,但耗费了这么多精力去编写和维护,实际的收益如何呢?如果收益不好,是不是说明我们自动化 case 的实现方式.使用方式还有改进 ...

  9. 测试自动化平台 | 测试开发工程师的进阶之路

    https://mp.weixin.qq.com/s/WU5h8FW6BT5YZtlsSuCIcw 「摘要」随着近几年国内IT行业高速发展,对测试工程师的要求也越来越高,其作用也越来越重要,但很多测试 ...

  10. 理想中的接口自动化项目

    如何评价接口自动化项目 我理想中的接口自动化项目,是有一套脚本,能够100%覆盖核心业务场景,能够回归线上频繁出现的问题,能够支持手工无法验证的场景,能够抛出偶现问题,能够包含容易遗漏的边界场景.异常 ...

最新文章

  1. 虚拟机无法使用网卡桥接模式
  2. 01-iOS获取系统iTunes音乐
  3. django-rest-framework第一次使用使用常见问题
  4. 云计算的发展趋势_2020年的云计算发展趋势预测
  5. PyTorch: cannot import name ‘container_abc‘ 或者 ‘int_classes‘ form torch._six
  6. 【Elasticsearch】ARS提升检索吞吐率
  7. 做游戏,学编程(C语言) 13 消灭星星
  8. centos mysql-5.5.20_mysql-5.5.20+CentOS 6.2 编译安装全过程详解(2)
  9. 层次选择器[selector_2.html]
  10. php 时分秒转时分_php 时分秒转为秒,秒转化为天时分秒
  11. linux rs232驱动程序,Ubuntu安装USB to RS232驱动
  12. matlab 从 excel读取 日期_MATLAB一键记账它不香吗?
  13. Autojs4脚本大合集(薅羊毛专业版的脚本)
  14. Liu C-2021-1: Nontrivial Gates FET
  15. 使用 KNX Manufacturer Tool 编写 knx 数据库的步骤
  16. 第41章 RS-485通讯实验—零死角玩转STM32-F429系列
  17. 【转载】路由器的原理与作用
  18. 大规模数字设计的特点
  19. 用linux命令操作手机,Linux基本操作
  20. 微信公众号怎么设置下载文件

热门文章

  1. 手把手教你如何使用IOMETER测试工具测试存储
  2. CrossApp 0.4.2 发布,隆重推出 WebView
  3. ViewHolder的使用
  4. 【甄选素材】80棵EVERMOTION2.5维树 附使用教程
  5. 使用计算机传真,使用计算机发送和接收传真
  6. 扫一扫二维码隐私权政策
  7. java实现生命游戏
  8. docker 容器备份mysql shell脚本
  9. treetable怎么带参数_jQuery.treetable使用及异步加载
  10. 学习日记| javaScript在网页绘制国际象棋盘