接口自动化神器 apin【 快速入门篇】

news2024/11/20 10:25:05

关于自动化测试,这些年经历了太多的坑,有被动的坑,也有自己主动挖的坑,在这里做了一些总结。

一、apin 介绍及安装

1、什么是 apin

apin是一个无需写代码,就可以进行接口自动化测试的框架,只需要通过json或yaml文件编写非常简洁的用例数据,即可完成接口自动化测试,并生成自动化测试报告。apin旨在帮助更多不会写代码的小伙伴掌握接口自动化测试的能力。框架使用起来非常简单,易上手,只需要几个小时就能掌握!目前发布的是第一个版本后续会持续优化,丰富新的功能

2、安装 apin

apin 是基于 python3.6 开发的,安装前请确认你的 python 版本 >3.6

  • 安装命令 pip install apin

二、快速入门

1、项目创建

  • 创建命令 apin create 项目名

安装好 apin 之后,打开命令终端输入创建命令,即可在当前路径下创建项目。

cd 切换到项目之中,即可看到如下的项目结构

 

  • 项目文件说明 casedata: 存放 YAML 和 JSON 格式编写的用例文件 testcases:py:存放 py 编写的用例目录 func_tools.py:自定义的函数工具文件 setting.py:整个项目的全局配置文件 run.py:项目运行入口文件

2、用例编写

apin 用例编写支持 YAML 文件,JSON 文件,py 文件三种方式,下面通过一个接口的用例 demo 来快速了解一下

1、接口 demo:

  • 接口地址:http://httpbin.org/post
  • 请求方法:post
  • 请求参数类型:application/json
  • 请求参数: 参数名 类型 说明 user str 账号 pwd str 密码

 

2、JSON 编写用例

该项目的 casedata 目录下,定义一个以 test 开头的 JSON 文件,按照【apin 用例编写规范-json】编写用例即可

  • 案例 { "host": "http://api.XXX.com/futureloan/", "Cases": [ { "title": "普通用户注册", "interface": "member/register", "method": "post", "json":{"mobile_phone":"133010121224","pwd":"lemonban"}, "verification": [] } ] }

3、YAML 编写用例

在项目的 casedata 目录下,定义一个以 test 开头的 YAML 文件,按照【apin 用例编写规范-yaml】编写用例即可

  •  案例 # 域名 host: http://api.XXX.com/futureloan/ # 用例数据 Cases: - title: 普通用户注册 interface: member/register method: post json: mobile_phone: ${{user_mobile}} pwd: lemonban

4、py 文件编写用例 

  在testcases目录中定义一个以test开头的py文件,定义一个以Test开头的类,并且继承于apin.core.httptest.HttpCase类,按照【apin用例编写规范-py】编写用例即可
  •  案例 from apin.core.httptest import HttpCase class TestStreamV3(HttpCase): host = "http://api.XXX.com/futureloan/" Cases = [ # 用例1:普通用户注册 { 'title': "普通用户注册", 'interface': "member/register", "method": "post", 'json': {"mobile_phone": "${{user_mobile}}", "pwd": "lemonban"}, }, ]

3、用例运行

  • 方式 1: 终端项目路径下输入命令 apin run
  • 方式 2 直接使用 python 运行项目的 run.py 文件

 

4、测试报告和日志

  • 日志:项目运行完,会自动在项目路径下生成详细的运行日志
  • 696 x 371 1517 x 809
  • 测试报告:apin 的测试报告是其第三方库 unittestreport 生成的 运行完会在项目目录的 reports 目录中,自动生成详细的 HTML 测试报告。

关于 apin 的入门使用就介绍到这里啦,后续会更新 apin 使用的详细文档

 

三、用例编写规范

1、概念介绍:

  • 用例集:apin 中创建的每一个 test 开头的用例文件(py,json,yaml),被称之为一个用例集。一个用例集下面可以定义多条测试用例。
  • 测试用例: 用例集中 Cases 字段中的一条数据就是一个测试用例

 2、用例集的主要字段介绍

  •  host:用例接口的 host 地址(接口的域名) 类型:字符串 例: host = "http://api.lemonban.com/futureloan/"
  • headers:指定用例使用的请求头 类型:字典 例 headers = {"User-Agent": "apin/musen"}
  • method:指定用例接口的请求方法 类型:字符串 例:post,get
  • interface:指定用例接口地址(接口 url 域名后面的部分) 类型:字符串
  • env: 设置用例集运行环境的局部变量 类型:字典 例: env = { "user_mobile": '13109099878', "pwd": 'lemonban' }
  • extract:指定用例请求完要提取的变量
  • verification:指定用例的断言
  • Cases:设置该测试集下的用例

3、用例字段介绍

1、主要字段:

  •  用例集中除 env 字段之外的字段 1、用例集中除 env 和 Cases 字段之外,上述用例集中的字段,均支持在用例中自定义。 2、如果用例中定义了用例集中的字段,就使用自己定义的,没定义则引用 用例集中的。
  • title:用例的描述字段(必传字段)
  • 测试报告和日志信息中用例的描述
  • json: 用来传递 JSON 类型的请求参数
  • 请求参数类型为:content-type:application/json,使用该字段来传递请求参数
  • data:用来传递表单类型的请求参数
  • 请求参数类型为:content-type: application/x-www-form-urlencoded,使用该字段来传递请求参数
  • params: 用来查询字符串参数
  • 请求参数,以?key=value 的形式 拼接在 url 后面的参数

 

2、其他字段

除了上述主要字段之外,python 中的 requests 库中的 requests.request 方法所有的请求参数,均支持在用例中定义字段,

这些字段在大多数情况下都用不到,如果有用到

  • files:接口用于文件上传
  • 请求参数类型为:content-type:application/from-data,使用该字段来传递请求参数,常用语文件上传
  • cookies:请求的 cookie 信息(apin 中同一个用例集会自动化传递 cookie,一遍情况下,不需要使用该字段来传递 cookie)
  • auth: 用于 Basic/Digest/Custom HTTP 认证
  • timeout:设置 http 请求超时时间
  • allow_redirects:是否运行请求重定向
  • proxies:代理请求的
  • stream:是否立即下载响应内容
  • verify:是否进行证书校验(如果要忽略 HTTPS 请求的证书校验,则将此参数设置为 False)
  • cert:指定校验证书的路径

4、用例编写

1、python 编写用例

  •  步骤一、在 testcases 目录中定义一个以 test 开头的 py 文件,
  • 步骤二、在文件中定义一个以 Test 开头的类,并且继承于 apin.core.httptest.HttpCase 类
  • 步骤三、在类中,编写测试集的字段值 字段名 = 字段值 from apin.core.httptest import HttpCase class TestDomeV3(HttpCase): host = "http://api.lemonban.com/futureloan/" headers = {"X-Lemonban-Media-Type": "lemonban.v2"} # 定义测试前置方法 setup_hook = {"timestamp": 'F{get_timestamp()}'} # 预设变量 env = { "user_mobile": 'F{rand_phone("155")}', "admin_mobile": 'F{rand_phone("133")}' } # 结果校验 verification = [ ["eq", 0, 'V{{$..code}}'], ["eq", "OK", "V{{$..msg}}"] ]
  • 步骤四、在 Cases 字段中编写用例数据 from apin.core.httptest import HttpCase class TestDomeV3(HttpCase): host = "http://api.XXXX.com/futureloan/" headers = {"X-Lemonban-Media-Type": "lemonban.v2"} # 定义测试前置方法 setup_hook = {"timestamp": 'F{get_timestamp()}'} # 预设变量 env = { "user_mobile": 'F{rand_phone("155")}', "admin_mobile": 'F{rand_phone("133")}' } # 结果校验 verification = [ ["eq", 200, 'status_code'], ["eq", {'code': 0, "msg": "OK"}, {'code': 'V{{$..code}}', "msg": "V{{$..msg}}"}] ] Cases = [ # 用例1:普通用户注册 { 'title': "普通用户注册", 'interface': "member/register", "method": "post", 'json': {"mobile_phone": "${{user_mobile}}", "pwd": "lemonban"}, }, # 用例2:管理员注册 { 'title': "管理员注册", 'interface': "member/register", "method": "post", 'json': {"mobile_phone": "${{admin_mobile}}", "pwd": "lemonban", "type": 0} }, ]

3、YAML 编写用例

  使用yaml编写用例前 建议先去学习一下yaml的语法
  •  步骤一:在 casedata 中定义一个 test 开头的 YAML 文件
  • 步骤二:在 YAML 文件中定义测试集的字段值 # 域名 host: http://api.xxxxx.com/futureloan/ # 请求头 headers: X-Lemonban-Media-Type: lemonban.v2 # 用例前置钩子函数 setup_hook: timestamp: F{get_timestamp()} # 预设运行变量 env: user_mobile: F{rand_phone("155")} admin_mobile: F{rand_phone("133")} # 结果校验字段 verification: - ["eq", 0, 'V{{$..code}}'] - ["eq", "OK", "V{{$..msg}}"]
  • 步骤三:在 Cases 字段中编写测试用例 # 用例数据 Cases: - title: 普通用户注册 interface: member/register method: post json: mobile_phone: ${{user_mobile}} pwd: lemonban - title: 管理员注册 interface: member/register method: post json: mobile_phone: ${{admin_mobile}} pwd: lemonban type: 0

4、JSON 编写用例

使用 YAML 编写用例前 建议先去学习一下 JSON 的语法,JSON 文件中字段名都需要使用双引号

  • 步骤一:在 casedata 中定义一个 test 开头的 JSON 文件
  • 步骤二:在 JSON 文件中定义测试集的字段值
  • 步骤三:在 JSON 文件中定义测试集的字段值

 { "host": "http://api.XXXXX.com/futureloan/", "headers": {"X-Lemonban-Media-Type": "lemonban.v2"}, "setup_hook": {"timestamp": "F{get_timestamp()}"}, "env": { "user_mobile": "F{rand_phone('155')}", "admin_mobile": "F{rand_phone('133')}" }, "verification": [ ["eq", {"code": 0, "msg": "OK"}, {"code": "V{{$..code}}", "msg": "V{{$..msg}}"}] ], "Cases": [ { "title": "普通用户注册", "interface": "member/register", "method": "post", "json": { "mobile_phone": "${{user_mobile}}", "pwd": "lemonban" } }, { "title": "管理员注册", "interface": "member/register", "method": "post", "json": { "mobile_phone": "${{admin_mobile}}", "pwd": "lemonban", "type": 0 } } ] }

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1389411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

02章【JAVA编程基础】

变量与标识符 变量 数学名词:变数或变量,是指没有固定的值,可以改变的数。变量以非数字的符号来表达,一般用拉丁字母。变量是常数的相反。变量的用处在于能一般化描述指令的方式。计算机解释:变量就是系统为程序分配…

【Spring 篇】深入探索:Spring集成Web环境的奇妙世界

嗨,亲爱的小白们!欢迎来到这篇有关Spring集成Web环境的博客。如果你曾对如何在Spring中构建强大的Web应用程序感到好奇,那么这里将为你揭示Web开发的神秘面纱。我们将用情感丰富、语句通顺的文字,以小白友好的方式,一探…

DBeaver SQL脚本执行配置

对生产环境数据迁移到测试环境时,单条执行可能时间过长、或者内存装不下。最快的方法是执行SQL脚本。 本地数据库客户端:DBeaver 该客户端是不自带脚本执行客户端的,如下图: mysql官网下载workbench,可以连通客户端执…

CDMP认证与CDGA/CDGP的区别有哪些?

👑CDMP是DAMA国际组织的全英文考试 🌈CDGA和CDGP是DAMA中国主导,考试为中文考试。需要在规定的时间内报名后,参加线下笔试考试。 👍CDGA、CDGP证书和英文版的CDMP证书都是国际通用的,是数据管理领域专业的职…

嵌入式工作岗位未来会不会越来越少?

今日话题,嵌入式工作岗位未来会不会越来越少?未来的嵌入式岗位机会将会逐渐增多,因为嵌入式技术是万物互联的基础,从智能手表到智能汽车,嵌入式都扮演着关键角色。虽然相比计算机科学CS,嵌入式领域的天花板…

Klocwork—符合功能安全要求的自动化静态测试工具

产品概述 Klocwork是Perforce公司产品,主要用于C、C、C#、Java、 python和Kotlin代码的自动化静态分析工作,可以提供编码规则检查、代码质量度量、测试结果管理等功能。Klocwork可以扩展到大多数规模的项目,与大型复杂环境、各种开发工具集成…

ACM:每日学习 状压dp

状压dp: 状压dp是对一般dp的改进: //对于判断多种物品的取法,开多维数组比较麻烦,也不好开,使用二进制来表示物品的取与否。 //使用二进制的话,位运算就更能省时间了,而且更会节省空空间&…

3D Guassians Splatting相关解读

从已有的点云模型出发,以每个点为中心,建立可学习的高斯表达,用Splatting即抛雪球的方法进行渲染,实现高分辨率的实时渲染。 1、主要思想 1.引入了一种各向异性(anisotropic)的3D高斯分布作为高质量、非结…

实战 php 使用 wkhtmltopdf 生成pdf的全过程

公司里边有生成pdf报告的业务需求,之前有过尝试用tcpdf,直接生成的pdf的过程,但是pdf报告的内容数据,根据不同内容的变化,都是各种各样的bug,一直处理修修补补的状态,让后台开发人员很是头疼. 经过思索和甄选,总结出我们的业务中是由于样式不可控导致的,当时从逻辑上就思考到用…

CHS_06.2.1.6_2+线程的实现方式和多线程模型

CHS_06.2.1.6_2线程的实现方式和多线程模型 知识总览线程的实现方式用户级线程(User-Level Thread, ULT)内核级线程 多线程模型一对一模型多对一多对多模型 知识回顾 在上个小节中 我们学习了线程相关的一些基本概念 基础的知识 那这个小节中 我们回来看…

人脸识别打卡系统的设计与应用!人脸识别打卡系统有什么用?

教育行业的快速日新月异,对信息化建设的要求也越来越高。学校物业管理成为保障学校正常运行的重要环节。然而,在实践中,由于服务人员数量不足、管理不规范等问题,服务质量往往难以保证物业对学校师生的服务质量。为了解决这一问题…

如果你正在学自动化测试,那么请你仔细看完这篇文章

接触了不少同行,由于他们之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的人。 本人从事软件自动化测试已经近5年,从server端到web端,从API到mobile,切身体会到自动化带来的好处与痛楚…

高级 Python 面试问题与解答

文章目录 专栏导读1.什么是PIP?2.什么是 zip 函数?3.Python 中的 __init __ () 是什么?4.Python 中的访问说明符是什么?5.Python 中的单元测试是什么?6.Python全局解释器锁(GIL)?7.P…

linux yum仓库

yum是基于rpm包构建的软件更新机制,能够自动解决软件包之间的依赖关系。 常用命令 查询 yum list [软件名] 显示可用的安装包,如果不加软件名则显示所有的可用包 yum info [软件名] 显示安装包的详细信息 如果不加软件名是显示所有包…

CF1178F2 Long Colorful Strip 题解 搜索

Long Colorful Strip 传送门 题面翻译 题目描述 这是 F 题的第二个子任务。F1 和 F2 的区别仅在对于 m m m 和时间的限制上 有 n 1 n1 n1 种颜色标号从 0 0 0 到 n n n,我们有一条全部染成颜色 0 0 0 的长为 m m m 的纸带。 Alice 拿着刷子通过以下的过…

MybatisPlus框架入门级理解

MybatisPlus 快速入门入门案例常见注解常用配置 核心功能条件构造器自定义SQLService接口 快速入门 入门案例 使用MybatisPlus的基本步骤: 1.引入MybatisPlus的起步依赖 MybatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能&#…

Spring Cloud 微服务中 gateway 网关如何设置健康检测端点

主要是为了让 k8s 识别到网关项目已经就绪,但是又不想在里面通过 Controller 实现。因为在 Controller 中这样做并不是最佳实践,因为 Gateway 的设计初衷是专注于路由和过滤,而不是业务逻辑的处理。 在 Gateway 中配置健康检查端点可以通过以…

QT报错记录

Ubuntu22.04安装Qt之后启动Qt Creator报错: Fron 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platforn plugin. Could not load. This application failed to start because no Qt platforn plugin could be initialized. Reinstalling t…

Qt vs开发将Graphics view提升 QChartview

1提升部件 2 添加Charts模块 3 在包含ui类的头文件添加QT_CHARTS_USE_NAMESPACE 或者添加 using namespace QtCharts #include <QtWidgets/QMainWindow> #include <QtCharts> #include "ui_mainwin.h" #include <qchartview.h> QT_CHARTS_USE_N…

k8s---pod控制器

pod控制器发的概念&#xff1a; 工作负载&#xff0c;workload用于管理pod的中间层&#xff0c;确保pod资源符合预期的状态。 预期状态&#xff1a; 1、副本数 2、容器重启策略 3、镜像拉取策略 pod出故障的出去等等 pod控制器的类型&#xff1a; 1、replicaset&#xf…