开源测试工具 FunLine 数据工厂开源

底层贫困人员 · 2022年10月09日 · 最后由 底层贫困人员 回复于 2024年01月16日 · 11825 次阅读

pngpngpng

🎉 技术栈

  • [x] 🎨 FastApi(毛坯房中的毛坯房,异步 web 框架)
  • [x] 🎶 SQLAlchemy(你可以看到很多 sqlalchemy 同步的用法)
  • [x] 🏐 Gunicorn(内含 uvicorn,部署服务)
  • [x] 🎲 Nginx(反向代理)

🏅️ 特约赞助商

😁 pity 项目,快点我说明: 本项目一部分代码借鉴pity项目,当然 README 介绍文档也是😅希望无敌哥看到之后不会打我向 pity 项目 Respect😉)

⚽ 前端地址

😈 快点我

☕ 说明

这是一个内部落地大半年的数据工厂,作为子公司测试团队落地的第一个测试平台,且内部反馈较好~具备完整开发手册虽然手册讲得不是很好,但是我觉得可以从中学到测试平台的思路

废话少讲,快 D 过黎体验吧!靓仔靓女们~

为什么会有数据工厂的概念?这里引用柴佬的话语

为什么会有数据工厂的概念?大家可以类比一下数据仓库,本身不做产出,只做收集,你可以认为接口测试平台里面的场景链路就是数据工厂里面的一个卡片事务,但这是职责方向不同,数据工厂面向的是数据产出,只需要单个或者少量入参就封装好了大量的写事务,接口平台你需要手动录入,串联上下文 context,或者流量录制,总之你要自己去编写链路,数据工厂本身是一个调用方(理解什么是工厂),本质上它是做一个调度,管理,执行的地方。好比如果你要赋能其他业务线或者开发线,你去要开发新增一个优惠券去自测一下,开发说太麻烦了,链路很长,你这个时候封装一个事务卡片在工厂里,给开发自己去点击这个卡片,他肯定也会乐意,如果是接口自动化平台,难不成你丢给他这么大个平台,说你去找一下我这个场景链路(他压根不想看),所以,工厂的后续优化方向,肯定是怎么更好的去让其他业务线使用,不要看到底层链路细节,只管造数用来测试即可

在线体验 😎

🌙 已有功能

功能点 状态
脚本项目与平台服务解耦 🔥
在线展示测试脚本 🔥
美观的数据报表 🔥
http、rpc、get 调用 🔥
git webhooks 同步项目🤤

平台预览

🍦 数据报表

场景列表

运行日志

用户管理

项目管理

✉ 相关文档

介绍文档

使用文档

部署文档

😊 开发参考文章

开发文档 - 公众号

开发文档 - 掘金

开发文档 - 语雀

😢 关于 FunLine 数据工厂

FunLine 前身:公司以前的内部造数平台(fastapi)将造数脚本进行 api 化,然后用 fastapi 自带的 swagger 文档进行请求,没有 web 页面,不太方便,加上写造数脚本相当于写成了一个接口,对于不太熟悉 fastapi 的同学 debug 起来及其困难···

使用Python+FastApi+Vue开发,将平台与造数脚本进行解耦,采用 apidoc 生成脚本入参出参数据,生成 web 界面,动态导包作为核心执行方法~

FunLine 的宗旨:专注于测试脚本的测试工具,用于业务测试提效···

FunLine 命名缘由:fun 有趣的意思,line 流水线般造数据,结合起来就如某土康的流水线一样,想造什么就造什么 FunLine~

服务器部署

我们只需要在服务器上git clone,下载项目并以项目中的 dockerfile 文件构建镜像

  1. 新建 server 目录

    mkdir /server
    cd /server
    # 用来目录挂载
    mkdir logs
    # 用来目录挂载
    mkdir keys
    

    备注: keys 目录上传刚才本地创建的公钥和私钥,这里我用的是FinalShell软件进行上传,如果不需要 ssh 拉取 git 项目,可以忽略创建 keys 目录

  2. 在 server 目录 git clone 项目

    cd /server
    git clone https://github.com/JokerChat/FunDataFactory.git 
    git clone git clone https://github.com/JokerChat/FunDataFactory.git
    
  3. 分别执行构建镜像

    cd /server/FunDataFactory
    docker build -t fun:v1 .
    cd /server/FunDataFactoryWeb
    docker build -t fun_web:v1 .
    
  4. 创建并启动容器

    # 后端服务启动
    # 如果不需要ssh拉取git项目,可以忽略挂载keys目录
    docker run -itd -p 8080:8080 -v /server/logs:/fun/logs -v /server/keys:/fun/app/commons/settings/keys fun:v1
    #前端服务启动
    docker run -itd -p 80:80 fun_web:v1
    

    备注: 记得开放相关的端口,前端的.env.production目录记得更换对应的后端 api 端口

启动成功后,浏览器访问http://119.91.144.214119.91.144.214为服务器的 ip 地址

  1. Nginx 转发代理 (非必须)

如果已经申请了域名,可以给机器配上个域名,这样子就不用每次直接ip+端口访问,方便很多,如果没有申请域名,可忽略第 5 步···

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  fangfun.xyz;
        location / {
          proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   Host      $http_host;
            proxy_pass         http://0.0.0.0:81;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {  
            listen 80;
            server_name api.fangfun.xyz;
            location / {
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   Host      $http_host;
                proxy_pass         http://0.0.0.0:8080;
    }
}
}

这里的fangfun.xyz直接映射到了本地的81端口即为前端服务,
api.fangfun.xyz为二级域名,直接映射到了本地的8080端口即为后端服务

备注:前端镜像启动时,映射宿主机的端口为81

# 前端服务启动
docker run -itd -p 81:80 fun_web:v1
  1. 配置 rancher 流水线 (非必须)

可自己搭建个 rancher 玩玩,配合 rancher 流水线进行自动化部署项目···有兴趣的小伙伴可找我交流交流,互相学习一波

📞 作者介绍

大家好,我是笋货,一个乐于分享、热爱生活,喜欢捣鼓各类测试工具的点点点工程师,目前就职于广州某传统行业公司。

一个爱玩、爱学习、各类运动样样都 ‘精通’ 的韭 5 后。

个人技术公众号: 笋货测试笔记,欢迎大家关注我,掌握最新测试知识。

❤️ 平台初心

因为自己本身就是一名业务测试,深感业务测试的痛点···一直思考🤔如何进行测试提效?接口自动化?接口测试平台?jmeter 脚本?数据工厂?我选择了后者,后来公司内部也落地了,证明当初的想法是对的···为什么要开源呢?因为自己乐于分享,乐于交流,乐于学习,在开源的同时,相当于把之前的东西重新写了一遍,温故而知新!!!首先,在这里最感谢的一个人就是无敌哥!!!数据工厂的一些思路都是他给我指路,亿分感谢!另一个人当然就是溜达哥啦,fastapi 有什么不懂的,我都请教他,每次溜达哥都能提供出解决思路,万分感谢!最后要感谢的是 leader-小凤姐,提供舞台让我show time感谢一路陪我走过来的各位,衷心感谢!!!

人啊,总得不断学习,不断进步,路漫漫其修远兮···

我相信 FunLine 可以给你们带来测试效率上的提升!!!项目里面的代码虽谈不上优雅,但可以给你学习fastapi带来一定的借鉴作用。

💪 落地效果

数据工厂在公司内部已经落地了大半年,稳定运行,平台上的测试脚本提供于开发、产品、测试使用,大大提高测试效率···

😊 已有功能

  • [x] 🔥 git webhook 同步项目
  • [x] 🀄 在线展示测试脚本
  • [x] 🚴 丰富的调用方式(http、rpc、get 调用)
  • [x] 💎 美观的数据报表

🙋 待开发的功能

  • [ ] 🤡 在线包管理

  • [ ] 🐭 结合接口自动化执行脚本

  • [ ] 🌽 等等等等

赞助

如果您觉得这个项目对你有所帮助,可以请我吃包魔法士哦~或者帮忙点个 star,让我创作更有动力!!!谢谢大家啦!

🏅️ 官方合作赞助商(排名不分先后)

  • 无敌哥
  • 老虎哥
  • 晴天
  • 迷龙
  • 大月亮的小伙伴

🎨 微信交流群

这里我建了一个微信交流群,有兴趣的小伙伴们可以加我个人微信: JIE664616581,我拉你到群聊或者扫码进群学习交流~

最佳回复

为什么会有数据工厂的概念?大家可以类比一下数据仓库,本身不做产出,只做收集,你可以认为接口测试平台里面的场景链路就是数据工厂里面的一个卡片事务,但这是职责方向不同,数据工厂面向的是数据产出,只需要单个或者少量入参就封装好了大量的写事务,接口平台你需要手动录入,串联上下文 context,或者流量录制,总之你要自己去编写链路,数据工厂本身是一个调用方(理解什么是工厂),本质上它是做一个调度,管理,执行的地方。好比如果你要赋能其他业务线或者开发线,你去要开发新增一个优惠券去自测一下,开发说太麻烦了,链路很长,你这个时候封装一个事务卡片在工厂里,给开发自己去点击这个卡片,他肯定也会乐意,如果是接口自动化平台,难不成你丢给他这么大个平台,说你去找一下我这个场景链路(他压根不想看),所以,工厂的后续优化方向,肯定是怎么更好的去让其他业务线使用,不要看到底层链路细节,只管造数用来测试即可

共收到 52 条回复 时间 点赞

打破零回复,自顶🆙😍

看了半天,才发现是个接口测试平台。。。和数据工厂没有半毛钱关系

CKL的思考 回复

大佬,你再认真看一下。。。

后续增加点示例,便于大家更好的认识数据工厂是什么。这块东西太少了,很多人都没见过😂

一开始看下来,也是这么认为的。

为什么会有数据工厂的概念?大家可以类比一下数据仓库,本身不做产出,只做收集,你可以认为接口测试平台里面的场景链路就是数据工厂里面的一个卡片事务,但这是职责方向不同,数据工厂面向的是数据产出,只需要单个或者少量入参就封装好了大量的写事务,接口平台你需要手动录入,串联上下文 context,或者流量录制,总之你要自己去编写链路,数据工厂本身是一个调用方(理解什么是工厂),本质上它是做一个调度,管理,执行的地方。好比如果你要赋能其他业务线或者开发线,你去要开发新增一个优惠券去自测一下,开发说太麻烦了,链路很长,你这个时候封装一个事务卡片在工厂里,给开发自己去点击这个卡片,他肯定也会乐意,如果是接口自动化平台,难不成你丢给他这么大个平台,说你去找一下我这个场景链路(他压根不想看),所以,工厂的后续优化方向,肯定是怎么更好的去让其他业务线使用,不要看到底层链路细节,只管造数用来测试即可

迷龙 回复

已经补充了介绍文档,欢迎继续交流学习
https://www.yuque.com/joker-bo9zn/hp2cg3/aaxdlk

笋货大佬 NB~不过我有种预感,就是数据工厂做着做着就从平台化又抽象回了接口化,业务多了之后,界面维护起来也是麻烦事

能开源就值得支持👍

是怎么适配各种各样的业务的?

我去催饭 回复

界面不用维护,各业务线只需要写好代码,维护好脚本(方法)的注释(注释包括方法的基本信息、方法名、入参、出参),平台拉取脚本项目,执行 apidoc 命令,生成 apidoc 接口文档,通过解析接口文档的 json 数据,在平台展示脚本信息,平台负责执行脚本(方法)

恒温 回复

各业务线只需要写好代码,维护好脚本(方法)的注释(注释包括方法的基本信息、方法名、入参、出参),平台拉取脚本项目,执行 apidoc 命令,生成 apidoc 接口文档,通过解析接口文档的 json 数据,在平台展示脚本信息,平台负责执行脚本(方法)

古一 回复

感谢~

这个还是做了自己的东西的,能热更新,能解析的数据也很完整,已经比大部分的要强了👍

赶紧写一篇介绍下,这个厉害

October 回复

谢谢~

方总哥哥好腻害,正是我这种资深点工所需要的平台,我也会好好学习,争取抄一波

非常可以

好贴,学习一波😋

又有的抄了💡

值得学习👍 👍

兔子 回复

谢谢兔总👍

大君 回复

大家互相交流学习,thanks👍

已经提交了开源项目,感谢大家 thanks😍
https://testerhome.com/opensource_projects/216

那涉及到流程中需要附件上传的怎么解决?

比如我们的业务,造不同状态的账号,在申请账号时候需要上传不同的凭证(图片)还需要 web 端的审核,单单造个账号的流程就异常的冗长,不造这个造数平台能否实现?

有相关的例子么,想学习一下

感谢楼主这么好的项目

干饭狂人 回复

A 状态用 xx 凭证,B 状态用 xx 凭证,凭证这些数据可以维护成 oss 或者直接维护在脚本项目里,需要哪些状态的账号,就从取哪个状态的凭证

根据你的描述,大致推出你的测试脚本入参,组装实际提交表单参数进行提交,接着进行审核通过
type 为必填,ossfile 非必填,支持从外部传入

{
    "type":"A",
    "ossfile": ["a","b"]
}

干货学起来😃

向大佬学习,加油鸭🦆

针对造数我的方案是利用现有的接口自动化平台已经写好的业务流程来实现,要做的只是设定下入参和出参数,给定个页面进行驱动(因为只有入参和出参,所以这个页面其实可以动态生成,多少个入参根据参数类型动态生成就行,出参么就转化为 json 给一个输出就行),这样可以达到一定程度的自动化脚本复用,也可以达到热更新,让用户在熟悉环境下调试了。

萌梓萌爸 回复

这个可以的,维护好入参即可,各个公司业务不一样,我这边业务链路比较长,所以还是比较适合用数据工厂

底层贫困人员 造数 - 我的理解与落地实践 中提及了此贴 01月03日 14:17

FunLine 的核心是将之前写好的造数脚本进行卡片化?

冯先生 回复

差不多

你这学习成本太高了,我们要做得就是给用户傻瓜式得操作。看看我得成果,没有刷数据

冯先生 回复

看了半天不知道是怎么干的. 大哥一句话,了然

不管白猫黑猫,抓住老鼠就是好猫😂

看下来有两点感受和疑问
首先,跟前面的评论比较类似,感觉数据工厂这个名字不太合适,数据工厂产生的是不是应该是数据呢?当然,通过接口调用是可以产生一些数据的,那它跟接口测试平台的区别是什么呢
然后,“各业务线只需要写好代码,维护好脚本(方法)的注释”,这块工作由谁来负责呢?另外怎么能保证这些脚本与开发代码的同步呢?

summer2014i 回复

第一个问题,数据工厂本身定位就是只管造数用来业务测试,没接口测试平台那么高大上,当然你也可以说接口测试平台也可以做到呀,但你丢给他这么大个平台,开发会真的执行一下这个测试用例进行造数么?还不如直接点一下卡片来得舒服。
第二个问题,这块工作肯定是业务测试人员维护的啦,我们这边有类似的 KPI 要求。
第三个问题,本质上造数脚本大多都是调接口实现造数,不太可能自己写一套入库逻辑进行实现,自己另外写一套入库逻辑,很容易有脏数据

不是,我问的保证与开发代码的同步,指的是这个步骤的操作,” 维护好脚本(方法)的注释(注释包括方法的基本信息、方法名、入参、出参)“

summer2014i 回复

额。那就定时维护就好了, 脚本都是需要时间维护。。。

基本上就是接口平台,我是一个开发角度来看的

开普敦人 回复

还是跟接口平台区别很大,数据工厂核心是 py 脚本,接口平台核心是接口用例

可能是我个人没太多这种需造大数据的经历,所以看不太懂这个数据工厂,好像是需要单独逐个调接口来造数据,使用者还是需要对实际业务流程很熟悉,我觉得造数据的难点可能有以下几个方面:
1.不是很了解业务链路,不知道测试一个功能需要造哪些数据 -- 需要耗费一定学习时间;
2.造数据的人可能只会些简单的,线性的 sql,自己写不出,复用性好,便维护的 sql 语句或者 py;
3.性能测试时,批量数据的制造较麻烦;

fbtdjh 回复

主要是看公司的业务吧,我这边的大多都是长流程,涉及好几条业务线,用户订单过来,经过了 OMS、调度系统、WMS、TMS、FNC 等等。。。所以数据工厂还是很必要的= =

可以分享下你的思路吗?

请问下添加的项目是要测试的开发人员的 gitlab 的项目吗?然后把开发人员的项目解析?

王巍 回复

测试人员的

这个录入项目 git 我还以为是把待测试的项目拉入,然后通过开发的注释用 apidoc 生成接口文档。结果原来拉入的 git 项目是测试自己写的接口请求脚本项目,接口注释也是要自己写,这个注释写起来挺费时间的吧?得一直维护着。其他的就真的很类似一个对接口类型进行归类的接口自动化平台了

体验了下 apidoc,感觉真的挺麻烦的,复杂的接口得写一堆注释吧

测试新人 回复
  1. 注释写起来不算麻烦吧,反正都是可以 cv,看了团队其他人写的,参数最多也就 4 个
  2. 至于维护,就算接口自动化平台分离出来的造数脚本,也要一直维护,少不了这事
  3. 如果不想写注释的话,其实可以新加个功能,在页面自定义新增,那种我觉得更加复杂,譬如这下面的(图源另一小组开发的数据工厂) 以上个人见解~
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册