任务管理平台_软件品质评测系统任务分发管理平台

testkuaibao|软件测试自学公众号

99aa7c7905864d00b11425a7cbb7320f.png

1●为什么需要任务分发平台

在一个基本的评测系统中我们有了评测执行工具、评测数据、评测环境就能进行一次评测任务的执行,但现在是大数据时代,我们更多的需求是针对大量数据进行评测。比如在输入法评测中我们有10000个语料文件需要下发到100台手机上执行测试,如果靠人工控制逐一分配任务难免非常复杂混乱,影响工作效率。而一个任务分发管理平台的意义就是实现对所有任务进行统一管理,保证有序高效执行。

2●一个优秀的任务分发平台是怎样的

在输入法项目的评测工作中,我们对任务分发管理也有了一些经验,我们认为一个优秀的任务分发管理平台需要具备以下三个特征:

结果准确

正确下发任务是平台的基本功能,保证用户获取的任务信息准确无误。比如一个输入法评测任务:评测10.1版本输入法在体育类别语料中的基础品质,那获取的任务中包含的评测数据集以及软件版本等信息必须完整且准确,否则错误任务的执行不仅耗时,还可能产生错误的评测结论。

另外,需要注意的是海量任务评测必须处理好高并发的用户场景,比如100台手机同时获取评测任务时,需要平台保证所有任务无重复且无遗漏的下发。

高效执行

平台的稳定性是保证效率的基本要求,否则每一个崩溃的修复都会增加测试成本。

大量数据的高效执行需要我们提供智能分发能力,计算最优下发策略。比如任务列表中包含3任务,执行一次的时间分别为A任务4小时、B任务4小时、C任务8小时,现有2台机器并发工作。任务分发平台下发任务的不同策略会导致不同的时间成本,方案一:下发顺序ABC,则三个任务执行完毕总消耗的时间为12小时;方案二:下发顺序CAB,则总消耗为8小时。因此智能分发是提高效率的有效途径

6399bba55066ada815efa66659ee79a9.png

使用便捷

平台的设计更多需要从用户的角度出发,作为平台的开发者必须熟悉评测的需求才能编写出便捷易用的产品。

对接用户需求是关键,比如我曾经遇到过如下问题,在任务平台的结果展示界面中有任务进度展示表格,表格中展示了该项目任务的语料信息、软件信息,评测进度等,在每一行的表格编号展示时,以开发者的习惯设计为递增的行号。后来以评测执行者的身份查看该表格时发现设计为该项目在数据库中对应的id号更合适,在后续可以通过该id值与其他任务结果展示表格数据产生直观的连接。

a78cab41d4e4e1c9a57e18d8ff8d854f.png

3●如何做任务分发管理平台

任务分发管理平台的设计实现我们分为数据库、后端和前端三个模块。

数据库

首先在评测前需要先做好数据的存储,海量数据的合理存储能够给整个评测的工作提供稳定的数据支持。

数据库设计时需要考虑如何节省空间和查询高效。第一、尽量减少冗余数据,比如输入法评测中一个任务中包含软件信息,而显然任务数据是百万量级的,而软件信息一般是百量级的,因此将软件信息和任务信息设计为两个数据表,通过外键的方式连接可以节约数据存储空间,提高数据访问速度。第二、建立高效索引,一般用户的各种需求实现时需要对数据表进行各种组合条件查询,而对于百万量级的数据表如果不能建立高效合适的索引,查询的效率显然无法满足要求。

后端

数据处理

我们在做各种数据处理时主要遵循两个原则:准和快。

首先数据要准确,比如用户误操作重复添加的任务能及时过滤,用户删除的任务能及时更新任务数据,高并发时要保证数据的线程安全等等。

其次数据处理要高效,这个体现在很多方面,比如在数据库的访问中不同的语法的效率便有很大的差异,在如下所示代码中同样是查询状态为pending的第一条任务,第二种语句的实现显然效率更高。

语法一:task = TaskInfo.query.filter(and_(TaskInfo.status == "pending").all()[0]语法二:task = TaskInfo.query.filter(and_(TaskInfo.status == "pending").first()

任务流

一个完整的任务流一般分为任务的添加、任务的获取、任务的下发和任务信息的回收,而这也正好对应任务的生命周期中的四个状态任务就绪(pending)、等待执行(waiting)、执行中(running)、结束(finished)。

905556318be8c56bb3688d70946f43e7.png

一个任务流分为以下四步:

1)新任务首次写入数据库中,初始状态置为pending。此过程直接与用户交互,因此在用户操作后可以将任务先加入缓存Redis中,及时给予用户反馈,然后再后台定期将Redis中任务写入数据库中;

2)从数据库获取pending状态的任务,写入缓存任务队列,任务状态置为waiting,等待被执行。用户获取任务的过程频繁,因此提前将所有未执行任务取出可以减少数据库的访问次数,其次将任务缓存在Redis的数据结构中还可以提高用户获取任务的响应速度;

3)执行机器从缓存任务队列中获取任务开始执行,任务状态置为running;

4)任务执行完毕后,任务状态置为finished。

用户交互

用户交互部分的实现一般需要注意两点:

第一、接口规范要统一,先收集用户需求,然后与前端统一定义好接口的参数,使用规范,提高工作效率。

第二、考虑用户对响应性能的要求,对于一些需要执行很长时间的任务,如果不能及时响应,用户的前端界面就会一直卡在那儿,影响体验。因此需要考虑用户场景优化底层实现算法,比如分布式调度任务、多线程处理、分页优化算法等等以提高交互性能。

前端

前端是直接面向用户的,因此前端的设计必须对接用户的需求,要有产品思维,从用户的角度出发设计前端,做到简单、美观和规范。而在实现上,选择一款合适的前端框架也能事半功倍,目前比较主流的框架有React、Vue和Angular等等。每种框架都有其适用的开发场景,比如React在浏览器兼容方面很有优势,Vue是轻量级的渐进式框架,与现代化的工具链以及各种支持库的结合非常优秀,非常容易上手,而Angular框架是JS框架,有着丰富的Angular指令,可以扩宽html。在开发任务分发平台的前端时可以选择以上任意一种框架,按照开发者的习惯即可。

4●总结

在当今大数据AI时代,对大数据的测试会成为业界趋势,具备相关的技术能力也是我们测试的必要功课,做好任务分发也是其中必不可少的一环。对于大数据测试大家有什么心得体会,也欢迎与我们一起分享~~~。

来源:搜狗测试、作者:liuyang,如有侵权请联系删除

0a2fef68e8065713c5027d719b0d2f62.png关于sdk测试,这些你都知道吗?测试数据不会造?可以用这个工具接口测试之文件重定向法2年软件测试开发的成长历程觉得文章不错就点个在看呗,转发就更好了

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

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

相关文章

用mingw链接msvc生成的库时,无定义chkstk问题的解决

在用mingw链接msvc生成的库时常常产生这样的链接错误: undefined reference to _chkstk 这是因为chkstk is a stack-probing thing that MSVC generates whenallocating big stack frames), and that GCC has an equivalent inlibgcc (called _alloca).也…

[转载]Visual Studio 2010敏捷利剑:详解Scrum

Visual Studio 2010敏捷利剑:详解Scrum 【IT168 专稿】随着微软Visual Studio 2010 Ultimate Beta2版本的发布,除了它提供协同一致的ALM(应用程序生命周期)管理工具外,MSF for Agile Software Development过程框架从4.2升级到5.0,并且是以Scr…

网站收录工具(php导航自动收录源码)_10步把企业网站优化做到极致,SEO优化的核心知识...

对于企业网站优化,重要的就3点,内容原创、外链建设、内部优化,其它网站优化也会涉及到这些,但是企业站就变的简单的多了,下面10步让你把企业网站优化做到极致。第一步:首先域就是让搜索引擎选择我们网站的主…

“无法解析外部符号 __security_cookie”问题解决

编译VC工程时出现了标题所示问题,资料搜索一下,在微软网站找到答案了,解决方法如下:1)选择“项目”-》“属性”-》“C/C”-》“代码生成”-》“缓冲区安全检查”,设为“否”2)选择“项目”-》“…

mysql not is null_转!!mysql 字段 is not null 和 字段 !=null

今天在查询数据时,查到包含一条某个时间startTime(该字段默认为null ) 为null的记录,想把它过滤,加了 startTime! null 的条件,结果记录都没了,应该用条件 is not null。转自:https://segmentfault.com/a/1…

WindowManager.LayoutParams类

WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;继承于 ViewGroup.LayoutParams 。 它的内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。下面来分析一下这个类:定义public static class WindowManager.LayoutParam…

myeclipse mysql连接_MyEclipse连接Mysql数据库的方法(一)

准备工作:MyEclipse使用的是2013版,mysql Ver 14.14 Distrib 5.6.281.jar包的下载(jdbc驱动)我下载的是:mysql-connector-java-5.1.7-bin.jar2.打开MyEclipse---->选择window---->选择open perspecctive---->myeclipse Database Exp…

Qt+VS2005(配置步骤)

在VS2005中安装了QT4.4.3,由于目前的QT版本已经很高了,很难找到QT4.3.2之类的版本了,还有另外一个原因:QT在VS2005上的插件的版本也很高了。因此,很多QT与VS2005结合的文章,现在都不太适用了;不…

c malloc 头文件_C/C++笔试题:主要考察C/C++语言基础概念算法及编程,附参考答案...

1.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;答:char *strcpy(char *strDest, const char *strSrc){if ( strDest NULL || strSrc NULL)return NULL ;if ( strDest strSrc)returnstrDest ;char *tem…

置换加密算法

1 #include "stdio.h"2 #include "stdlib.h"3 #define column 34 typedef char DataType;5 6 7 /************************************************************************/8 /* 置换加密算法。9 content为需要加密的内容,index为置换的密匙…

SQLlite数据导入到mySQL_如何批量导入数据到Sqlite数据库

做android和ios开发的一般都用Sqlite数据库,有的时候数据需要批量导入,那么如何导入呢?在这里,介绍2种方法供大家参考。一、用sqlite命令以windows系统为例,linux下命令是一样的。1.安装sqlite工具包首先要安装有sqlit…

c/c++ 运行库

11.2 C/C运行库 11.2.1 C语言运行库 任何一个C程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所依赖的函数所构成的函数集合。当然,它还理应包括各种标准库函数的实现。…

下面哪个字段是http请求中必须具备的_理解HTTP协议-HTTP协议详解总结

一、HTTP协议的演进HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80。1、HTTP 0.9版本 1991年这个版…

查看一个结构体成员的方法

find / *.h -name|xargs grep 结构体名 这个方法并不是很凑效。。。 万能的gdb 法: int main(void){type var;return 0;}gcc -g a.cgdb a.outb mainrp varset print pretty onp varp main::v转载于:https://www.cnblogs.com/mathzzz/archive/2012/09/24/2700796.htm…

ad电阻原理图_负载电阻的原理及应用

在开始主题之前,我们需要了解的是:负载电阻是什么?将其拆分:负载和电阻;负载,顾名思义,是指连接在电路中的电源两端的电子元件。主要功能就是将电能转换成其他形式的能,以实现能量的…

终于搞定android驱动USB摄像头了!

多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题。帖子大意:讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼容)默认Android不提供访问外部摄像头的API,所以你要考…

mysql怎么回复.from的数据库_mysql怎么回复.from的数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

python dataframe 新列_Python第二十四课:Pandas库(四)

Python第二十四课:Pandas库(四)点击上方“蓝字”,关注我们.不知不觉,我们已经跨越了千难万险,从零开始,一步步揭开了Python神秘的面纱。学到至今,回过头,才晓得自己在不知不觉已经学会了如此多的…

Sharepoint 2010 应用范围

应用范围:入口網站 (Site) 、 協同合作 (Community) 、 內容管理 (Content) 、 企業搜尋 (Search) 、 商業智慧 (Insight) 、 商業流程 (Composite) use: http://www.microsoft.com/taiwan/casestudies/products/moss.aspx# http://www.microsoft.com/taiwan/sharep…

Visual Studio 2005结合Direct 9.0 SDK(Aug2007)时应该注意的事项

要用DX SDK开发DX程序必然要用VC 6.0或者VS。但是现在的DX SDK VC 6.0已经不能胜任了,一般都是用VS2003或者VS2005来进行开发。 昨天,我开始搭建开发环境(前次弄好了但是GHOST还原了就没了……),但是直到晚上十点多宿舍…