对于传统的实现接口自动化的方案往往是搭建自动化框架,通过excel编写用例来驱动执行,例如常见的万金油技术栈组合:excel(编写用例)、pytest(用例执行)、allure(测试报告)等。
很多公司往往是通过自动化框架而非测试平台来实现接口自动化,主要是自动化框架相对于测试平台的建设成本会低很多。 但对于自动化用例的维护、及编写用例的上手难度来讲同样会更难不少。可以看到,建设架构的成本和用例维护成本是一个成反比的关系。而且大多(中小型企业)公司也没有时间或愿意花较高的薪资聘请专门开发测试平台的人员。所以寻找开源的接口测试平台也成为了一个办法。测试平台有很多,但真正能让开展自动化变得高效的却很少。所以,我结合自己这数年间主导建设多个性能、功能、UI及接口测试平台的经验,以及跟行业大厂的交流学习开发了一款接口测试平台—Lim,妄图通过自己的理解来提供一种高效自动化的解决方案。
Lim是Less is More(少即是多)的缩写,如它的名字一样我们希望用户在开展接口测试时所需的操作更少,但建设效率更高、实现的功能更多。因此我们做了许多交互细节上的优化和创新以及一些大胆的设计,比如:取消了局部变量、前后置计划、抛弃“先接口后用例”的传统建设思想,甚至还取消了“登录”!
你是否会疑问:这群Diao毛去掉了这些还如何高效的开展接口测试?
那还在等什么?赶快进入Lim的世界,看看Lim是怎么通过另一种方式让接口测试变得简单且高效的吧!

参数类型自动识别、自动管理接口入库,接口参数快速回填以及多种编辑模式让应对各类复杂参数游刃有余:

用例输出的变量统一管理,来源可追溯;用例执行状态可控制:

能够配置多套环境参数,让一套用例能够在多套服务环境下执行:


用例变量生成、期望判断、执行条件设置等操作完全兼容python代码:

循环控制支持多层嵌套,循环次数支持变量以及支持代码形式break操作:

用例步骤支持延时等待、重试次数及执行条件设置。交换简单且更加灵活:

步骤支持合并、复制、拖拽改变排序,批量禁用等功能。一页俱全:

安全的操作无需登录,让非用例建设人员查看数据报表、报告情况更加快捷方便,减少多余的账号管理和登录操作:

所有弹窗皆可拖拽,展示内容更加自由可控:

制作中…
yarn&&yarn startinit-db.sql初始化数据库:pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple;LimApi/LimApi/settings.py文件的DATABASES数据库配置;python manage.py runserver 0.0.0.0:8001;python3 -m http.server 8003;注意:因为django默认启动为单线程模式,所以上述的部署方式无法进行并发操作(例:在用例执行的同时进行中断执行的操作)所以可以通过UWSGI来启动项目。对于Linux系统推荐gunicorn+gevent的方式部署,本项目中的requirements.txt已集成了这两个库,所以在linux服务器上将启动命令更换为:python3 -m gunicorn -w 5 -k gevent -t 120 -D LimApi.wsgi -b 0.0.0.0:8006 即可。
在未来的版本还会加入测试报告、Swagger导入、自定义函数以及执行实时监控等功能。还考虑接入目前大火的ChatGPT或一些其他智能的人工智能模型来做一些新奇的功能。
另外小伙伴们提出的问题和BUG也会尽量解决。让我们一起成长吧!
开源不易,全靠用爱发电,如果对你有帮助请给我们点个Star:
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
我不确定如何为我的搜索功能添加自动完成表单。"get"do%>nil%>我有一个具有自定义操作的Controllerdefquery@users=Search.user(params[:query])@article=Search.article(params[:query])end模型如下:defself.user(search)ifsearchUser.find(:all,:conditions=>['first_nameLIKE?',"%#{search}%"])elseUser.find(:all)endenddefself.article(search)ifsearchArt
我对自动测试的工作方式的印象(基于cucumbergithubwiki和其他在线内容)是它应该重新运行红色示例,直到它们通过。我的问题是它会重新运行规范文件中找到失败示例的所有示例,包括通过的示例。我不想浪费时间在修复失败示例的同时重新运行通过的示例。是否可以配置自动测试以便仅运行失败的示例? 最佳答案 您需要rspec-retrygem。以下是文档中有关如何实现它的一些示例:将它应用到覆盖整个测试套件的configureblock中...RSpec.configuredo|config|config.verbose_retry=t
代码:threads=[]Thread.abort_on_exception=truebegin#throwexceptionsinthreadssowecanseethemthreadseputs"EXCEPTION:#{e.inspect}"puts"MESSAGE:#{e.message}"end崩溃:.rvm/gems/ruby-2.1.3@req/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:478:inload_missing_constant':自动加载常量MyClass时检测到循环依赖稍加研究后,