tep的设计理念是让人人都可以用Python写自动化,本文就来介绍如何用tep完成增删改查接口自动化。

环境变量

编辑fixtures/fixture_admin.py

"qa": {
"domain": "https://qa.com",
},

修改qa环境的domain

登录

因为非登录接口需要从登录接口拿token,放在请求参数中,所以先在fixtures/fixture_admin.py中实现登录,修改urljson

response = request(
"post",
url=url("/api/users/login"),
headers={"Content-Type": "application/json"},
json={
"username": "admin",
"password": "123456",
}
)

根据实际响应数据结构,修改response_token赋值:

response_token = jmespath.search("token", response.json())

class Clazz:
token = response_token
jwt_headers = _jwt_headers(response_token) return Clazz

参考_jwt_headers()实现自定义headers:

def _jwt_headers(token):
return {"Content-Type": "application/json", "authorization": f"Bearer {token}"}

_表示内部函数,外部无法访问,遵循conftest.py只对外提供fixture的原则。

完整代码

def _jwt_headers(token):
return {"Content-Type": "application/json", "authorization": f"Bearer {token}"} @pytest.fixture(scope="session")
def login():
# Code your login
logger.info("Administrator login")
response = request(
"post",
url=url("/api/users/login"),
headers={"Content-Type": "application/json"},
json={
"username": "admin",
"password": "123456",
}
)
assert response.status_code < 400
response_token = jmespath.search("token", response.json()) class Clazz:
token = response_token
jwt_headers = _jwt_headers(response_token) return Clazz

说明:

  1. 可以复制login为多个fixture,如login_adminlogin_some_user,灵活运用。
  2. scope="session",表示只登录一次,所有测试用例使用同一个token。可以改为function,让每条用例使用不同token

写用例

新建测试

新建tests\crud_test.py

from loguru import logger
from tep.client import request def test(faker_ch, login, url):

pytest的fixture作为参数传入test()函数来使用,faker_chloginurlfixture_admin.py中定义好的fixture。

  • from loguru import logger 用于在测试用例中打印日志
  • from tep.client import request tep封装了请求日志功能,也可以用原生from requests import request

新增

请求参数为nicknamephone,使用faker_ch造1条测试数据:

fake = faker_ch
nickname = fake.name()
phone = fake.phone_number()

请求方法为post,headers取登录返回值login.jwt_headers

response = request(
"post",
url=url("/api/users"),
headers=login.jwt_headers,
json={
"nickname": nickname, "phone": phone
}
)

添加断言,简单判断下响应状态码<400:

assert response.status_code < 400

也可以查数据库来断言。

提取修改接口需要的数据:

user_id = jmespath.search("id", response.json())
created_at = jmespath.search("createdAt", response.json())
updated_at = jmespath.search("updatedAt", response.json())

推荐用jmespath来提取json。

查询

请求参数传入刚才定义的局部变量nickname,使用get请求并断言,headers取登录返回值login.jwt_headers

response = request(
"get",
url=url("/api/users"),
headers=login.jwt_headers,
params={
"page": 1,
"perPage": 10,
"keyword": nickname
}
)
assert response.status_code < 400

get请求需要把json关键字改为params

修改

使用faker再造1条新数据:

nickname_new = fake.name()
phone_new = fake.phone_number()

请求方法为put,headers取登录返回值login.jwt_headers

response = request(
"put",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers,
json={
"id": user_id, "createdAt": created_at, "updatedAt": updated_at,
"phone": phone_new, "nickname": nickname_new
}
)
assert response.status_code < 400

请求参数中用到了新增接口提取的数据user_idcreated_atupdated_at

删除

请求方法为deleteurl中传入user_id,headers取登录返回值login.jwt_headers

response = request(
"delete",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers
)
assert response.status_code < 400

删除接口没有json和params。

完整用例


"""
@Author : Don
@Date : 12/25/2020 1:02 PM
@Desc : 增删改查
"""
import jmespath
from loguru import logger
from tep.client import request def test(faker_ch, login, url):
fake = faker_ch
logger.info("新增")
nickname = fake.name()
phone = fake.phone_number()
response = request(
"post",
url=url("/api/users"),
headers=login.jwt_headers,
json={
"nickname": nickname, "phone": phone
}
)
assert response.status_code < 400
user_id = jmespath.search("id", response.json())
created_at = jmespath.search("createdAt", response.json())
updated_at = jmespath.search("updatedAt", response.json()) logger.info("查询")
response = request(
"get",
url=url("/api/users"),
headers=login.jwt_headers,
params={
"page": 1,
"perPage": 10,
"keyword": nickname
}
)
assert response.status_code < 400 logger.info("修改")
nickname_new = fake.name()
phone_new = fake.phone_number()
response = request(
"put",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers,
json={
"id": user_id, "createdAt": created_at, "updatedAt": updated_at,
"phone": phone_new, "nickname": nickname_new
}
)
assert response.status_code < 400
logger.info(f"用户姓名手机 {nickname} {phone} 修改后 {nickname_new} {phone_new}") logger.info("删除")
response = request(
"delete",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers
)
assert response.status_code < 400

小结

本文介绍了tep的基本使用,先配置环境变量,再修改登录代码,然后新增测试,最后编写增删改查的接口请求。每条用例放在一个函数中,通过函数参数引用fixture来使用全局环境变量,函数内部可以定义测试需要的局部变量。每个接口是一个代码块,由接口描述、测试数据、请求、断言和数据提取5部分组成。接口之间通过变量实现参数化和关联。

如何用tep完成增删改查接口自动化的更多相关文章

  1. JAVA 增删改查接口命名规范(dao层与 service 层

    开发时,有很多规范,这里写的是命名规范. Dao 接口命名   insert batchInsert selectOne selectById count selectList update dele ...

  2. web项目总结——通过jsp+servlet实现对oracle的增删改查功能

    1.DAO模式 分包:依次建立 entity:实体包,放的是跟oracle数据库中表结构相对应的对象的属性,也就是这个对象有什么 dao:增删改查接口,实现增删改查的具体方法 service:同dao ...

  3. MyBatis操作数据库(基本增删改查)

    一.准备所需工具(jar包和数据库驱动) 网上搜索下载就可以 二.新建一个Java project 1.将下载好的包导入项目中,build path 2.编写MyBatis配置文件:主要填写prope ...

  4. IDEA SpringBoot-Mybatis-plus 实现增删改查(CRUD)

    上一篇: IDEA SpringBoot-Mybatis实现增删改查(CRUD) 下一篇:Intellij IDEA 高效使用教程 (插件,实用技巧) 最好用的idea插件大全 一.前言 Mybati ...

  5. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. Mybatis学习总结(二)—使用接口实现数据的增删改查

    在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num ...

  7. 百度鹰眼Java接口调用增删改查实例

    因感觉百度鹰眼的使用场景比较符合实际业务,于是对百度鹰眼做了简单功能调试.刚开始使用springframework封装的RestTemplate,但是测试提示ak参数不存在.后又试了几种方法,均提示a ...

  8. 基于SSM之Mybatis接口实现增删改查(CRUD)功能

    国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...

  9. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

随机推荐

  1. Mac 安装Homebrew慢的问题解决

    一开始安装,在官网上的命令: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...

  2. 「有数可据」选择IT行业的1000个理由!

    这你要我编 我也编不出一千个呀 现如今转行IT 还需要1000个理由吗? 不 不需要的 一个就好   10月初 CSDN博主「有数可据」 发布了 2020年10月国内程序员薪资情况 他本人是这样说的☟ ...

  3. 【mq学习笔记】mq查找路由信息与故障延迟

    路由发现:缓存中的路由信息什么时候更新呢? 由QueueData转topicPublishInfo的List<QueueMessage>: 选择消息队列: sendLatencyFault ...

  4. 推荐:国产etl调度工具Taskctl web应用版,0元永久授权

    写在前面 2020年疫情席卷全球,更是对整个市场经济造成了严重影响,年初疫情肆虐,西方世界单方面的科技.经济封锁,国际关系吃紧.....导致很多中小型企业业务链受阻,大型企业经费资金吃紧,轮班制导致公 ...

  5. MySQL中的事务原理和锁机制

    本文主要总结 MySQL 事务几种隔离级别的实现和其中锁的使用情况. 在开始前先简单回顾事务几种隔离级别以及带来的问题. 四种隔离级别:读未提交.读已提交.可重复读.可串行化. 带来的问题:脏读.不可 ...

  6. 11_SurfaceView绘图

    学习SurfaceView绘图API的使用方法,为接下来使用SurfaceView开发游戏做准备. 1 package com.example.surfaceview; 2 3 import andr ...

  7. Kubernetes中Service的使用

    目录 简介 1. Service资源定义 1.1 Service Type ClusterIP 无头service NodePort sessionAffinity实现源地址session绑定 简介 ...

  8. 【佛山市选2013】JZOJ2020年8月7日T4 排列

    [佛山市选2013]JZOJ2020年8月7日T4 排列 题目 描述 一个关于n个元素的排列是指一个从{1, 2, -, n}到{1, 2, -, n}的一一映射的函数.这个排列p的秩是指最小的k,使 ...

  9. SpringBoot系列:六、集成Swagger文档

    本篇开始介绍Api文档Swagger的集成 一.引入maven依赖 <dependency> <groupId>io.springfox</groupId> < ...

  10. 排序--QuickSort 快排

    Quick の implementation 快排,就像它的名字一定,风一样的快.基本上算是最快的排序算法了.快排的基本思想是选择一个切分的元素.把这个元素排序了.所有这个元素左边的元素都小于这个元素 ...