自动化工具 《随便测测》接口测试平台 开源详细文档 - 主要功能展示

MyJie · 2023年07月07日 · 最后由 tester 回复于 2023年07月12日 · 9206 次阅读

V2.1 版本更新:

  • 1.新增了统计功能:用例关系、用例数量
  • 2.优化了些样试问题
  • 3.增加了成功失败的统计
  • 4.修复了一些 bug

后续计划:
1.用例运行数据的实时日志查看
2.用例运行时的暂停功能(?)
3.单接口不执行不校验的配置项(?)

背景

  • 为什么写?只是简单的因为生气而已,“为什么这么难用”,这样子
  • 什么主旨?以前是 “对比传统测试平台,编写效率提高 90%”,这两天换了个口号:自动化用例如何快速成型,呐,就是这个!
  • 阅读准备 就是一种叙事的风格,提前做好思想准备就好

开源地址

后端

前端

有个演示地址,但是朋友的服务器,不便公开

下面开始正题

如何快速的做接口测试

如何快速的做接口测试

没错,这里对接口数据的主要来源,就是录制。使用 charles 录制接口顺序,导出 har 文件,导入平台解析录入即可

  • charles 导出 har 文件
    charles 工具可以配置好过滤
    平台也有一部分过滤机制,过滤掉 css/js/image 等

  • 导入到平台
    导入平台后,这里定义的就是” 场景模板 “,可以关联多个用例

  • 场面模板详情
    查看模板详情,保存的都是 har 中的原始数据,包括 headers、response 等所有接口相关的内容
    这里可操作的是对原始接口数据的编辑、新增、删除。
    新增删除接口,会强制同步到关联的用例上,自动更新参数提取 number(后面说

  • 转化为用例
    转化时,可以选择新增,或者覆盖,也可以选择下载为 josn 文件,手动编辑后再上传
    这里选择 “新增”。新增完成后,切换到【API 用例列表】

  • 提取数据进行替换
    接口详情以横向排版,全部展示。
    单个接口单独的配置项
    (请一定要接受这个设定呀,sama~

  • 如何确定哪些数据需要替换呢
    从 url、params、data 中查找,这个是只能人为去判断的(目前没有 headers,扩展一下就好了)

    从 URL 中

从 Params、 Data 中

  • 替换数据操作 点击【提取数据进行替换】,输入需要被替换的数据,点击【查询】 默认会选中第一个匹配上的数据,同样也建议选择第一个匹配上的数据 原因:第一次出现的数据最稳定

再次点击【使用 [ xxx] -> [xxxx] 从测试数据的 url.params.data 预览查询】按钮
系统会自动去 url.params.data 查找和这个 value 相等的数据,并返回它的 jsonpath
如果 tab 只显示了 url,说明它只在 url 中匹配到了。如果三者都显示了,说都匹配到了

此时,我们只需要点击列表后面的操作按钮进行替换即可

关闭窗口,刷新列表即可看到被替换的数据

依次对所有需要替换的数据进行操作,即可完成接口上下级数据关联
不知道阅读的你能否感受到,这里上下级数据关联与参数替换的快准狠。如果没有,只能罚你再看一次啦

  • 断言 - 冒烟
    支持对统一响应进行配置,再转化为用例时自动判断并添加到 check 中


    所以,在你完成了参数替换前,这一份冒烟级别的断言已经自动完成了

  • 断言 - 详细
    根据测试需求,自行添加需要断言的内容即可

  • 测试报告
    allure 报告,按用例 id 区分各趋势图,运行序号为趋势图顺序
    接口请求中,所有的信息都会展示在报告中,以便查找问题

接口测试就演示到这里

里面还有很多未演示到的内容:接口描述、parmas.data.heraders 编辑、用例名称编辑等常规操作。
接口用例的下载编辑再上传,单个测试流程的数据集关联与使用
以及单个接口的配置:主动结束、失败停止、轮询时间 (规定时间范围内所有断言成功即退出轮询结果为成功,反之失败)等等。。。

如何快速的做页面测试

1.使用 playwright+[selenoid] 可选的远程浏览器
2.没有采用 PageObjectModule(页面对象模式),如果想看这个的就会失望,因为根本没有

  • 使用 playwright 录制 ui 操作
    录制完成后关闭浏览器,会自动保存到当前文件夹下

  • 创建 UI 模板
    按提示将内容复制到页面编辑器中,暂时不用修改内容,提交保存

  • 运行用例

  • 查看报告
    因为并没有在脚本中设置流程等,所以看不出效果

  • 再次编辑代码

  • 再次查看报告

页面测试就演示到这里

同样还有些功能没演示到:数据集、参数提取
本质上,这就是创建一个临时的 py 文件去执行,你甚至可以打印一句 helloworld 而不做任何事

关于 selenoid 服务的搭建

网上关于 selenoid 的搭建教程有很多,这里就不说了

  • 拉取至少 4 个镜像
    docker pull aerokube/selenoid 远程执行器
    docker pull aerokube/selenoid-ui:1.10.4 web 访问远程浏览器
    docker pull selenoid/video-recorder :latest-release 视频录制镜像
    可多个:不同版本,不同镜像
    docker pull selenoid/vnc:chrome_104.0 浏览器镜像

  • 平台配置 selenoid 服务地址

    配置好后,就能使用了

总结与问答

问:为什么接口测试要靠录入?
答:一切皆为了用例的快速成型。在想 “如何提高测试用例的覆盖度” 时,我先想的 “如何快速的写好一份自动化用例”,测试的覆盖度不是靠任何平台,而是靠最最基础的用例设计,与工具、平台没有一点关系。作为工具、平台,我考虑的就是如何写的爽,写的舒服,不被使用的复杂度而望而生畏。测试平台使用对象就是测试人员,测试人员用得爽了,自动化用例就多了,覆盖度自然就上去了。让编写自动化用例,赶得上测试用例设计 这样子

问:为什么页面测试也靠录入?
答:也是为了快速成型

问:为什么页面测试不采用 POM
答:简单的回答:在这里不需要;认真的回答:页面测试用例应该注重什么?业务流程吗,还是页面交互(这是一个大佬问我的问题)所以我觉得,页面测试的重点就是页面交互,业务流程交给接口测试更靠谱。并且页面测试的开发和维护成本非常高,这大家都认同。使用随便测测做页面测试时:当我们的某个页面用例覆盖的交互发生了变化,如果变化少:就少许的修改文本再保存;如果变化大:直接删除掉这个文本,重新录制一个再保存 就好了

共收到 11 条回复 时间 点赞

这个平台做接口测试的核心机制

以一个测试场景来说:为每一个 api 生成一个 number
我们都知道,业务接口用例一般都是按顺序执行的(至少在运行用例时,它是有顺序的)
那么接口上下级数据的关联与替换,就全由接口的 number 去关联:无需去思考参数的提取与变量的命名、参数的引用
这里完全没有

*表达式:{{14.$.result.roles.0.id}} *
在上面这个表达式中,14 就是指:去第 14 个接口取值,怎么取?$ 后的 jsonpath 表达式
这个表达式就是自动生成的,无需抠破脑袋的去找

我的服务器压力测试工具就是这个原理,用例生成快,不过我的接口前置和响应逻辑都是编写代码来处理,代码很少,处理很灵活

回复

我这个是倾向于长业务流程测试,比如一个业务场景 100 个接口,就能很快速的输出一条可用的自动化用例

MyJie 回复

我这个是针对游戏服务器的,针对 tcp、udp、kcp、ssl 长连接,http、websocket、自定义 rpc 均可以。不过我真做服务器性能测试,你做接口自动化,用途不一样,设计细节上有很大差别,核心原理倒是一致。

回复

嗯呐,这个核心机制,解决了绝大部分编写用例的烦劳
在这个基础上,我再去做接口参数变更、接口顺序变化、等功能,去辅助完善录制来的用例的缺点

设计很不错,有的业务中这样确实可以提升效率,但接口长链路测试往往很复杂。举个最容易出现的例子,有些接口用上一个接口的返回数据并不是简单的填到字段里,还需要进行一些数据处理,如加密,转换,拼接等。最后还是需要用变量去提取和替换或者写前后置脚本来完成,而在实际业务中,这种情况往往很常见。

Chras 回复

谢谢提醒和建议
数据处理,后置脚本等的加入雀食可以思考下怎么融入进去
但参数提取和替换的机制并不会去改变
可以说没有这个机制就没有这个平台
我宁愿让程序的复杂度提高,也不想让自己写用例的操作复杂
_^ 这是我必需坚持的初衷

手动点赞

想请问下大佬,allure 报告中的 history 有解决方案吗

MyJie #10 · 2023年07月11日 Author
tester 回复

有解决方案,非原创
在项目目录中 run_pytest.py 文件,就是专门运行和处理 allure 报告的,包括 history

MyJie 回复

好的,多谢

MyJie 《随便测测》V2.3 全局配置与环境组合 中提及了此贴 07月29日 22:04
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册