很抱歉,接口测试平台因为接到大量粉丝要求想听并发执行用例的功能,所以插播了本章节,所以之前准备开的导入导出接口功能延后了哈
其实刚开始听到有粉丝想听这个功能时我很诧异,因为这并不算什么复杂的功能,而且我应该讲过呀,很多平台内我都使用了并发功能呀.... 但是我回过头一想,不对.... 目前用到并发功能的平台 我还没来得及更新到公众号....只是在我培训课程中存在。
所以我赶紧打开接口测试平台,准备给弄进去....
首先就是这个并发功能用在哪的问题。
目前,接口测试平台有自己的用例库,其中可以生成多个大用例,每条用例都是完全分割开的,并且每条大用例内部都含有若干接口,也就是小步骤。
这些小步骤是有上下文关联的,必须按照顺序执行,所以步骤之间不存在并发的问题。那么并发功能就只能放在多个大用例之间了。
这里我们先想一个问题,就是很多同学总说自己看了多少书,多少博客,然后学了多少知识点,但是一遇到现实问题,就不知道如何下手了。其实,这也是我常说的:知识会背和会用,是存在一个鸿沟的。
更文明点来说就是:这些零散的知识点,你没有串起来成一根线,以至于遇到问题,不知道该用哪个技术来解决,也不知道能不能解决,信心也没有,而是第一时间盲目的去搜,去问。
所以我的文章为什么很多人喜欢读,为什么我的培训每期都爆满,就是因为,我讲的知识并不复杂,而更注重如何使用这些浅显的知识来解决实际问题。
好,言归正传,经过我们上面的思路,我们知道了这个并发功能应该用于多个大用例之间。
那么继续跟随我的思路走:
这个并发功能底层用什么技术? 我想了想,用python的多线程比较好,也就是thread。
那么怎么具体实现呢?更简单,并发的去请求本来就应该触发单独运行用例的那个url或者函数即可。
那么多线程要怎么去调用执行用例的url呢?很简单,request请求即可。
好,基于这个简单的思路,我们应该就可以实现这个功能了。这里扩展一下,如果是调用一些其他脚本,或者其他语言的脚本,最好用多线程调多进程驱动shell的方式,安全可靠,报错了也方便调试~不过本平台目前用不到这个设计,在我培训一期的ui自动化平台中,所有的脚本都是可拆卸组装的各种语言脚本,所以会用到这个设计。
好,我们现在开始准备基础材料吧:
首先是执行用例的url:
好,在这个url中,我们并没有看到变量参数,也就是没看到运行大用例的具体用例id,不过!这是因为django的写法如此,实际上,这是一个get请求,而参数,是真实的在url中的,不信我们打开浏览器f12看看:
也就是说,我们只需要get请求拼接一下这个url,即可,然后并发函数来请求它。
那么这个具体的用例id,怎么获取呢?因为你点了并发,所以要执行当前项目用例库下所有用例,那么我直接从数据中拿出来这些用例的id即可。整个过程应该毫无难度就实现了。
但是现在还要思考一个问题,就是执行结果展示。既然要并发执行了,那么结果展示肯定是需要集成到一起的。不可能我一键全部执行后,要手动一个用例一个用例的点开报告看吧?
所以这里涉及到了一个隐藏需求,就是报告结果整合!
先看下我们当前的报告是什么东西?
这老人一眼就看出来了,这是httptestrunner的报告魔改的对吧?
那么这个报告有个特点,就是它并非存在于数据库中,而是实打实的一个html文档。
那么这就给我们合并报告提高了难度,如果是数据库中,那好办了。但是现在这样已经生成了html文档。那我们怎么合并呢?
也简单,直接按名字提取里面的关键信息:成功用例数,失败数,总数 即可。
那么怎么提取呢?因为这种报告一定是遵从一个初始文档的,所以它的html源码绝对是有规律可循的,也就是说,我可以用正则提取。
正则提取这种数据,就是玩~
提取出的数据,我们可以简单的相加或者放在一起展示。
最终结果数据就有了,那么问题又来了,要怎么显示在前端呢?
这...似乎又是一个难题。
这里我提出四个解决方案。
并非只能用其中一种,而是可以选择几种来用。如果我时间充足,会给大家全讲了。
方案一:在页面生成个按钮,一点就直接alert窗显示最终结果即可。
方案二:做个html,把所有数据展示到html里,这样算是永久存储可以导出。
方案三:也不用正则提取了,直接把所有的html报告内的关键信息dom层,全部粘贴复制到其中一个里,这样生成的报告更细致。
方案四:启动邮件/钉钉/飞书 机器人功能。直接用机器人通知你执行结束并展示结果。
好了,不论选哪种,实现起来难度都不高,所以这个问题跳过。
那么这个并发功能算完了么?当然没有!
性能上也要考虑一个严峻的问题,就是如果用例特别多,那么并发执行就像什么了?
对,像压测!
也就是说,这个接口测试平台要承担压测的水准才行,可实际上,我们一开始造平台的时候并没有策划这个范围,而且服务器也不一定能扛得住!所以我们要做一个保险功能,什么功能?
具体功能,请听下回分解!