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

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

一、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.mzph.cn/news/627438.shtml

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

相关文章

【线路图】世微AP5160宽电压降压型恒流芯片 LED电源 带调光SOT23-6

这是一款14-18V 3A 电流的PCB设计方案. 运用的是世微AP5160 电源驱动IC,这是一款效率高,稳定可靠的 LED 灯恒流驱动控制芯片,内置高精度比较器,固定 关断时间控制电路,恒流驱动电路等,特别适合大功率 LED 恒流驱动。 …

59.说一下 spring 的事务隔离?

spring 的事务隔离有什么作用? 用来解决并发事务所产生一些问题,并发会产生什么问题? 1.脏读2.不可重复度3.幻影读事务隔离的概念 通过设置隔离级别可解决在并发过程中产生的那些问题分别举例说明 1.脏读 上述图表示:一个事务,读取了另一个事务中没有提交的数据,会在…

组播的原理和使用

目录 测试代码(python)Linux工具 测试代码(python) code1: python实现一个使用socket模块创建一个组播套接字并将当前主机加入到该组播中。这个例子使用了组播地址"224.1.1.1"和端口5007,这个脚本可以用于验证功能或协助测试,定位问题。 imp…

【AD-3D预览-颜色更换和模型操作】AD打开3D预览模式,PCB板子显示蓝色,如何更改为绿色

问题:AD软件的3D预览模式中,PCB的颜色和其他不一样,显示的是蓝色,而且正面可以看到走线,背面看不到 原因: 这是因为选择的查看模式不一样所导致的。 在这个位置可以查看当前所使用的模式是什么&#xff0…

IPKISS ------ 远程服务器 IPKISS 内置示例安装问题

IPKISS ------ 远程服务器示例安装问题 引言正文 引言 很多时候,如果我们在服务器上使用管理员权限安装了 IPKISS 证书,而我们使用个人账号登录服务器时有时候会显示如下界面: 我们会看到这个 PyCharm (Luceda Academy) 是灰色的。那么该怎…

高阶函数和函数的柯里化

一、高阶函数 定义: 如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数: 1、若 A 函数,接受的参数是一个函数,那么 A 就可以称为高阶函数。2、若 A 函数,调用的返回值依然是一个函数&#x…

嵌入式行业算青春饭吗?

今日话题,嵌入式行业算青春饭吗?嵌入式行业的技术要求确实非常广泛,需要深厚的知识广度和深度。这意味着入行门槛较高,我们需要了解不仅是软件和硬件,还要熟悉底层接口和硬件信号的处理方式,了解数据在计算…

网络文件共享服务、FTP和yum仓库

目录 一、存储类型 1、存储类型一共分为三种: 2、三种存储架构的应用场景 二、FTP文本传输协议 1、FTP工作原理介绍 2、FTP数据连接模式 3、svftpd的安装和配置 4、vsftpd的配置作用 5、黑名单和白名单的使用(简要介绍) 三、YUM 1…

芯品荟 | 温控器、线控器市场调研报告

PART ONE 产品简介 一、什么是温控器、线控器 温控器\线控器属于工业测量及智能家居产品,目前主流的包括LCD段码屏、TFT液晶屏。 PART TWO 市场规模 智能家居线控器市场规模 智能家居已成为最具潜力的消费科技市场,2022年市场规模约为6515.6亿元。 …

【leetcode 2719.统计整数数目】特殊动态规划之数位DP(数位动态规划)

2719. 统计整数数目 题目描述 给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2min_sum < digit_sum(x) < max_sum. 请你返回好整数的…

微信小程序定义并获取日志/实时log信息

步骤一&#xff1a;开通实时日志 可以在开发者工具->详情->性能质量->实时日志&#xff0c;点击前往&#xff0c;在浏览器打开we分析界面&#xff1a; 也可登录小程序管理后台&#xff0c;点击统计进入we分析&#xff1a; 在we分析界面找到性能质量&#xff0c;打开实…

【提示学习论文七】Visual Prompt Tuning论文原理

文章目录 Visual Prompt Tuning&#xff08;VPT&#xff09;文章介绍Abstract1 Introduction2 Related Work3 Approach3.1 准备工作3.2 Visual-Prompt Tuning(VPT)3.2.1 VPT-Shallow3.2.2 VPT-Deep3.2.3 Storing Visual Prompts 存储视觉提示 4 实验主要结果模型设计变体的消融…

Python文本向量化入门

一、引言 文本向量化是将文本数据转换为数值型格式的过程&#xff0c;以便能够使用机器学习算法进行训练和预测。在Python中&#xff0c;文本向量化通常使用词袋模型&#xff08;Bag of Words&#xff09;或TF-IDF等统计方法来实现。本文将介绍如何使用Python进行文本向量化&a…

抠图换背景的工具有吗?分享4款好用的!

在数字时代&#xff0c;设计已经成为了我们生活中不可或缺的一部分。无论是为了工作还是个人爱好&#xff0c;我们都需要掌握一些设计技能。其中&#xff0c;抠图换背景是一项非常重要的技能。那么&#xff0c;有哪些工具可以帮助我们快速、准确地完成这项任务呢&#xff1f;今…

公司运营数据分析大屏:引领企业决策,驱动业务增长

在数字化时代&#xff0c;数据已经成为企业决策的关键。为了更好地洞察市场趋势、优化业务流程、提升运营效率&#xff0c;越来越多的企业开始引入数据分析大屏以分析公司运营状况。这一创新举措不仅改变了传统的管理模式&#xff0c;更引领企业迈向智能化决策的新篇章。 公司运…

什么是CDN(内容分发网络)

CDN通过在全球范围内分布的服务器网络优化数据传输&#xff0c;大幅提升了网站性能和用户体验。 将详细介绍CDN的工作原理、应用和它如何改变我们访问互联网内容的方式。 CDN的基本概念 定义&#xff1a;CDN是一组分布在多个地理位置的服务器网络&#xff0c;旨在通过更接近用…

VPN深度解析:构建安全网络的关键技术

文章目录 VPN&#xff08;虚拟私人网络&#xff09;简介VPN的工作原理VPN与DNS&#xff08;域名系统&#xff09;DNS的基本工作原理VPN中的DNS查询VPN与DNS泄露保护VPN与智能DNS VPN与DHCP&#xff08;动态主机配置协议&#xff09;DHCP的基本功能VPN环境中的DHCPVPN与DHCP的结…

Vue3+antDesignVue实现表单校验

一 <a-formref"form":model"form":rules"rules":label-col"{ md: { span: 6 }, sm: { span: 24 } }":wrapper-col"{ md: { span: 18 }, sm: { span: 24 } }"><!-- <a-form-item label创建人: namecreated…

MySQL进阶45讲【2】日志系统:一条SQL更新语句是如何执行的?

1 前言 上篇文章我们系统了解了一个查询语句的执行流程&#xff0c;并介绍了执行过程中涉及的处理模块。相信大家还记得&#xff0c;一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块&#xff0c;最后到达存储引擎。 那么&#xff0c;一条更新语句…

最新使用宝塔反代openai官方API接口搭建详细教程及502 Bad Gateway错误问题解决

一、前言 宝塔反代openai官方API接口详细教程&#xff0c;实现国内使用ChatGPT502 Bad Gateway问题解决&#xff0c; 此方法最简单快捷&#xff0c;没有复杂步骤&#xff0c;不容易出错&#xff0c;即最简单&#xff0c;零代码、零部署的方法。 二、实现前提 一台海外VPS服务…