发明内容
本发明主要解决的技术问题是更高效地实现三维引擎的功能测试。
第一方面,一种实施例中提供一种三维引擎的功能测试方法,包括:显示被调用的三维模型;启动三维引擎的功能,对三维模型进行处理,其中,所述三维引擎用于根据预设算法实现所述三维模型的创建和渲染;获取第一截图,所述第一截图为所述三维模型被执行所述功能后的截图;获取预设的第二截图,所述第二截图为所述三维模型被执行正确的所述功能后的截图;分别计算出所述第一截图和所述第二截图的哈希值,并将两个哈希值进行比较,以确定所述功能是否正确。
一些实施例中,所述分别计算出所述第一截图和所述第二截图的哈希值,并将两个哈希值进行比较,包括:分别将所述第一截图和所述第二截图缩小到相同尺寸,以得到缩小后的第一截图和缩小后的第二截图;将所述缩小后的第一截图进行灰度转换,到测试灰度图;将所述缩小后的第二截图进行灰度转换,得到标准灰度图;根据所述测试灰度图得到第一像素点矩阵和第一灰度平均值,所述第一像素点矩阵的行和列分别对应所述测试灰度图的高和宽,所述第一像素点矩阵的元素对应所述测试灰度图中像素的灰度值,所述第一灰度平均值为所述测试灰度图中所有像素的灰度值的平均值;根据所述第一像素点矩阵和所述第一灰度平均值得到第一比较矩阵,所述第一比较矩阵的行和列与所述第一像素点矩阵相同,且所述第一比较矩阵的元素与所述第一像素点矩阵的元素一一对应,所述第一比较矩阵用于表征所述第一像素点矩阵中每个元素与所述第一灰度平均值的比较结果,将所述第一比较矩阵中的元素按照先行后列的方式进行排列可生成第一哈希值,所述第一哈希值为第一截图的哈希值;根据所述标准灰度图得到第二像素点矩阵和第二灰度平均值,所述第二像素点矩阵的行和列分别对应所述标准灰度图的高和宽,所述第二像素点矩阵的元素对应所述标准灰度图中像素的灰度值,所述第二灰度平均值为所述标准灰度图中所有像素的灰度值的平均值;根据所述第二像素点矩阵和所述第二灰度平均值得到第一比较矩阵,所述第二比较矩阵的行和列与所述第二像素点矩阵相同,且所述第二比较矩阵的元素与所述第二像素点矩阵的元素一一对应,所述第二比较矩阵用于表征所述第二像素点矩阵中每个元素与所述第二灰度平均值的比较结果,将所述第二比较矩阵中的元素按照先行后列的方式进行排列可生成所述第二哈希值,所述第二哈希值为第二截图的哈希值;将所述第一哈希值和所述第二哈希值进行逐位比较,如果每一位都相同,则所述功能为正确,否则,所述功能为错误。
一些实施例中,所述根据所述第一像素点矩阵和所述第一灰度平均值得到第一比较矩阵,包括:若所述第一像素点矩阵的元素大于等于所述第一灰度平均值,则将所述第一比较矩阵中对应的元素记为1,否则,将所述第一比较矩阵对应的元素记为0;所述根据所述第二像素点矩阵和所述第二灰度平均值得到第一比较矩阵,包括:若所述第二像素点矩阵的元素大于等于所述第二灰度平均值,则将所述第二比较矩阵中对应的元素记为1,否则,将所述第二比较矩阵对应的元素记为0。
一些实施例中,所述三维引擎的功能测试方法基于自动化测试方式实现,所述自动化测试方式包括:响应于用户输入的测试命令,根据所述测试命令将预先构建的各类测试文件组合成业务用例,所述业务用例用于根据用户的测试需求对三维引擎测试的业务流程进行设置;执行所述业务用例实现如前述的方法。
一些实施例中,所述测试文件包括用于封装三维引擎测试中需重复调用的方法的流程方法文件、用于封装三维引擎测试中所需的工具方法的工具方法文件和用于封装三维引擎功能的基本操作的基本操作文件。
一些实施例中,所述三维引擎的功能测试方法基于手动测试方式实现,所述手动测试方式包括:响应用户输入的显示三维模型的指令,显示所述三维模型;响应用户输入的启动三维引擎的功能的指令,对三维模型进行处理;响应用户输入的截图指令,将所述三维模型被执行所述功能后的结果进行截图,以获取所述第一截图;接收用户上传的所述第一截图和所述第二截图;响应用户输入的功能判断指令,基于预先构建的比较工具,分别计算出所述第一截图的哈希值和所述第二截图的哈希值,并将两个哈希值进行比较,以确定所述功能是否正确。
第二方面,一种实施例中提供一种三维引擎的功能测试框架,包括:用例模块,用于根据用户输入的测试命令将预先构建的各类测试文件组合成业务用例,所述业务用例用于根据用户的测试需求对三维引擎测试的业务流程进行设置;测试数据模块,用于存储三维引擎测试用的数据和文件;用例管理模块,用于对构建好的用例进行分类管理;执行入口模块,用于响应于所述测试命令启动所述业务用例执行如前述的方法。
一些实施例中,所述测试文件包括:流程方法文件,用于封装三维引擎测试中需重复调用的方法;工具方法文件,用于封装三维引擎测试中所需的工具方法;基本操作文件,用于封装三维引擎的功能的基本操作,所述基本操作至少包括:鼠标左键点击、右键点击、左键拖拽、右键拖拽、中键拖拽、鼠标悬浮、中键滚动、左键双击、键盘敲击、键盘按下和键盘释放。
第三方面,一种实施例中提供一种三维引擎的功能测试设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如前述的方法。
第四方面,一种实施例中提供一种计算机存储介质,所述存储介质上存储有程序,该程序被处理器执行时实现如前述的方法。
根据上述实施例的方法,分别计算出第一截图和第二截图的哈希值后,将两个哈希值进行比较来确定功能是否正确,不仅降低了三维引擎的功能测试成本,又提高了三维引擎的功能测试效率。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。
另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。
本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。
发明人对现有技术进行研究后发现:一张图片是一个二维信号,其包含高频信息和低频信息,高频信息是指图片中亮度变化剧烈的区域,描述了细节信息,比如边缘;低频信息是指亮度比较小的区域,其描述了大范围的信息,比如一面墙;而人眼对于细节信息不是很敏感,实际上通过肉眼看低频信息已经是这张图的信息了,在三维引擎的功能测试中只需要对第一截图和第二截图的低频信息进行比对,这样既可以保障功能测试的准确性又能降低功能测试的成本。因而,本发明提出的三维引擎的功能测试方法将第一截图的哈希值和第二截图的哈希值进行比较以确定功能是否正确,哈希值是在对第一截图和第二截图进行降频处理后得到的,即本发明提出的方法实际上是利用两种图片的低频信息进行的比较,不仅降低了三维引擎的功能测试成本,又提高了三维引擎的功能测试效率。
请参考图1,在本发明一实施例中提供一种三维引擎的功能测试方法,包括:
S10:显示被调用的三维模型。
在应用时,可以通过调用支持WebGL的浏览器(比如:Firefox 4+,Google Chrome9+,Opera 12+等)来显示被调用的三维模型,可显示的文件格式包括:rvm、dgn、i.dgn、cel、dwg、dxf、ifc、dae、obj、fbx、stl、glb、gltf、3ds、jt、sat、igs、iges、CATPart、stp、step、3DXML、ipt、iam、prt、sldasm、sldprt、nwd、skp等;WebGL是一种3D绘图标准,WebGL使得用户在不使用插件的情况下在任何兼容的网页浏览器中更流畅地展示3D场景和三维模型,还能创建复杂的导航和数据视觉化;也可以通过专门开发的三维引擎客户端显示被调用的三维模型。
S20:启动三维引擎的功能,对三维模型进行处理,其中,三维引擎用于根据预设算法实现三维模型的创建和渲染。
一些实施例中,三维引擎的功能包括但不仅限于:模型树、导航盒、测量、火焰粒子、水波纹、图标添加、文字添加、盒子添加、隐藏、虚化、剖切、选中、缩放、鼠标操作、键盘操作和粒子系统等,其中,模型树是指将三维模型名称按照树状结构排列,类似目录结构;导航盒是用于分辨三维模型的东南西北上下等方向的工具;盒子添加是场景单独添加透明的模型大多用于标注的作用。
S30:在检测到处理完成后,获取第一截图,第一截图为三维模型被执行功能后的截图。
S40:获取预设的第二截图,第二截图为三维模型被执行正确的功能后的截图。
在对三维引擎的这些功能进行更新迭代时,需要对功能进行回归测试以确认修改没有引入新的错误或导致其他代码产生错误,以保障功能的准确性和稳定性,在一些实施例中,第一截图是指三维模型被执行更新迭代后的功能后的截图,第二截图为三维模型被执行更新迭代前的功能后的截图,可以通过手动或者自动的方式截取三维模型被执行更新迭代前的功能后的图像,第二截图被预存在本地或者云端等固定位置,当需要使用第二截图时可以根据指令找到该位置调取;图2示出了一三维模型被执行更新迭代前后的鼠标拖拽功能后的第二截图和第一截图;图3示出了另一三维模型被执行更新迭代前后的键盘按下和释放功能后的第二截图和第一截图。
S50:分别计算出第一截图和第二截图的哈希值,并将两个哈希值进行比较,以确定功能是否正确。
一些实施例中,通过哈希算法分别计算出第一截图和第二截图的哈希值,哈希值采用二进制形式表示,在图片相似性的判断中常用的哈希算法有以下几种:均值哈希算法、差异值哈希算法、感知哈希算法、小波哈希算法等。
一些实施例中,采用均值哈希算法分别计算出第一截图和第二截图的哈希值,并将两个哈希值进行比较,如图4所示,包括:
S51:分别将第一截图和第二截图缩小到相同大小,以得到缩小后的第一截图和缩小后的第二截图,这一步骤的作用是去除第一截图和第二截图的高频信息,只保留结构、明暗等低频信息,摒弃了不同尺寸、比例带来的图片差异的同时保留的低频信息又足以满足人的视觉要求。
S52:将缩小后的第一截图进行灰度转换,以得到测试灰度图。
S53:将缩小后的第二截图进行灰度转换,以得到标准灰度图。
S54:根据测试灰度图得到第一像素点矩阵和第一灰度平均值,第一像素点矩阵的行和列分别对应测试灰度图的高和宽,第一像素点矩阵的元素对应测试灰度图中像素的灰度值,第一灰度平均值为测试灰度图中所有像素的灰度值的平均值。
S55:根据第一像素点矩阵和第一灰度平均值得到第一比较矩阵,第一比较矩阵的高和宽与第一像素点矩阵相同,且第一比较矩阵的元素与第一像素点矩阵的元素一一对应,第一比较矩阵用于表征第一像素点矩阵中每个元素与第一灰度平均值的比较结果,将第一比较矩阵中的元素按照先行后列的方式进行排列可生成第一哈希值,第一哈希值为第一截图的哈希值。
一些实施例中,根据第一像素点矩阵和第一灰度平均值得到第一比较矩阵,包括:若第一像素点矩阵的元素大于第一灰度平均值,则将第一比较矩阵中对应的元素记为1,否则,将第一比较矩阵对应的元素记为0;
S56:根据标准灰度图得到第二像素点矩阵和第二灰度平均值,第二像素点矩阵的行和列分别对应标准灰度图的高和宽,第二像素点矩阵的元素对应标准灰度图中像素的灰度值,第二灰度平均值为标准灰度图中所有像素的灰度值的平均值。
S57:根据第二像素点矩阵和第二灰度平均值得到第二比较矩阵,第二比较矩阵的高和宽与第二像素点矩阵相同,且第二比较矩阵的元素与第二像素点矩阵的元素一一对应,第二比较矩阵用于表征第二像素点矩阵中每个元素与第二灰度平均值的比较结果,将第二比较矩阵中的元素按照先行后列的方式进行排列可生成第二哈希值,第二哈希值为第二截图的哈希值。
一些实施例中,根据第二像素点矩阵和第二灰度平均值得到第一比较矩阵,包括:若第二像素点矩阵的元素大于第二灰度平均值,则将第二比较矩阵中对应的元素记为1,否则,将第二比较矩阵对应的元素记为0。
S58:将第一哈希值和第二哈希值进行逐位比较,如果每一位都相同,则功能为正确,否则,功能为错误。
一些实施例中,将第一哈希值和第二哈希值进行逐位比较,若一位不同,则将比较结果记为1,否则,记为0;直到完成第一哈希值和第二哈希值的所有位的比较,以得到测试结果,测试结果为所有比较结果的累加值;若测试结果为0,则功能为正确。
应用时,可以将第一截图和第二截图按照需求缩小成相同的大小,但缩小后的图片的高和宽的像素值需一样,比如:8×8像素、16×16像素等,目前在使用过程中兼顾准确性和执行性能的情况下将第一截图和第二截图缩小到256×256像素比较稳定。
下面通过一个示例说明确定功能是否正确的流程:
1、将第一截图和第二截图缩小到256×256像素,缩小后的第一截图和缩小后的第二截图包含有65536个像素;
2、将缩小后的第一截图进行灰度转换得到测试灰度图,将缩小后的第二截图进行灰度转换得到标准灰度图,测试灰度图和标准灰度图均为65536级灰度;
3、根据测试灰度图得到第一像素点矩阵和第一灰度平均值,第一像素点矩阵的行和列均为256,第一像素点矩阵的元素对应测试灰度图中像素的灰度值,第一灰度平均值为测试灰度图中所有像素的灰度值的平均值;
4、根据第一像素点矩阵和第一灰度平均值得到第一比较矩阵,第一比较矩阵的行和列也均为256,且第一比较矩阵的元素与第一像素点矩阵的元素一一对应,第一哈希值为65536位,若第一像素点矩阵的元素大于等于第一灰度平均值,则将第一比较矩阵中对应的元素记为1,否则,将第一比较矩阵对应的元素记为0;比如:第一像素点矩阵中第2行第3列的像素点的灰度值是234,第一灰度平均值是211时,第一比较矩阵中第2行第3列的元素为1;第一像素点矩阵中第2行第1列的像素点的灰度值是134,第一灰度平均值是211时,第一比较矩阵中第2行第1列的元素为0;
6、根据标准灰度图得到第二像素点矩阵和第二灰度平均值,第二像素点矩阵的行和列均为256,第二像素点矩阵的元素对应标准灰度图中像素的灰度值,第二灰度平均值为标准灰度图中所有像素的灰度值的平均值;
7、根据第二像素点矩阵和第二灰度平均值得到第二比较矩阵,第二比较矩阵的行和列也均为256,且第二比较矩阵的元素与第二像素点矩阵的元素一一对应,第二比较矩阵用于表征第二像素点矩阵中每个元素与第二灰度平均值的比较结果,第二哈希值为65536位,若第二像素点矩阵的元素大于等于第二灰度平均值,则将第二比较矩阵中对应的元素记为1,否则,将第二比较矩阵对应的元素记为0;比如:第二像素点矩阵中第2行第3列的像素点的灰度值是230,第二灰度平均值是211时,第二比较矩阵中第2行第3列的元素为1;第二像素点矩阵中第2行第1列的像素点的灰度值是130,第二灰度平均值是211时,第二比较矩阵中第2行第1列的元素为0;
8、将第一哈希值和第二哈希值进行逐位比较,若一位不同,则将比较结果记为1,否则,记为0,直到完成第一哈希值和第二哈希值的所有位的比较,以得到测试结果,测试结果为所有比较结果的累加值;
10、若测试结果为0,则功能为正确;图5示出的是一三维模型被执行三维引擎的鼠标拖拽功能时的测试报告,其中均值哈希算法相似度为测试结果,由于测试结果为0,即三维引擎的该功能为正确;图6示出的是一三维模型被执行三维引擎的键盘操作功能时的测试报告,其中均值哈希算法相似度为测试结果,由于测试结果为7003,即三维引擎的该功能为不正确。
一些实施例中,三维引擎的功能测试方法基于自动化测试方式实现,如图7所示,自动化测试方式包括:
S100:响应于用户输入的测试命令,根据测试命令将预先构建的各类测试文件组合成业务用例,业务用例用于根据用户的测试需求对三维引擎测试的业务流程进行设置。
自动化测试是指从测试开始到测试结束为止所经过的一系列过程都不需要人工参与,通过将三维引擎的功能测试自动化,只需要响应用户输入的测试命令,就可以把人对功能的测试行为转化为由机器自动执行测试的行为,从而替代大量的手工测试操作,使得测试可以快速、反复的进行;一些实施例中,用例是用来设置为了达到“三维引擎功能测试的目标”而进行的一系列“有先后、有逻辑”的业务流程,是实现自动化测试的核心,合理的用例设计是保证自动化效益和实用性的关键,也直接决定了自动化脚本是否具备可扩展和可维护性。
一些实施例中,测试文件包括用于封装三维引擎测试中需重复调用的方法的流程方法文件、用于封装三维引擎测试中所需的工具方法的工具方法文件和用于封装三维引擎功能的基本操作的基本操作文件。
S110:执行业务用例实现如前述的方法。
一些实施例中,为了实现自动化测试方式自主研发了自动化测试工具,在进行测试之前需要先基于该工具进行各类测试文件(即自定义脚本)的编写,当用户需要进行自动化测试时,打开该工具的操作界面输入测试命令,测试命令至少包括三维模型和第二截图的存储地址、需测试的功能的描述等,在用户提交该测试命令后自动化测试工具根据测试命令,将预先构建的各类测试文件组合成业务用例,比如:当用户的测试命令是对存储在本地的一三维模型执行鼠标拖拽功能时,自动化测试工具将登陆浏览器和获取用户信息等流程方法文件、打开浏览器和均值哈希算法等工具方法文件以及鼠标左键点击和左键拖拽等基本操作文件组合成业务用例,执行该业务用例实现前述的自动化测试方法,在执行过程中用户可以看到实时处理信息,比如:是否打开了浏览器、是否对三维模型执行了该功能、测试结果是什么以及测试是否结束等等。
本发明提供的三维引擎的功能测试自动化方法由于是根据用户的需求将预先构建的各类测试文件组合成了业务用例,该业务用例更加的贴合用户的实际需求,更加的合理;并且该业务用例中可以包括多个功能的测试,也可以根据实际需求方便地进行各类测试文件的增加或更新,具备良好的可扩展性和可维护性,通过调用并执行业务用例可以实现前述的三维引擎的功能测试方法。
一些实施例中,三维引擎的功能测试方法基于手动测试方式实现,如图8所示,手动测试方式包括:
S200:响应用户输入的显示三维模型的指令,显示三维模型。
S210:响应用户输入的启动三维引擎的功能的指令,对三维模型进行处理。
S220:响应用户输入的截图指令,将三维模型被执行功能后的结果进行截图,以获取第一截图。
S230:接收用户上传的第一截图和第二截图。
S240:响应用户输入的功能判断指令,基于预先构建的比较工具,分别计算出第一截图的哈希值和第二截图的哈希值,并将两个哈希值进行比较,以确定功能是否正确。
在实际应用时,如果不具备将整个三维引擎的功能测试自动化的条件,也可以采用上述手动方式实现本发明提供的方法,下面以三维引擎的鼠标拖拽功能为例说明手动测试方式的操作流程:
1、手动调用浏览器或客户端显示三维模型;
2、手动启动三维引擎的鼠标拖拽功能,对该三维模型进行处理,比如:将鼠标移动至该三维模型上后将鼠标左键按住移动以实现对该三维模型的拖拽;
3、在完成预定的处理后,将三维模型被执行功能后的结果进行截图,以获取所述第一截图,比如:预定的处理为将该三维模型从坐标值为[892,797]的起点拖拽至坐标值为[283,-298]的终点,在将三维模型拖拽至该终点时释放鼠标左键完成处理,对拖拽后的三维模型截图得到第一截图,将第一截图进行存储;
4、手动打开比较工具的操作界面,将第一截图和第二截图上传至比较工具,比较工具可分别计算出第一截图的哈希值和第二截图的哈希值,并将两个哈希值进行逐位比较,以确定功能是否正确。
在本发明另一实施例中提供一种三维引擎的功能测试框架,如图9所示,包括:用例模块40,用于根据用户输入的测试命令将预先构建的各类测试文件组合成业务用例,业务用例用于根据用户的测试需求对三维引擎测试的业务流程进行设置,测试文件包括:流程方法文件,用于封装三维引擎测试中需重复调用的方法;工具方法文件,用于封装三维引擎测试中所需的工具方法;基本操作文件,用于封装三维引擎的功能的基本操作;测试数据模块50,用于存储三维引擎测试用的数据和文件;执行入口模块80,用于响应于测试命令启动业务用例执行如前述的方法。
一些实施例中,该框架还包括:业务模块10,用于封装三维引擎测试中需重复调用的方法;公共模块20,用于三维引擎测试中所需的工具方法;基础封装模块30,用于封装三维引擎功能的基本操作;用例管理模块60,用于对构建好的用例进行分类管理;配置模块70,用于对不同的环境进行配置。
一些实施例中,业务模块10是三维引擎功能测试的前置条件,其主要封装的是流程方法文件,如:进入浏览器时,首先需要登陆,然后获取用户信息等每次都需要使用到的方法;公共模块20封装了工具方法文件,如:打开和关闭浏览器、日志打印功能以及均值哈希方式等三维引擎功能测试中必要的方法;基础封装模块30封装了基本操作文件,三维引起的功能的基本操作至少包括:鼠标左键点击、右键点击、左键拖拽、右键拖拽、中键拖拽、鼠标悬浮、中键滚动、左键双击、键盘敲击、键盘按下和键盘释放等;业务模块10、公共模块20和基础封装模块30中所封装的各类文件都可以根据具体的业务需要进行更新迭代以及增删。
一些实施例中,用例管理模块60根据预设的管理策略对业务用例进行管理,可以根据需求选择适合的管理策略,比如:按业务模块分类管理、按测试层次分类管理或按用例类型分类管理等,本实施例中使用的是Unittest框架(Unittest框架是python自带的一种单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件)的测试套件TestSuite进行业务用例的管理,可以添加业务用例也可以添加业务用例集,可以方便灵活的满足测试需要。
一些实施例中,配置模块70可以对SIT环境、UAT环境和PRO环境等进行配置;SIT环境指系统集成测试,主要用于把两个已经测试过的单元组合成一个组件,对单元之间的接口进行测试;UAT环境是指用户验收测试环境,一般是对开发成果进行验收的环境;PRO环境是指生产环境,是最终交付的产品所运行的环境。
本发明提供的三维引擎的功能测试框架的具体实施例与三维引擎的功能测试方法的具体实施例相同,这里不再赘述。
在本发明另一实施例中提供一种三维引擎的功能测试设备,如图10所示,包括:存储器100、处理器200及存储在存储器100上并可在处理器200上运行的程序,处理器200执行程序时实现如前述的方法。
在本发明另一实施例中提供一种计算机存储介质,如图11所示,存储介质300上存储有程序,该程序被处理器200执行时实现如前述的方法。
以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。