超好用的接口自动化框架,lemon-easytest内测版发布,赶紧用起来~

easytest

easytest 是一个接口自动化框架。

功能特点:

  • 支持 http 接口测试

  • 支持 jsonhtml,xml 格式的响应断言

  • 支持数据库断言

  • 支持用例标记筛选

  • 支持用例失败重运行

  • 支持多线程

安装

pip install lemon_easytest

快速使用

不需要写任何代码,所有你需要做的就是按照规则编写用例文档,然后运行命令 easytest

easytest 支持 yaml 格式和 excel 格式的用例文档。

在任意目录下创建文件 singe_test.yaml,内容如下:


test:                                 # 表名这是单个测试用例
  title: 一个简单的测试                 # 用例名称
  url: http://httpbin.org/get         # url
  method: get                         # 请求方法
  request:                            # 请求参数字段
    headers:                          # 请求头
      CustomerHeader: lemonban        # 头信息
    params:                           # url参数
      search: lemonban                # url参数键值对
  res_type: json                      # 响应数据类型
  status_code: 200                    # 状态码
  assertion:                          # 断言表达式
    -
      - eq                            # 相等
      - $..Customerheader             # 结果提取表达式
      - lemonban                      # 期望值
    -
      - eq
      - $..search
      - lemonban

 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386      

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a 然后在命令行运行

easytest yourpath/single_test.yaml
INFO 2021-10-30 14:53:26,081 :==========single_test测试开始============
INFO 2021-10-30 14:53:26,081 :用例【一个简单的测试】开始测试>>>>>>>>
INFO 2021-10-30 14:53:26,591 :用例【一个简单的测试】测试结束<<<<<<<<<
INFO 2021-10-30 14:53:26,591 :==========single_test测试结束============
用例总数:1,成功:1个,跳过:0,失败:0个,错误:0个

通过 python 代码调用 easytest

可以直接通过 python 调用 easytest

import easytest
easytest.main()

也可传递参数

easytest.main(['test_dir', '--debug', '--logfile', 'test.log'])

编写用例

测试用例

easytest 中编写单条测试用例可以使用 yaml 格式,也可以使用 Excel 文件。

Excel 格式

使用 Excel 文件编写单条测试用例非常简单,例如将上面的案例编写到 Excel 文件中格式如下:!

图片

当用 Excel 文件编写用例时保持数据的整洁,其他单元格不要有任何数据,以免加载用例数据失败。easytest 会根据 Excel 文件的 sheetname 来组织用例,所以单条用例请删除其他的表。

YAML 格式

当使用 YAML 文件编写单条测试用例时最外层键必须为 test,因为 easytest 根据它来确定一个 YAML 文件中的数据是单条测试用例。

test:                                 # 表名这是单个测试用例
  title: 一个简单的测试                 # 用例名称
  url: http://httpbin.org/get         # url
  method: get                         # 请求方法
  request:                            # 请求参数字段
    headers:                          # 请求头
      CustomerHeader: lemonban        # 头信息
    params:                           # url参数
      search: lemonban                # url参数键值对
  res_type: json                      # 响应数据类型
  status_code: 200                    # 状态码
  assertion:                          # 断言表达式
    -
      - eq                            # 相等
      - $..Customerheader             # 结果提取表达式
      - lemonban                      # 期望值
    -
      - eq
      - $..search
      - lemonban

 

测试套件

easytest 中测试套件表示一组有顺序的测试用例,当启动多线程时,以测试套件为单位交给线程去按照套件中的顺序执行测试用例。注意套件和套件间的执行顺序是不固定的。

单个测试用例也会被套上一层测试套件的壳子,yaml 格式的单测试用例会被封装到以 YAML 文件名为名字的测试套件中,Excel 格式的单测试用例会被封装到以表名为名字的测试套件中。

Excel 格式

Excel 文件中编写测试套件与单测试用例没有区别,按照执行顺序从上往下依次编写即可,例如:

图片

在单个 Excel 文件中可以编写多个测试套件,一个表即为一个测试套件,所以非测试用例或者项目设置的表请删除。

YAML 格式

在 YAML 文件中编写测试套件,最外层的 key 必须为 test_suit,因为 easytest 根据它来确定一个 YAML 文件中的数据是一个测试套件。注意和 Excel 不同,YAML 格式不支持在一个文件中编写多个测试套件,因为多层级的嵌套缩进将是噩梦。

test_suit:
  - title: 一个简单的测试
    url: http://httpbin.org/post
    method: post
    status_code: 200
    res_type: json
    request:
      json:
        username: xinlan
        password: 123456
    assertion:
      - [eq,$..username,xinlan]
      - [eq,$..password,123456]

  - title: 一个不简单的测试
    url: http://httpbin.org/post
    method: post
    status_code: 200
    res_type: json
    request:
      json:
        username: xinlan
        password: 123456
    assertion:
      - [ eq,$..username,xinlan ]
      - [ eq,$..password,123456 ]

 

用例收集规则

easytest 命令后接受一个位置参数 file_or_dir,它可以是一个用例文件,也可以是一个目录。

当传入一个用例文件时,它必须是上一节提到的符合格式的 excel 或者 yaml 文件,Excel 文件只支持 .xlsx 后缀的格式,YAML 文件支持 .yaml 或者 .yml 后缀。

当传入一个目录时,easytest 会递归的去这个目录下搜索所有符合规则的用例文件(excel、yaml),并从中提取用例,当遇到格式错误时,程序会中断,所以不要把无关的 Excel 文件和 YAML 文件放在用例目录下。

用例字段说明

  • title

    字符串,用例标题

  • url

    字符串,请求的 url,支持完整 url,例如 https://httpbin.org/get,也支持项目配置中的接口对应的 key。例如:register

  • method

    字符串,http 请求方法

  • request

    JSON 对象,http 请求携带的参数,请求头,cookie 等。底层调用 python 的 requests 库,参数名完全一致。

    • params

      JSON 对象,http 请求携带的 url 参数。例如

request:
  params:
    search: python
  •   data

        JSON 对象,http 请求携带的表单参数。例如

request:
  data:
    username: xinlan
    password: 123456

    • JSON

      JSON 对象,http 请求携带的 JSON 参数。例如

      request:  json:    username: xinlan    password: 123456
    • headers

      JSON 对象,http 请求携带的 header。例如

      request:  headers:    X-Lemonban-Media-Type: lemonban.v1​​​​​​​
    • cookie

      JSON 对象,http 请求携带的 cookie 信息。例如

request:  cookies:    key: value
  • res_type

    字符串,http 响应类型,可选值有:json,xml,html

  • status_code

    整数,http 断言响应状态码。

  • assertion

    数组对象,响应结果断言表达式。格式为:[[条件符号,提取表达式,期望结果],[条件符号1,提取表达式1,期望结果1],...],例如:​​​​​​​

assertion:  - [eq,$..username,xinlan]  - [eq,$..password,123456]

条件符号支持:

  • eq: 相等

  • gt: 大于

  • gte:大于等于

  • lt: 小于

  • lte:小于等于

  • in:在其中

  • contains:包含

目前仅支持 eq

提取表达式支持:

    • 正则表达式

    • jsonpath 表达式

    • xpath

  • db_assertion

    数组对象,数据库断言表达式。格式为:[[条件符号,sql语句,期望结果],[条件符号1,sql语句1,期望结果1],...],例如:

db_assertion:
  - [eq,select leave_amount from member where id=#invest1_id#,0]
  - [exist,select id from invest where member_id=#invest1_id# and loan_id=#loan_id# and amount=5000,true]
  - [exist,select id from financelog where pay_member_id=#invest1_id# and amount=5000 and pay_member_money=0 and status=1,true]

条件符号支持:

    • eq: 相等

    • exist: 存在。使用 exist 时,期望结果必须为 true

  • extract

    数组对象,响应结果提取表达式。格式为 [[变量名,提取表达式],[变量名2,提取表达式2],...] 例如:​​​​​​​

exract:  - [mobile_phone, $..mobile_phone]  - [token, $..token]
  • 底层 easytest 会将提取出的值绑定到用例类的变量名属性上,供后面的用例依赖。

    提取表达式支持:

    • jsonpath

    • 正则表达式

    • xpath 表达式

  • marks

    字符串,用例标记,运行参数中可以筛选出匹配的标记用例

项目配置

easytest 命令会从当前目录下读取名为 easytest.ini 的配置文件,下面是一个完整配置文件的例子:

[project]                                  # 项目配置段
name = xxx项目                             # 项目名称    
host = http://some.api.root.com           # 项目接口根地址
[db_config]                                # 数据库配置
host = dbhost                              # 数据库主机
user = root                                # 数据库用户
password = 123456                         # 数据库密码
db = somedb                                # 数据库名
charset = utf8                            # 字符编码
port = 3306                                # 端口
[interfaces]                              # 接口地址
register: /member/register                # 注册接口对应地址
login: /member/login                      # 登录接口对应地址
withdraw: /member/withdraw
recharge: /member/recharge
add: /loan/add
audit: /loan/audit
invest: /member/invest
[run]                                      # 运行时参数
debug=true                                # 开启调试模式
logfile=a.log                              # 日志文件
marks=success,login                        # 筛选标记
thread_num=10                              # 启动线程数量
retry=3                                    # 失败重跑次数
report=result.json                        # 报告文件
project
project 段,支持 name 和 host
name 项目名称

host 项目接口根地址,注意不要以 / 结尾


db_config
db_config 段,数据库配置,目前仅支持 MySQL
host 数据库主机

user 数据库用户名

password 数据密码

db 数据库名

port 端口

charset 字符串编码


interfaces
interfaces 段,接口名称配置,格式:key=value,key 是接口名称字符串,value 是去掉主机后的接口地址以 / 开头,在用例中 url 字段可以填写 key,easytest 内部会使用项目 host+ 接口地址进行拼接。

run
run 字段,运行时的参数。
debug 调试模式,默认为 false

logfile 生成日志文件,可以是绝对路径或者是相对路径

marks 需要筛选的标记,多个标记使用逗号隔开,例如:success,login,表示会筛选被标记了 success 和 login 的用例。

thread_num 启动线程的数量,默认为 0 表示单线程执行

retry 用例失败后重跑的次数,默认为 0 表示不重跑

report 生成报告的文件名,根据后缀自动生成对应报告,暂只支持 JSON 格式。

注意:命令行参数会覆盖项目配置。


生成模拟测试数据
在测试过程中有时需要动态的生成测试数据,例如手机号码,人名等。easytest 通过 Faker 模块来生产模拟数据,暂时只支持简体中文语言下的接口,详情见 Faker 简体中文 providers。
用例中支持生产模拟测试数据的字段有,url,request,db_assertion。
使用格式为 $生成数据接口名$。
例如在 Faker 中生成手机号码的方法名为 phone_number,那么在用例中使用 $phone_number$ 表示动态生成手机号码。

test:                                 # 表名这是单个测试用例
  title: 一个简单的测试                  # 用例名称
  url: http://httpbin.org/get         # url
  method: get                         # 请求方法
  request:                            # 请求参数字段
    headers:                          # 请求头
      CustomerHeader: lemonban        # 头信息
    params:                           # url参数
      search: lemonban                # url参数键值对
      phone: $phone_number$

上面这个用例表示 url 参数 phone 是一个动态生成的手机号码。

接口依赖的处理

easytest 中,同一个测试套件下,前一个用例返回的数据可以通过变量传递给下一个用例。

例如登录成功后将返回的 token 值传递给下一个需要 token 的用例。传递步骤如下:

  1. 在登录用例中添加 extract 字段提取响应回的 token 值,并绑定到你定义的变量名 admin_token 上

  2. 在后面的用例中,在需要使用到 token 的数据部分就可以使用 #admin_token#,来表示,easytest 会在自动进行替换

所有你需要做的,只是按照规则编写用例,剩下的交给 easytest。

命令行参数说明

  • file_or_dir

    字符串,项目路径,或者需要执行的用例文件

  • --debug

    开启日志调试模式

  • --logfile

    字符串,日志文件路径

  • --marks

字符串,运行时选择的标记
  • --thread_num

    整数,运行时启动线程的数量,默认为 0 表示单线程执行

  • --report

    字符串,测试报告文件路径,按照文件后缀生成对应的格式的报告

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s常用资源管理 控制

目录 Pod&#xff08;容器组&#xff09;&#xff1a;Pod是Kubernetes中最小的部署单元&#xff0c;可以包含一个或多个容器。Pod提供了一种逻辑上的封装&#xff0c;使得容器可以一起共享网络和存储资源 1、创建一个pod 2、pod管理 pod操作 目录 创建Pod会很慢 Pod&…

腾讯云轻量应用服务器搭建WordPress网站教程

腾讯云百科分享使用腾讯云轻量应用服务器搭建WordPress网站教程流程&#xff0c;WordPress 是全球最流行的开源的博客和内容管理网站的建站平台&#xff0c;具备使用简单、功能强大、灵活可扩展的特点&#xff0c;提供丰富的主题插件。腾讯云轻量应用服务器提供 WordPress 应用…

打破传统直播,最新数字化升级3DVR全景直播

导语&#xff1a; 近年来&#xff0c;随着科技的不断创新和发展&#xff0c;传媒领域也正经历着一场前所未有的变革。在这个数字化时代&#xff0c;直播已经不再仅仅是在屏幕上看到一些人的视频&#xff0c;而是将观众带入一个真实世界的全新体验。其中&#xff0c;3DVR全景直…

ARMday2

.text .global _start _start:mov r0,#0x1mov r1,#0x0sum:cmp r0,#0x64bhi stopaddls r1,r1,r0addls r0,r0,#0x1bls sumstop:b stop .end

Opencv将数据保存到xml、yaml / 从xml、yaml读取数据

Opencv将数据保存到xml、yaml / 从xml、yaml读取数据 Opencv提供了读写xml、yaml的类实现&#xff1a; 本文重点参考&#xff1a;https://blog.csdn.net/cd_yourheart/article/details/122705776?spm1001.2014.3001.5506&#xff0c;并将给出文件读写的具体使用实例。 1. 官…

STM32基于CubeIDE和HAL库 基础入门学习笔记:物联网项目开发流程和思路

文章目录&#xff1a; 第一部分&#xff1a;项目开始前的计划与准备 1.项目策划和开发规范 1.1 项目要求文档 1.2 技术实现文档 1.3 开发规范 2.创建项目工程与日志 第二部分&#xff1a;调通硬件电路与驱动程序 第三部分&#xff1a;编写最基础的应用程序 第四部分&…

我们常说这个pycharm里有陷阱,第三方库导入失败,看这里!

最近有小伙伴遇到了明明安装了 python 第三方库&#xff0c;但是在 pycharm 当中却导入不成功的问题。 ​ 一直以来&#xff0c;也有不少初学 python 的小伙伴&#xff0c;一不小心就跳进了虚拟环境和系统环境的【陷阱】中。 本文就基于此问题&#xff0c;来说说在 pycharm 当…

前端:Vue.js学习

前端:Vue.js学习 1. 第一个Vue程序2. Vue指令2.1 v-if、v-else-if、v-else2.2 v-for2.3 事件绑定 v-on:2.4 v-model 数据双向绑定2.5 v-bind 绑定属性 3. Vue组件4. Vue axios异步通信5. 计算属性6. 插槽 slots7. 自定义事件内容分发 1. 第一个Vue程序 首先把vue.js拷贝到本地…

【Linux进程篇】环境变量

【Linux进程篇】环境变量 目录 【Linux进程篇】环境变量基本概念常见环境变量查看环境变量方法测试PATH测试HOME测试SHELL和环境变量相关的命令环境变量的组织方式通过代码如何获取环境变量命令行参数命令行第三个参数通过第三方变量environ获取 本地变量通过系统调用获取或设置…

打造专属企业展示小程序

在当今的数字化时代&#xff0c;企业展示小程序已经成为了推广企业形象和吸引客户的重要工具。而如何打造一个专属的企业展示小程序呢&#xff1f;下面将带您一步步操作&#xff0c;通过乔拓云网来实现这一目标。 首先&#xff0c;您需要注册登录乔拓云网并进入操作后台。在乔拓…

(一)创建型设计模式:3、建造者模式(Builder Pattern)

目录 1、建造者模式含义 2、建造者模式的讲解 3、使用C实现建造者模式的实例 4、建造者模式的优缺点 5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…

vue自定义指令动态绑定

在企业微信侧边栏应用中&#xff0c;给dialog添加了拖拽功能&#xff0c;但是因为dialog高度超过了页面高度&#xff0c;所以高度100%时拖拽有个bug--自动贴到窗口顶部而且企业侧边栏宽高都有限制&#xff0c;拖拽效果并不理想&#xff0c;所以就想缩小dialog再进行拖拽。 拖拽…

【生成式AI】ProlificDreamer论文阅读

ProlificDreamer 论文阅读 Project指路&#xff1a;https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 论文简介&#xff1a;截止2023/8/10&#xff0c;text-to-3D的baseline SOTA&#xff0c;提出了VSD优化方法 前置芝士:text-to-3D任务简介 text-to-3D Problem text-to-3D…

uniapp+vue3项目中使用vant-weapp

创建项目 通过vue-cli命令行创建项目 Vue3/Vite版要求 node 版本^14.18.0 || >16.0.0 uni-app官网 (dcloud.net.cn) npx degit dcloudio/uni-preset-vue#vite my-vue3-project打开项目 点击顶部菜单栏终端/新建终端 执行安装依赖指令 yarn install 或 npm install 安装vant…

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…

windows常用shell命令大全

简介 基于鼠标操作的后果就是OS界面外观发生改变&#xff0c; 就得多花学习成本。更主要的是基于界面引导Path与命令行直达速度是难以比拟的。另外Geek很大一部分是键盘控&#xff0c;而非鼠标流的。 整理Windows的常用Shell命令&#xff0c;一方面帮助深入学习Mysql&#xf…

2023.08.13 学习周报

文章目录 摘要文献阅读1.题目2.要点3.问题4.解决方案5.本文贡献6.方法6.1 特征选择6.2 时间序列平稳性检测与数据分解6.3 基于GRU神经网络的PM2.5浓度预测 7.实验7.1 网络参数7.2 实验结果7.3 对比实验 8.讨论9.结论10.展望 PINNS模型1.自动微分2.全连接神经网络3.PINNs模型的P…

谈一谈在两个商业项目中使用MVI架构后的感悟

作者&#xff1a;leobertlan 前言 当时项目采用MVP分层设计&#xff0c;组员的代码风格差异也较大&#xff0c;代码中类职责赋予与封装风格各成一套&#xff0c;随着业务急速膨胀&#xff0c;代码越发混乱。试图用 MVI架构 单向流 形成 掣肘 带来一致风格。 但这种做法不够以…

【笔试题心得】关于KMP在笔试中的题型

好几家都考到KMP了 问的比较多的是 next数组 &#xff0c; 其实KMP的相关机制我在代码随想录算法训练营第九天|KMP算法_菜鸟的Zoom之旅的博客-CSDN博客中写道过&#xff0c;现在在复习一下&#xff0c;由于next数组的定义其实会有所歧义&#xff08;有些程序中会直接将前缀表作…

3.1 Qt样式选择器

本期内容 3.1 样式选择器 3.1.1 Universal Selector (通用选择器) 3.1.2 Type Selector (类型选择器) 3.1.3 Property Selector (属性选择器) 3.1.4 Class Selector (类选择器) 3.1.5 ID Selector (ID选择器) 3.1.6 Descendant Selector (后裔选择器) 3.1.7 Chil…