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

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,一经查实,立即删除!

相关文章

[转载]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步让你把企业网站优化做到极致。第一步:首先域就是让搜索引擎选择我们网站的主…

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

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

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…

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…

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年这个版…

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

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

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

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

hashmap 遍历_别慌,送你21 个面试官必问HashMap考点

Java面试笔试面经、Java技术每天学习一点Java面试关注不迷路作者:菜鸟小于来源:https://www.cnblogs.com/Young111/p/11519952.html1:HashMap 的数据结构?A:哈希表结构(链表散列:数组链表)实现,…

22套精美的网页按钮图标设计推荐(包括PSD和AI文件)

图标是一个简单的单色符号,表示对象的基本形状。字形被广泛地使用在我们周围的公共场所,如机场和商场或购物中心。在网页设计当中,他经常会被使用,用来展示每个元素代表的意思,他简洁大方,一目了然&#xf…

轻gc和重gc分别在什么时候发生_GC发展与现状

GC发展Java不像C或C那样,需要程序员在编程的过程中,时刻注意申请内存保存对象,在对象使用完成后,要在合适的时机将对象占用的内存释放掉(析构函数);Java得意与内部的三大机制,保证了程序开发方便&#xff1…

nginx离线安装_web高可用-基于keepalived和nginx

一.体系架构在Keepalived Nginx高可用负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故障时,热备服务器可以瞬间将VIP自动切换过来,实际运行中体验只有2秒钟…

php mysql 实现原理_php+mysql分页原理实现

完整代码如下:!htmlhead-"-type"";GBK"styletype"text/css"body{font-size:12px;font-family:verdana;width:100%;}div.page{text-align:center;}div.content{height:300px;}div.pagea{border:#aaaadd1pxsolid;text-decoration:none;…

python任意代码都可以缩进去_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...

最近的"平安经"可谓是引起了不小的风波啊。作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG。为此,明哥今天分享一个 Python 的黑魔法,教你如何在你执行任意 Python 代码前,让 Python 解释器自…

域用户更改密码提示拒绝访问_AD域中的ACL攻防探索

前言关于域内ACL的攻防近两年经常被人所提起,同时也产生了很多关于域内ACL相关的工具和攻击方式,本文将会从ACL的概念谈起,然后介绍几种不同的域内攻击方式以及如何监测和防御对于ACL的攻击。ACL的概念和作用ACM:首先想要了解ACL首…

go MySQL 多语句_八、MySQL经典查询语句-Go语言中文社区

student表course表score表teacher表1、 查询Student表中的所有记录的Sname、Ssex和Class列。select Sname,Ssex,Class from Student;2、 查询教师所有的单位即不重复的Depart列。select distinct Depart from Teacher3、 查询Student表的所有记录。select * from Student4、 查…

如何干净的删除vm_如何在macOS 10.15 Catalina绕过XProtect?

在macOS 10.15 Catalina中,Apple进行了许多安全性能地改进,包括通过使所有可执行文件都受XProtect扫描来加固系统,而不管文件是否带有com.apple.quarantine位标记。对于安全研究人员而言,这意味着不再像以前的macOS一样&#xff0…

activexobject对象不能创建_Oracle数据库用户管理之系统权限和对象权限

【关键术语】Privileges 权限System privileges 系统权限Object privileges 对象权限Grant 授予Revoke 撤消2.1 Oracle 权限概述2.1.1 权限的作用权限(privilege)是指执行特定类型 SQL 命令或访问其他模式对象的权利。Oracle 使用 权限来控制用户对数据的访问以及用户所能执行的…