自动化测试在资产管理中的应用
——以资产管理系统中资产变动模块为例*
2022-08-23无锡科技职业学院黄骥
无锡科技职业学院 黄骥
就软件测试中自动化测试在资产管理中的应用展开了研究,结合资产管理系统(仅适配IE浏览器)中资产变动模块的相应功能点进行了探讨。在此基础上,以资产变动信息为测试用例,使用Python编写基于Selenium库的自动化测试脚本。在脚本中增加了对Chrome浏览器的兼容处理,最终在Chrome浏览器中实现模拟手动操作,取得了与之在IE浏览器中相同的运行效果。
随着信息化时代的到来,采用资产管理系统的资产管理方式逐渐取代了传统的手工管理方式,提高了资产管理工作的效率。然而现有的资产管理系统普遍存在一些问题。首先,受限于用户界面和业务逻辑的设计,用户体验难免不够便捷,且往往难以满足批量操作的需求。其次,国内大部分企事业单位的资产管理系统采用B/S架构,系统可能存在浏览器兼容性问题,从而造成由CSS引起的显示异常或者由JavaScript(JS)引起的功能异常等。近期,美国微软公司宣布于2022年6月15日退出支持IE浏览器。因此,原本需要使用IE浏览器访问资产管理系统网站的用户将不得不寻找新的浏览器替代。
众所周知,针对上述问题,现行普遍的解决方案是让用户使用指定的浏览器;或者变更软件需求,通过软件开发解决问题。
1 自动化测试
本文仅讨论基于Selenium库的网页端自动化测试,使用的浏览器为Chrome浏览器,编程语言为Python。
1.1 产生/销毁Chrome浏览器窗口句柄
首先,引入Selenium库的WebDriver模块。然后,通过driver=webdriver.Chrome()产生浏览器窗口句柄并打开一个Chrome浏览器窗口,通过driver.quit()销毁浏览器窗口句柄并关闭Chrome浏览器窗口;最后,在产生句柄和销毁句柄的这两行代码之间进行自动化测试代码的书写。
1.2 获取HTML元素
通过driver.find_element_by_X()方法获取单个元素、driver.find_elements_by_X()方法获取多个元素,其中X可以是ID、Name、Class、XPath、CSS_Selector等,参数为元素对应的属性。
1.3 注入JavaScript脚本
通过driver.execute_script()方法在当前页面中注入JS代码,参数为写有JS脚本的字符串,该方法可以改变页面的前端布局以及前端JS脚本中各变量的值或状态。
2 资产变动的功能点分析
由于部门的调整,当有人员调动时,其名下的资产一般会移交给原部门的其他同事。此时需要联系资产管理员进行资产变动。
2.1 选择待变动的资产
如图1所示是某资产管理系统的资产列表页面。首先,根据“资产编号”确定待变动的资产;然后,通过点击图1所示的复选框选择待变动的资产;最后,点击“选择”按钮确定所选资产。
图1 资产列表页面Fig.1 Asset list page
2.2 编辑资产变动信息
如图2所示是某资产管理系统的资产变动页面。首先,“使用/管理部门”“使用人”“存放地点”等字段通过点击“选择”按钮,在弹出的模态对话框中填写相应的信息,保存信息时模态对话框将自动关闭,模态对话框中填写的信息将自动填写到上述字段所在的输入框中;接着,“现状”“使用方向”等字段通过下拉框选择输入;然后,根据实际变更的情况填写“变动原因”;最后,点击“保存”按钮,如果检查之后确定无误,则点击“提交”按钮上报一级单位。
图2 资产变动页面Fig.2 Asset changing page
3 自动化测试脚本的设计
本文的测试环境如表1所示,被测的资产管理系统仅在IE浏览器中可以正常运行,而在其他浏览器(如Chrome浏览器)中会出现影响功能正常使用的兼容性问题。接下来针对资产变动模块操作的关键环节进行说明。
表1 测试环境Tab.1 Testing environment
3.1 在资产列表中选择待变动资产
为选择图1中的待变动资产,即操作相应的复选框,一般通过复选框元素的ID、Name属性值或CSS选择器进行定位操作,当确认选择时后端将获取前端被选中的复选框元素的Value属性值(资产编号通常写在该属性中)。在本文的被测系统中,因该元素的ID和Name属性值均不含资产编号,而CSS选择器不支持文本搜索,故考虑使用XPath语句匹配其Value属性值从而实现定位。又因为显示在前端的复选框元素的Value属性值已被后端加密,加密方式无从得知,难以根据其Value属性值进行筛选,所以需要使用其他的方法构造XPath语句,具体步骤如下:
第1步:从图1中表格的第2行至最后一行内的第3列单元格中的文本和待变动资产的编号进行匹配,即://table/tr/td[3][text()='资产编号'];
第2步:在上一步XPath语句的基础上继续构造XML路径,用来表示上一步匹配结果所在行第1列单元格中的复选框,完整的XPath语句为//table/tr/td[3][text()='资产编号']/../td[1]/input;
第3步:以上一步中的XPath语句为参数,调用driver.find_element_by_xpath()方法获取复选框元素,接着调用click()方法切换选中状态。
当需要选择大量的待变动资产时,采用自动化测试脚本的方式可以快速准确地定位目标资产,大大提升管理效率。
3.2 模态对话框的打开、数据获取
如图3所示是一种模态对话框,在IE浏览器中可以正常打开,但在Chrome浏览器中却不可以正常打开。造成该现象的原因在于,模态对话框是通过JS的window.showModalDialog()方法打开的,而该方法仅在IE浏览器中有定义。
图3 模态对话框Fig.3 Modal dialog
为了能够在Chrome浏览器中打开模态对话框,一般采用window.showModalDialog()方法的重定义,即如果该方法已定义,则维持现状;否则使用window.open()方法代替。
当关闭模态对话框时,其父页面将接收模态对话框返回的数据。如果是Chrome浏览器,在用上述方法打开模态对话框的前提下,可以在模态对话框所在的页面中注入JS脚本,在脚本中使用window.opener.document对象来操作父页面的HTML DOM。
如果要在不支持模态对话框的Chrome浏览器中打开模态对话框,那么需要在每个涉及到打开模态对话框的页面中注入兼容代码。显然,手动操作的便利程度远不及自动化测试脚本。
4 结语
自动化测试脚本可以让资产管理员按照自己的思路操作资产管理系统,是在不改变被测系统源代码的前提下基于被测系统的二次开发。同时,当访问资产管理系统网站遇到浏览器兼容性问题(尤其是影响到功能的正常使用)时,调用诸如Selenium等自动化测试库进行JS脚本注入便可以较好地解决此类问题。换言之,资产管理员可以将资产管理工作转变为软件测试活动,即:以资产管理数据为测试用例,自动化测试脚本为执行步骤,进行资产管理系统的自动化测试,在完成资产管理工作的同时可以检查被测系统中可能存在的漏洞或缺陷。
随着人工智能的再度崛起,低端岗位逐步被智能设备取代。同时,HTML、CSS和JS在版本迭代中逐渐能够适应各大主流浏览器。这背后少不了软件测试的深度参与。其中,自动化测试本身能够替代一些简单重复的手动测试。特别地,自动化测试程序还能调用人工智能算法,进一步替代较复杂的工作,加速推动软件行业的发展。