海纳百川与只取一瓢饮快讯

来源: AI脑力波 / 作者:王其成 / 2018-11-02 19:15
随着大数据、云计算、AI等元素的引入,大部分公司软件逐渐平台化,业务功能越来越多、系统交互越来越多样、业务耦合也越来越复杂,大部分测试团队都研发了自己的自动化测试平台

随着大数据、云计算、AI等元素的引入,大部分公司软件逐渐平台化,业务功能越来越多、系统交互越来越多样、业务耦合也越来越复杂,大部分测试团队都研发了自己的自动化测试平台。自动化测试平台应该有下面的基本功能: 

 

  • 测试项目、测试用例、测试计划、测试任务、版本、环境、日志、结果、人员等要素的管理

 

  • 测试代码的构建和执行

     

  • 测试计划的调度控制

 

  • 测试结果的通知和图形展示

 

(此图来源于大数据思维)

 

但使用一段时间后,我们才发现整个测试平台光有上述模块和功能还远远不够,我们需要一些设计让它变得更有张力。下面我们就来挖掘一下让自动化测试平台具备一定的伸缩性的设计: 

 

自定义字段的应用和个性化设置

 

现在的互联网公司同一时期有上百的测试项目,随着时间的推移项目越来越多,所以设计测试平台前,要考虑数据量存储,更要考虑数据的结构化,提取项目的共同点,发现各项目的差异,并为每个项目保留充足的自定义字段。

 

另外,平台上运行的项目很多,但对每一个测试人员来说,他只关心和他相关的项目,这时候我们需要让每一个测试人员选择项目,形成自己定制的菜单和桌面,让测试人员一上来就直奔自己的主题,更快地投入测试。更少的项目同时展示,也提高了平台的性能。

 

成百上千的测试用例被录入,每个测试用例需要有自己的标签,而且不止一个,利用标签,测试人员很容易找到自己需要的用例,组织一次有针对性的测试。通过丰富的标签和测试结果的关联,我们甚至可以让“人脑”感知某类问题的存在,通过进一步的分析去定位到问题的根源,这也是今后AI测试的基础。

 

树和缓存的应用

 

测试要完全覆盖一个项目,需要上千的测试用例,我们需要一个层次清晰的结构去组织这些用例。通常的列表和分页,结合搜索功能,已经可以展示出所有的用例,但是从感官上讲这种方式不直观。我们推荐用树结构去展示测试用例,把每个测试用例集定义为树节点,每一个测试用例定义为树叶。通过展开/收缩控制树的显示规模,可以直观快速的定位到位置。

 

要展示出一个完整的树,我们需要得到所有的测试用例集和测试用例的信息,这无疑会产生性能问题,但是我们采用分布加载和缓存技术,可以解决这个问题。首先我们不会一次加载所有的数据,而是点击某一树节点后,才去取数据,当取到后我们把它缓存下来,当没有收到更新通知时,我们都可以使用缓存数据。

 

不过,当一棵树过于庞大,页面信息和缓存会占用的大量内存,就会影响浏览器的性能,这时候就不得不采用表格的展示形式了。

 

支持外部数据的导入和联动

 

测试平台不是一个孤立的系统,它需要其它平台提供数据和联动,例如从Jira得到项目信息和状态;从Devops得到发布版本信息;从Testlink、QC等用例管理平台或Excel、XML文件得到用例信息,所以导入功能是必须的,而且还要尽可能打通公司其他平台,与之联动,同步数据。在导入过程中还要严格区分数据是创建、更新还是删除,让测试人员在一处更改了数据,测试平台上数据都能同步,让数据维护成本最小。

 

支持尽可能多的测试工具

 

市场上有很多的测试工具,例如Postman、Fitnesse、Jmeter,也有很多的测试框架,例如Selenium、Appium、robotFramework、TestNG、Junit,也有很多的开发语言,例如Java、Python、Nodejs。测试平台应该尽可能集成上述工具、框架、语言,调度它们,把他们运行的结果展现出来。这样带来的好处有:

 

1、初期,测试人员不需要任何的学习成本,用他们最擅长的语言、工具、框架完成他们的测试任务,测试平台就能跟踪到所有的测试结果,这也减低了公司招聘测试人员的门槛。

 

2、后期,随着测试人员的学习和提高,发现自己使用的工具并非最合适的,他们可以更换工具、语言编写新的用例。原用例依然可以运行,并和新用例合并成完整的测试结果。

 

支持任务分布式执行、定时执行、队列执行

 

分布式执行:我们需要实现平台Web + 执行client结构,通过Git + Jenkins(节点或者docker)部署测试资源,在指定的环境中完成测试任务,我们也能通过这种结构完成并发测试。

 

定时执行:很多测试计划需要在夜间无人的情况下自动运行,这样可以解放测试人员的双手,也可以充分利用资源,让有限资源无时不刻的运转起来。

 

队列执行:利用Redis或消息队列实现事务锁、进程锁等装置解决那些有资源互斥的要求的任务,让他们队列起来,只有锁释放了,才能一个接一个的被执行。

 

Jenkins是一个不错选择,在合理的配置下,它能完成上述三个功能。
 

阅读延展

1
3