Skip to content
🎨 作者:mikigo 📔 阅读量:

0、缩略语和关键术语定义

术语全称解释
自动化测试程序自动化测试程序自动化测试程序通常指的是使用Python、Shell、Java等语言编写的自动化测试代码,以实现自动执行测试用例的目的。
基于多个同类实体的抽取的概念,在面向对象的编程设计里面,类具有方法和属性,在自动化测试用例编写是用来将一类用例组织起来,称为用例类。
函数函数是一段具有一定功能的代码段。
断言断言判断用例是否符合预期。
串口线串口线通过串行接口传输数据的线材。
视频采集盒视频采集盒坊间也称视频采集卡,它可以将客户端的视频画面转发到服务端。在视频直播领域用得很多,比如将摄像机、手机等输出的视频信号采集并输入到电脑(直播的电脑),并实时转换成电脑可识别的数字数据、可编辑处理的视频数据文件、或可实时观看的视频流。

1、相关技术背景(背景技术),与本发明最相近似的现有实现方案(现有技术)

在基于操作系统的UI自动化业务逻辑自动化用例执行过程中,每执行一次自动化测试程序我们称为一次测试会话(以下简称session或会话),在每次会话中涉及一条或多条用例的执行,而每条用例又涉及多个操作步骤的执行,在整个自动化测试过程中,自动化程序是不能中断的,程序中断后,中断时正在执行的用例步骤会停止,后续的用例也不会执行。如果自动化测试程序中断后,手动的重新把自动化测试程序启起来,自动化用例又会从头开始执行。

然而,有一些自动化用例涉及与电脑重启的场景交互,也就是某条用例开始执行了一部分用例步骤,在中间某个步骤执行时需要重启电脑,电脑重新启动之后,我们就是需要自动化用例步骤紧接着重启时那个步骤继续开始执行,根据前面讲到的原因,我们需要一种有效的技术方案来解决这个问题。

1.1、与本发明相关的现有技术

1.1.1、现有技术的技术方案

现有的技术方案中,采用机器分离的方式进行自动化测试,能实现用例步骤在重启测试设备时中断等待后继续执行。测试时准备2台机器,1台作为服务器,1台作为测试机,服务器与测试机通过串口线和视频采集盒连接,串口线用于服务器控制测试机进行键鼠操作,视频采集盒用于将测试机上的实时画面转发到服务器上,自动化测试程序在服务器上执行,通过识别采集盒转发过来的画面,再通过串口线控制测试机进行用例步骤的执行。

在此过程中,若测试机重启,由于自动化测试程序是在服务器上执行,程序不会中断,只需要等待测试机重新启动之后,继续执行后续步骤即可。

1.1.2、现有技术的缺点

上述现有技术方案,核心逻辑是通过将自动化测试程序从测试机上面分离出来,放到服务器上执行,从而解决了重启机器程序中断的问题,缺点如下:

(1)环境部署困难,从需要的设备上就能看出来,比起在单台测试机上执行,多出了服务器、串口线、视频采集盒,它们之间需要进行连接部署、驱动运行,而这其中串口线的使用是具有一定技术门槛的,一旦出现问题非常不容易定位解决,无疑进一步增加了使用的难度。

(2)所需要的设备成本更高,很明显,多出来的好几个设备,特别的服务器,着实是一个不容忽视的成本。

(3)所有实现的用例场景比较单一,由于测试机上的画面是通过视频采集盒转发到服务器上,所有的逻辑判断都重度依赖于图像识别,这种相对单一的元素定位方案,是无法满足复杂用例场景需求的,特别是在基于Linux的国产操作系统上,实践证明,我们需要多种元素定位方案混合使用才能确保满足各种自动化测试用例场景,比如:基于Accessibility属性定位,基于UI设计的元素相对坐标定位等等。

2、本发明技术方案的详细阐述

2.1、本发明所要解决的技术问题

在对操作系统进行自动化测试的过程中,自动化程序遇到不得不中断的场景下,如重启场景,需要实现自动化用例步骤执行过程中重启机器,机器重新启动之后,能再次继续紧接着重启前的用例步骤执行的功能。

因此我们需要解决的技术问题是:在单机执行的情况下,如何在用例批量执行的过程中,能让自动化用例中间某个步骤在中断之后,还能延续中断前步骤继续执行的问题。

2.2、本发明提供的完整技术方案

本技术方案通过对自动化测试代码中执行到的函数进行动态添加执行标签,在每次会话过程中,只要执行到的用例步骤都会通过标签的形式记录此函数的执行状态,而标签字符串是通过一套组合算法对函数进行标记,从而确保每个函数标签全局唯一性。

以重启场景为例,整体运行逻辑如下:

首先,将自动化测试程序注册到操作系统开机自启服务中,这样只要操作系统开机,自动化测试程序就会自动执行起来。

然后,在一次自动化测试用例执行时,每个用例步骤为一个函数,用例步骤执行时通过标签记录此步骤已经被执行了,记录到执行记录文件里面,如果某个用例步骤涉及重启的操作,虽然当前自动化程序会中断,但是执行记录文件里面已经记录了重启之前执行到哪个步骤了。

最后,等重新启动之后,执行判断模块会读取执行记录文件里面的标签信息,如果自动化用例步骤所对应的函数已经存在执行记录文件中,说明这个用例步骤在重启之前已经执行过了,则直接跳过执行,继续判断下一个步骤,直到判断到某个用例步骤的标签不存在执行记录文件中,说明此用例步骤就是重启后应该紧接着执行的用例步骤,因此正常执行此用例步骤即可。

这里先不考虑用例断言,因为用例断言本质上也是一个用例步骤,只是通常是做一些值的对比判断,所以,为了容易理解,上述的用例步骤执行就已经包含了用例断言的概念。

图(1)用例步骤中重启中断后恢复执行的流程

2.2.1、注册开机自启服务

将自动化用例执行程序注册到开机自启服务中,确保用例执行过程中,机器重启后程序能自动的被拉起执行。

2.2.2、执行判断模块

执行判断模块负责在每个用例步骤执行时,读取执行记录文件,如果该用例步骤所对应的标签已经存在,说明此用例步骤被执行过,则跳过执行,反之,则正常执行。

2.2.3、执行记录文件

执行记录文件里面记录的是已经执行过的用例步骤标签,标签采用一套组合算法,将用例步骤的函数对象转换为唯一的字符串,即使在同一条用例中多次调用了相同的用例步骤函数,其对应的标签字符串也是不同的,确保用例中的每个步骤函数的标签字符串全局唯一性。

2.2.4、用例步骤函数标签字符串编码算法

由于用例步骤函数是可复用的,也就是说即使是在同一条测试用例里面,可能出现多个完全相同的用例步骤函数的调用,因此我们需要有一种算法来确保每个步骤所对应的标签字符串的唯一性,而且标签字符串还应该具有可逆性,就是说当执行判断模块读取到某个标签字符串时,通过解码能快速的知道它是否为当前执行的用例步骤函数,这就是可逆性。

用例步骤在执行时,通过以下 5 个关键信息进行编码组合:

(1)用例代码的文件路径;

(2)用例类的类名;

(3)用例函数的函数名;

(4)用例步骤的函数名称;

(5)用例步骤函数所在文件的代码行数;

根据以上 5 个关键信息,经过编码组合后就可以生成一个具有唯一性、可逆性的标签字符串。

这里简单说明一下上述 5 个关键信息之间的关系:

(1)一条自动化测试用例是写在某个用例文件(也可称为用例脚本文件或简称脚本文件)里的,用例文件的路径就包含了文件所在系统中的路径和文件名称。

(2)基于面向对象的软件开发思想,在用例文件中,会以类的形式进行用例代码的编写,在类里面所定义的函数就是测试用例函数,而在测试用例函数里面是调用的用例步骤函数(方法)。

(3)用例步骤函数所在文件的代码行数是用于区分在用例函数中,多次调用相同的用例步骤函数的情况。

图(二)用例步骤函数标签字符串编码算法几个关键信息的关系

代码示例如下:

python
# test.py
from page import Page

class MyTest:
    
	def test_001(self):
        
		Page.click_some_element()
        sleep(1)
		Page.click_some_element()
  • test.py 是用例文件,它在操作系统中是存在一个路径的;

  • MyTest 是用例类类名;

  • test_001 是用例函数的函数名称;

  • click_some_element 是用例步骤函数,它来源于 page 模块的 Page 类,而且可以看出它在第 8 行和第 10 行都有调用;

2.2.5、用例步骤中断后重启

如果用例步骤中某个步骤涉及重启系统,此用例在执行开始时同样会被记录到执行记录文件中,重新启动之后,由开机自启服务将自动化测试程序自动拉起,根据前面执行判断模块的描述可知,会直接从重启前的用例步骤的下一个步骤开始执行。

这样,就实现了在用例步骤里面重启机器也能完成整个测试用例执行的功能。

2.3、本发明技术方案带来的有益效果

(1)解决了自动化测试用例步骤执行过程中,当自动化程序被中断如重启机器后,恢复中断前用例步骤继续执行的问题;

(2)涉及重启设备交互的诸多性能、稳定性测试场景可以摆脱手工或部署多端测试的束缚,提升该类场景测试的自动化程度并降低实现成本;

2.3、本发明技术方案带来的有益效果

(1)解决了自动化测试用例步骤执行过程中,当自动化程序被中断如重启机器后,恢复中断前用例步骤继续执行的问题;

(2)涉及重启设备交互的诸多性能、稳定性测试场景可以摆脱手工或部署多端测试的束缚,提升该类场景测试的自动化程度并降低实现成本;

2.4、针对上述技术方案,是否还有替代方案同样能完成发明目的

3、本发明的技术关键点和欲保护点是什么

(1)提供一种函数(用例步骤)对象的执行标签字符串编码组合方法;

(2)提供一种在单机执行的情况下,自动化程序被中断后恢复中断前执行步骤的解决方案;

4、附件:

参考文献(如专利/论文/标准等)

机器分离自动化测试方案:

https://zhuanli.zhangqiaokeyan.com/patent_6_106/06120113808001.html

https://juejin.cn/post/7161999069433298974