介绍

KunLun AutoTest是基于命令行的测试自动化平台。

平台通过终端连接待测产品(DUT), 发送命令行指令对产品进行激励, 并自动采集产品的反馈日志, 用户根据测试业务需要对反馈的日志进行分析、判断, 并决策下一个动作(继续发送或是停止测试), 如此反复, 直到所有的命令行指令发送完毕。

平台采用WEB形式的操作界面, 自动保存测试全流程日志, 同时提供接口函数, 支撑用户快速二次开发。

测试主界面

../_images/%E4%BB%8B%E7%BB%8D1.png

上图展示的是 Container 工位界面。

平台采用三层结构表述测试环境架构, 分别是: Station(工站)->Container(工位)->Connection(连接) , 一个工站可以包含多个工位, 一个工位可以包含多个连接。

Station工站 是指一个测试工序, 一台物理测试主机可以配置若干个相同的或是不相同的测试工序, 不同的测试工序完成不同的测试业务。

Container工位 是指完成测试业务的具体执行单元(任务), 一个测试工序包含若干个测试工位, 多个测试工位可以并行执行多个测试任务, 即同时测试多个产品。

Connection(连接) 是指一个虚拟终端, 一个测试工位可以包含多个连接, 以满足产品多元化测试的需求。 例如: 手机测试中需要使用程控电源, 综测仪, 蓝牙连接模组, 声音测试模组等, 可以建立多个连接, 连接之间相互配合、协同完成整个测试流程。

测试用例示例

通常一个测试用例包含:

  1. 配置测试环境, 连接产品

  2. 发送一系列测试命令行

  3. 对产品反馈的日志进行解析, 判断测试结果是通过或是失败

  4. 重复第2步与第3步

  5. 关闭连接, 清理测试环境

假设有如下测试用例: 进入Python交互界面, 通过 sys.platform 查询当前主机的操作系统类型, 并打印结果, 若结果不为 linux, 测试失败。反之, 测试通过:

from kunlun import lib

log = lib.get_event_logger()

class Test:
    def test_01(self):
        uut = lib.cn.ref
        uut.send("python\r", expect=">>>", timeout=10)
        uut.send("import sys\r", expect=">>>", timeout=10)
        uut.send("sys.platform\r", expect=">>>", timeout=10)
        log.debug(uut.buf)
        if "linux" not in uut.buf:
            raise Exception("platform should be [linux], go to fail")
        uut.send("exit()\r", expect="$", timeout=10)

以上为测试用例的代码实现, 接下来先对代码进行分段解释。

  1. 从平台导入接口函数库:

    from kunlun import lib
    
  2. 实例化 事件日志, 获得event log实例, 后续可用 log.debug() , log.error() 等记录事件日志:

    log = lib.get_event_logger()
    
  3. 写一个标准的pytest用例, 用例名必须以 test_ 开头:

    def test_01(self):
    
  4. 在用例中打开一个终端(连接):

    uut = lib.cn.ref
    
  5. 通过连接send()下发指令, 举例进入python交互界面:

    uut.send("python\r", expect=">>>", timeout=10)
    uut.send("import sys\r", expect=">>>", timeout=10)
    

6. send()方法完成后, 对应的日志输入将保存在 uut.buf 中, 可使用 log.debug() 将日志打印至 事件日志 EVENT界面:

uut.send("sys.platform\r", expect=">>>", timeout=10)
log.debug(uut.buf)
  1. 对日志进行分析, 以判断测试是否通过, 若失败, 触发异常, 测试将停止:

    if "linux" not in uut.buf:
        raise Exception("platform should be [linux], go to fail")
    

需要说明的是, 用户可以使用 raise 触发异常, 也可以采用断言 assert 触发异常:

assert "linux" in uut.buf, "platform should be [linux], go to fail"
  1. 清理测试环境, 回到虚拟终端主界面:

    uut.send("exit()\r", expect="$", timeout=10)