一种自动化测试系统及方法与流程

文档序号:21200391发布日期:2020-06-23 19:15阅读:197来源:国知局
一种自动化测试系统及方法与流程
本发明涉及自动化测试领域,尤其涉及一种自动化测试系统及方法。
背景技术
:应用软件在开发完成之后,通常都需要进行功能测试、性能测试等各种测试,只有在测试通过之后才能发布给用户使用。因此,软件测试是软件项目生命周期中的一个重要阶段。以web软件开发为例,开发人员通常会分别进行前端和后端的开发,以提高开发效率。在开发完成之后,通常需要进行前端页面测试、以及后端业务功能测试。前端和后端彼此相互依赖,一方有问题另一方就可能需要进行相应的源代码调整。例如,在web软件开发完成后,测试人员首先需要规划要测试的每个功能点的测试用例,之后根据测试用例编写相应的测试脚本代码,完成后需协调运维人员准备测试环境,每个功能的版本测试需要确保外部环境一致,测试脚本运行完成后还需要收集汇总测试结果,反馈给开发人员。随着开发过程中快速迭代、快速交付的需求日益凸显,在项目快速迭代的过程中,为了保证交付质量不可避免的要进行一遍又一遍的测试。如果进行人工测试,费事又费力。例如,单独进行前端或后端的测试覆盖率不高且极有可能因人工失误忽略某些测试环节。测出问题时还需要测试人员与开发人员紧密沟通以解决问题,这样就导致大量的人力、物力和时间的浪费。因此,人工测试已经不能满足大型软件的测试需求,于是出现了自动化测试技术。然而,现有的自动化测试工具或软件通常只能完成整个测试工作的一部分,而且测试过程通常需要专业测试人员、运维人员的大量人工操作。例如,自动录制工具通常只能自动录制和生成测试脚本,由于前端技术日新月异,通常都需要由专业的测试人员编写许多测试用例,才能结合测试脚本进行测试覆盖率符合要求的自动化测试。随着新功能的开发,测试用例还需要频繁更新。例如,需要运维人员使用单独的测试环境部署工具来部署测试环境,以及维护测试环境里的软件更新。而且,同手工测试类似,测出问题时也需要测试人员与开发人员紧密沟通以解决问题,同样会导致大量的人力、物力和时间的浪费。因此,现有的自动化测试工具也已经不能再满足需要。因此,为了在自动化测试过程中减少人工操作步骤,缩短软件开发的生命周期,减少开发、测试人员的工作量,降低软件产品维护的复杂度,需要提出新的技术方案。技术实现要素:根据本发明的自动化测试系统,包括:源代码管理模块,用于对待测试软件的源代码进行版本管理;测试环境构建模块,用于基于待测试软件的源代码,构建待测试软件的测试环境;测试用例和测试脚本自动生成模块,用于基于用户通过gui执行的测试操作,自动生成测试用例和测试脚本;测试模块,用于基于测试用例和测试脚本,在测试环境下自动执行测试并生成测试报告。根据本发明的自动化测试系统,还包括:软件发布模块,用于自动发布通过自动化测试后的软件。根据本发明的自动化测试系统,其源代码管理模块还用于:基于webhook自动发送源代码更新消息,其测试环境构建模块还用于:基于webhook接收源代码更新消息,下载并重新编译更新后的源代码,重新构建待测试软件的测试环境,其中,源代码管理模块包括下列中的一种:svn、gitlab,测试环境构建模块包括jenkins。根据本发明的自动化测试系统,其测试用例和测试脚本自动生成模块还用于:通过录制用户通过gui执行的测试操作,自动生成测试用例和测试脚本,其中,测试用例和测试脚本自动生成模块包括selenium。根据本发明的自动化测试系统,其测试环境构建模块还用于:基于docker虚拟化技术来构建待测试软件和/或web浏览器软件的docker镜像,进而构建待测试软件的虚拟测试环境,其中,测试环境构建模块包括jenkins,web浏览器软件包括chrome-headless模式下的chromeweb浏览器软件。根据本发明的自动化测试方法,包括:使用源代码管理模块,对待测试软件的源代码进行版本管理;使用测试环境构建模块,基于待测试软件的源代码,构建待测试软件的测试环境;使用测试用例和测试脚本自动生成模块,基于用户通过gui执行的测试操作,自动生成测试用例和测试脚本;使用测试模块,基于测试用例和测试脚本,在测试环境下自动执行测试并生成测试报告。根据本发明的自动化测试方法,还包括:使用软件发布模块,自动发布通过自动化测试后的软件。根据本发明的自动化测试方法,还包括:使用源代码管理模块,基于webhook自动发送源代码更新消息;使用测试环境构建模块,基于webhook接收源代码更新消息,下载并重新编译更新后的源代码,重新构建待测试软件的测试环境,其中,源代码管理模块包括下列中的一种:svn、gitlab,测试环境构建模块包括jenkins。根据本发明的自动化测试方法,还包括:使用测试用例和测试脚本自动生成模块,通过录制用户通过gui执行的测试操作,自动生成测试用例和测试脚本,其中,测试用例和测试脚本自动生成模块包括selenium。根据本发明的自动化测试方法,还包括:使用测试环境构建模块,基于docker虚拟化技术来构建待测试软件和/或web浏览器软件的docker镜像,进而构建待测试软件的虚拟测试环境,其中,测试环境构建模块包括jenkins,web浏览器软件包括chrome-headless模式下的chromeweb浏览器软件。根据本发明的上述技术方案,减少了自动化测试过程中的人工操作步骤,缩短了软件开发的生命周期,降低了软件产品维护的复杂度。附图说明并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与相关的文字描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他的附图。图1示例性地示出了根据本发明的自动化测试系统的示意框图。图2示例性地示出了根据本发明的自动化测试方法的示意流程图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。图1示例性地示出了根据本发明的自动化测试系统的示意框图。如图1的实线框所示,根据本发明的自动化测试系统100包括:源代码管理模块101,用于对待测试软件的源代码进行版本管理;测试环境构建模块103,用于基于待测试软件的源代码,构建待测试软件的测试环境;测试用例和测试脚本自动生成模块105,用于基于用户通过gui执行的测试操作,自动生成测试用例和测试脚本;测试模块107,用于基于测试用例和测试脚本,在测试环境下自动执行测试并生成测试报告。例如,上述测试环境和用户使用软件的实际环境是一致的。可选地,如图1的虚线框所示,自动化测试系统100还包括:软件发布模块109,用于自动发布通过自动化测试后的软件。例如,可以将编译、链接之后的可执行文件打包之后自动发布。例如,在待测试软件没有通过上述自动化测试时,将测试未通过的结果报告给开发人员,此时需要开发人员修改源代码,并将更新后的源代码提交至源代码管理模块101,重新执行下一轮自动化测试。可选地,源代码管理模块101还用于:基于webhook自动发送源代码更新消息,测试环境构建模块103还用于:基于webhook接收源代码更新消息,下载并重新编译更新后的源代码,重新构建待测试软件的测试环境,其中,源代码管理模块101包括下列中的一种:svn、gitlab,测试环境构建模块103包括jenkins。例如,源代码管理模块101中的代码仓库(例如,svn、gitlab)有推送提交、拉取请求、分支合并等操作的时候,可以通过webhook自动通知测试环境构建模块103中的jenkins,触发noci(即,非持续集成)检查、打印信息、软件编译、链接、打包、拷贝至目的计算机(例如,ansible主机)、部署至开发环境、部署至测试环境、部署至平台(stage)、部署至prod、部署至shell环境、上传至存储服务器、获取最终的输出结果、结束等操作(上述操作可以根据待测试软件的不同或具体测试需求的不同而进行定制),构建出最新代码的软件包,无需客户端(即,前端)主动触发。例如,开发人员可以在提交代码时添加备注信息,备注信息中可以包含自定义(例如,由一些特殊字符组成的)标识,用于指示测试环境构建模块103不针对这些代码执行自动构建和测试操作。因此,在进行noci检查之后,如果满足noci条件(即,备注信息包含上述自定义标识),就不会触发对这些代码的自动化构建和测试操作了。例如,jenkins会提供构建过程中的各个相关操作是否成功执行的信息。可选地,jenkins软件可以将软件包的构建结果(例如,构建成功或失败的信息)自动发送至slack通讯软件,开发人员能够通过slack通讯软件直接获取软件包构建成功的信息、或者构建失败的告警信息,无需人工查询jenkins中的构建结果。可选地,测试用例和测试脚本自动生成模块105还用于:通过录制用户通过gui执行的测试操作,自动生成测试用例和测试脚本,其中,测试用例和测试脚本自动生成模块105包括selenium。例如,可以在首次测试、或者在待测试软件的功能有变化(例如,增加了新功能)时,通过以下具体步骤来实现测试用例和测试脚本自动生成模块105的录制用户通过gui执行的测试操作,自动生成测试用例和测试脚本的上述功能:非专业的测试人员只需在上述测试环境中模拟真实用户在网页上执行的操作即可,(例如,插件形式的)测试用例和测试脚本自动生成模块105可以自动捕捉网页元素(例如,表单、按钮、菜单等),并且录制用户对不同网页元素所执行的操作(例如点击、键盘输入、选择选项等),录制完成后会根据网页元素所对应的操作自动生成(例如,包含测试用例的)测试脚本代码。例如,以包含“用户名”和“密码”两个文本输入框、以及“登录”按钮的用户登录页面为例,为了测试软件的用户登录操作功能,可以执行以下录制操作:1、打开登录页面(例如,http://www.testlogin.com)。2、输入用户名(username)。3、输入密码(password)。3、点击登录按钮。针对上述四个操作步骤,所录制的具体操作信息如表1所示:表1录制的具体操作信息操作命令操作对象网页元素对应的变量openhttp://www.testlogin.comtypeid=emailusernametypeid=passwordpasswordclick//button[@type=’submit’]支持生成python、c#、java、ruby、groovy、以及robotframework等测试脚本代码中的至少一种,本次自动生成的python代码为:deftest_login(self):driver=self.driverdriver.get(“http://www.testlogin.com”)driver.find_element_by_id(“email”).clear()driver.find_element_by_id(“email”).send_keys(“username”)driver.find_element_by_id(“password”).clear()driver.find_element_by_id(“password”).send_keys(“password”)driver.find_element_by_xpath(“//button[@type=’submit’]”).click()上述自动生成的代码中的所有操作步骤都可以单独修改、删除,也可以在上述代码中手动添加新步骤。可选地,测试环境构建模块103还用于:基于docker虚拟化技术来构建待测试软件和/或web浏览器软件的docker镜像,进而构建待测试软件的虚拟测试环境(包括待测试软件的镜像/容器环境),其中,测试环境构建模块103包括jenkins,web浏览器软件包括chrome-headless模式下的chromeweb浏览器软件。例如,当测试环境构建模块103中的jenkins软件模块检测到待测试软件的软件包成功构建之后,可以触发待测试软件(项目)的docker镜像的制作流程,并且制作成功后自动启动软件项目的容器环境,针对复杂度较高的软件项目,也支持多个docker镜像构建且基于docker-compose来做docker编排。此步骤首先保证了每次自动化测试时的数据一致性,且都由jenkins触发,降低了运维成本。此时,同样可以通过webhook将待测试软件的软件包成功构建的信息自动通知到测试环境构建模块103中的jenkins,触发更新ansible主机上的文件、创建安装程序(installer)、构建docker镜像、构建docker镜像的程序包文件夹、执行前端测试等操作,无需客户端主动触发。另外,测试环境构建模块103也可以用于web浏览器软件的docker镜像的自动制作。例如,jenkins会提供docker镜像制作过程中的各个相关操作(例如,加载镜像的依赖文件、加载启动脚本文件等)是否成功执行的信息。例如,为了在无界面的服务器——例如,持续集成(ci)服务器上运行测试并减少外界干扰,保证测试稳定性并且方便运维,可能会需要采用容器化的chrome-headless模式的chrome浏览器。然而,默认的docker权限会导致chrome-headless模式启动失败,而--cap-add=sys_admin参数设置会赋予chrome-headless模式过多不必要的权限,影响系统安全。因此,要制作chrome-headless模式的chrome浏览器软件的容器并跟测试环境配合,除了编译安装之外,还需要做以下改进。通过对chrome-headless模式进行调试得知chrome-headless需要调用以下系统函数:arch_prctl()、chroot()、clone()、fanotify_init()、name_to_handle_at()、open_by_handle_at()、setdomainname()、sethostname()、syslog()、unshare()、vhangup()、setns()。因此,可以使用seccomp安全机制,配合dock容器运行时的参数设置--security-optseccomp=$home/chrome.json来限制chrome-headless的系统调用权限,从而解决了权限问题。然后再在docker中安装chromedriver与selenium两种软件即可。在结合chrome-headless模式的chrome浏览器对无界面的服务器进行测试时,测试环境构建模块103中的jenkins还用于执行以下操作:1、jenkins自动启动chrome-headless容器并挂载测试脚本目录。该操作既清理了执行测试的客户端的缓存、cookie、应用数据等可能影响测试结果的因素,也因容器的特性而比虚拟机客户端建立销毁开销大幅降低。2、在检测到chrome-headless容器成功启动之后,进入容器内执行测试脚本,并自动生成测试报告。因为录制工具(例如,selenium)自身支持selenese命令,所以通过该操作可以在执行完测试脚本后自动生成测试报告。测试报告可以详细记录测试脚本的每个步骤及数据、每个错误步骤所涉及的详细调试信息、以及错误页面的截图。3、自动验证测试是否通过,通过即交付,不通过则发送告警信息给开发人员。图2示例性地示出了根据本发明的自动化测试方法的示意流程图。如图2的实线框所示,根据本发明的自动化测试方法,包括:步骤s202:使用源代码管理模块,对待测试软件的源代码进行版本管理;步骤s204:使用测试环境构建模块,基于待测试软件的源代码,构建待测试软件的测试环境;步骤s206:使用测试用例和测试脚本自动生成模块,基于用户通过gui执行的测试操作,自动生成测试用例和测试脚本;步骤s208:使用测试模块,基于测试用例和测试脚本,在测试环境下自动执行测试并生成测试报告。可选地,如图2的虚线框所示,根据本发明的自动化测试方法,还包括:步骤s210:使用软件发布模块,自动发布通过自动化测试后的软件。可选地,如图2的虚线框所示,根据本发明的自动化测试方法,还包括:步骤s212:使用源代码管理模块,基于webhook自动发送源代码更新消息;步骤s214:使用测试环境构建模块,基于webhook接收源代码更新消息,下载并重新编译更新后的源代码,重新构建待测试软件的测试环境,其中,源代码管理模块包括下列中的一种:svn、gitlab,测试环境构建模块包括jenkins。可选地,如图2的虚线框所示,根据本发明的自动化测试方法,还包括:步骤s216:使用测试用例和测试脚本自动生成模块,通过录制用户通过gui执行的测试操作,自动生成测试用例和测试脚本,其中,测试用例和测试脚本自动生成模块包括selenium。可选地,如图2的虚线框所示,根据本发明的自动化测试方法,还包括:步骤s218:使用测试环境构建模块,基于docker虚拟化技术来构建待测试软件和/或web浏览器软件的docker镜像,进而构建待测试软件的虚拟测试环境,其中,测试环境构建模块包括jenkins,web浏览器软件包括chrome-headless模式下的chromeweb浏览器软件。根据本发明的上述技术方案,具有以下优点:1、减少了自动化测试过程中的人工操作步骤,缩短了软件开发的生命周期,减少了开发、测试人员的工作量,降低了软件产品维护的复杂度。2、提供了一种(前)端到(后)端的自动化测试方案,可以通过录制前端实际调用的(后端)操作自动生成端到端的测试脚本(包括测试用例),无需专业测试人员编写代码。还可以在软件代码提交更新时自动部署干净的测试环境并执行测试脚本,最后生成测试报告反馈给开发人员。3、自动生成的脚本、容器都可以重用,降低了资源消耗和维护的复杂度。4、适用性强,针对不同的语言、架构只需执行录制操作,自动生成不同的脚本即可。5、测试流程和测试结果的反馈流程全自动化,最大化地减少了人员投入,提高了工作效率。上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1