超好用的接口自动化框架,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         # urlmethod: 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、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://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         # urlmethod: 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/postmethod: poststatus_code: 200res_type: jsonrequest:json:username: xinlanpassword: 123456assertion:- [eq,$..username,xinlan]- [eq,$..password,123456]- title: 一个不简单的测试url: http://httpbin.org/postmethod: poststatus_code: 200res_type: jsonrequest:json:username: xinlanpassword: 123456assertion:- [ 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: xinlanpassword: 123456
    • JSON

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

      request:json:username: xinlanpassword: 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         # urlmethod: 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

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

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

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

相关文章

postgresql|数据库|centos7下基于postgresql-12的主从复制的pgpool-4.4的部署和使用

前言&#xff1a; postgresql数据库只用自身的一些配置是无法做到最优的优化的&#xff0c;需要通过一些外置插件&#xff08;中间件&#xff09;来提高服务器的整体性能&#xff0c;通俗的说就是数据库仅仅依靠自身是无法达到性能最优的&#xff0c;很多时候需要更改数据库的…

Java内存模型介绍

文章目录 Java内存模型前言Java内存模型基本介绍指令重排相关概念主存和本地内存相关介绍JMM中的8种同步规则和8种同步操作happens-before 原则内存屏障总结 Java内存模型 前言 本文主要介绍一下JMM中的一些常见概念&#xff0c;通过本文让你能够快速的对JMM有一个大致的了解 …

【Java】基于物联网技术的智慧工地源码(项目端、监管端、APP端、智慧大屏)

智慧工地是将云计算、大数据、物联网、移动技术和智能设备等信息化技术手段&#xff0c;聚集在建筑工地施工管理现场&#xff0c;围绕人员、机械、物料、环境等关键要素&#xff0c;建立智能信息采集、高效协同管理、数据科学分析、过程智慧预测&#xff0c;最终实现建筑工地的…

2023/9/20 -- C++/QT

时钟: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QDateTime> #include <QLabel> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespac…

CSS复习之选择器

目录 一、常用选择器 1.1元素选择器 1.2id选择器 1.3class选择器 二、复合选择器 2.1交集选择器 2.2并集选择器 三、关系选择器 3.1子元素选择器 3.2后代选择器 3.3兄弟选择器 四、属性选择器 五、伪类选择器 六、伪元素的选择器 七、超链接的伪类 一、常用选择器…

【ArcGIS】土地利用变化分析详解(矢量篇)

土地利用变化分析详解-矢量篇 土地利用类型分类1 统计不同土地利用类型的面积/占比1.1 操作步骤Step1&#xff1a;Step2&#xff1a;计算面积Step3&#xff1a;计算占比 2 统计不同区域各类土地利用类型的面积2.1 操作步骤 3 土地利用变化转移矩阵3.1 研究思路3.2 操作步骤 4 分…

【卖出备兑看涨期权策略(Covered_call)】

卖出备兑看涨期权策略&#xff08;Covered_call&#xff09; 卖出备兑看涨期权策略是一种最基本的收入策略&#xff0c;该策略主要操作就是在持有标的资产的同时卖出对应的看涨期权合约&#xff0c;以此来作为从持有的标的资产中获取租金的一种方法。如果标的资产的价格上涨到…

UE5 虚幻引擎 如何使用构造脚本(Construction Script)? 构造脚本的奥秘!

目录 1 构造脚本&#xff08;Construction Script&#xff09;1.1 介绍1.2 案例1&#xff1a;利用样条组件程序化生成树木1.2 案例2&#xff1a;利用样条组件和样条网格体组件程序化生成道路 1 构造脚本&#xff08;Construction Script&#xff09; 1.1 介绍 问题&#xff1a…

web:[ACTF2020 新生赛]Include

前提知识 文件包含漏洞 php伪协议 题目 点开题目&#xff0c;页面只显示一个tips&#xff0c;点进去看看 点进去之后 没有别的提示&#xff0c;先看源代码&#xff0c;恩&#xff0c;什么都没有 再看一下点进tips显示的页面&#xff0c;发现url中 flag可能就藏在这个页面中&…

漫谈:C语言 C++ 左值、右值、类型转换

编程不是自然语言&#xff0c;编程自有其内在逻辑。 左值引起的BUG 编译器经常给出类似这样的BUG提示&#xff1a; “表达式必须是可修改的左值” “非常量引用的初始值必须是左值” 看一下示例&#xff1a; #include <iostream>void f(int& x) {} int main() {sho…

LLM各层参数详细分析(以LLaMA为例)

网上大多分析LLM参数的文章都比较粗粒度&#xff0c;对于LLM的精确部署不太友好&#xff0c;在这里记录一下分析LLM参数的过程。 首先看QKV。先上transformer原文 也就是说&#xff0c;当h&#xff08;heads&#xff09; 1时&#xff0c;在默认情况下&#xff0c; W i Q W_i^…

实在智能携手40+央企,探索财务大模型及数智化实践与应用

“这次培训给我一个最大的感触就是&#xff0c;过去以为AI智能化、大模型技术是很高深的事情。但现在&#xff0c;我们通过RPA等数字化工具&#xff0c;自主根据自己的工作岗位&#xff0c;完成业务自动化流程的开发和设计。AI技术没有想象中的那么难入门。” 这是一位参加了“…

持续集成Jenkins安装部署

Jenkins是一个在DevOps领域中、支持CI/CD&#xff08;持续集成/持续交付&#xff09;过程域的开源项目&#xff0c;其提供可扩展插件的支持&#xff0c;以自动化的机制对项目工程执行打包、编译、构建、测试以及最终发布到目的地服务器并成功部署运行&#xff0c;本文主要描述J…

如何在批发零售业运用IPD?

批发零售业指购进商品后&#xff0c;再向其他批发或零售单位&#xff08;含个体经营者&#xff09;及其他企事业单位、机关团体等批量销售生活用品、生产资料的活动&#xff0c;以及从事进出口贸易和贸易经纪与代理的活动&#xff0c;包括拥有货物所有权&#xff0c;并以本单位…

左神高级提升班2 约瑟夫环结构

目录 【案例1】 【题目描述】 【输入描述&#xff1a;】 【输出描述&#xff1a;】 【输入】 【输出】 【思路解析】 【代码实现】 【案例1】 【题目描述】 某公司招聘&#xff0c;有n个人入围&#xff0c;HR在黑板上依次写下m个正整数A1、A2、……、Am&#xff0c;然后…

如何在JoySSL上申请免费的SSL证书

1&#xff0c;前往 JoySSL 的官方网站注册页面&#xff0c;创建一个账号并登录您的 JoySSL 账户。 扫码注册账号申请免费证书https://www.joyssl.com/certificate/select/free.html?nid52&#xff0c;找到并选择你需要的 SSL 证书相关的功能或选项。 3&#xff0c;提供您的域…

springboot实现发送邮箱验证码

准备工作 在邮箱官网开放SMTP授权&#xff0c;获取相应密钥&#xff0c;才可以进行发送邮件 这里以网易163邮箱为例&#xff0c;登录邮箱后&#xff0c;依次点击“设置-POP3/SMTP/IMAP” &#xff0c;然后开启SMTP服务。这时候会提示一个授权码&#xff0c;例如&#xff1a;H…

全流程ARCGIS Pro技术应用教程

详情点击公众号链接&#xff1a;全流程ARCGIS Pro技术应用教程 前沿 GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关…

【Ambari】银河麒麟V10 ARM64架构_安装Ambari2.7.6HDP3.3.1(HiDataPlus)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

Matlab中(:,1)和(:,end)和[~, A]的含义与用法

背景 阅读Moses Chong-ook Nah的DMP-MATLAB程序记录。 github链接&#xff1a;https://github.com/mosesnah-shared/DMP-MATLAB 如果不知道某个函数或变量的作用&#xff0c;直接打印出来&#xff0c;看看输出是什么。不知道matlab如何打印&#xff1f;程序后面的分号;去掉就…