接口函数

模拟键盘操作

可以发送ASCII码模拟键盘操作, 示例代码如下:

uut.send(lib.CTRL_C, expect="$", timeout=10)
uut.send(lib.ESC, expect="$", timeout=10)

可用的清单如下:

lib.CTRL_A  # 键盘ctrl + 字母A键, 以下组合键意义相同.
lib.CTRL_B
lib.CTRL_C
lib.CTRL_D
lib.CTRL_E
lib.CTRL_F
lib.CTRL_G
lib.CTRL_H
lib.CTRL_I
lib.CTRL_J
lib.CTRL_K
lib.CTRL_L
lib.CTRL_M
lib.CTRL_N
lib.CTRL_O
lib.CTRL_P
lib.CTRL_Q
lib.CTRL_R
lib.CTRL_S
lib.CTRL_T
lib.CTRL_U
lib.CTRL_V
lib.CTRL_W
lib.CTRL_X
lib.CTRL_Y
lib.CTRL_Z
lib.ESC     # 键盘Escape按键, 即ESC键
lib.UP      # 方向键, 向上
lib.DOWN    # 方向键, 向下
lib.RIGHT   # 方向键, 向右
lib.LEFT    # 方向键, 向左

lib.VERSION

获取当前KunLun AutoTest的版本信息, 例如: v25.12.0 .

lib.USERNAME

获取当前测试电脑的登入用户名信息, 例如: lenovo .

lib.HOSTNAME

获取当前测试电脑的名称信息, 例如: desktop1tp185d , 需要说明的是: 这个名称是”修正”后的名称.

lib.DATA_PATH

获取当前kunlun-data的绝对路径, 即 ~/kunlun-data

lib.SCRIPT_PATH

获取当前开发模式的测试程序所在的绝对路径。

即: ~/kunlun-data/kunlun_scripts .

lib.TEST_PATH

获取当前测试的日志所在的绝对路径+当前测试时间戳, 它并不是一个路径, 它的作用是: 用户可以拷贝自定义的文件到日志的路径下, 方便在Test Data页面下载。

例如: ~/kunlun-data/logs/hostname/FT-DUT01/2020/10/01/20201001-120100-FT-DUT01 .

lib.py

一个字典, 保存着一些参数供用户使用.

lib.cn

lib.cn 是一个连接池, 保存着用户在 autotest.py 中定义的所有连接。

获取连接 lib.cn.ref 后, 可以使用实例的以下几种属性:

  1. lib.cn.ref.open() :打开连接. 需要说的是: 当第一次调用连接时, 会自动调用open()

  2. lib.cn.ref.close() :关闭连接

  3. lib.cn.ref.send() : 向连接传递命令行.

  4. lib.cn.ref.buf :保存 lib.cn.ref.send() 语句发送后, 待测产品反馈的日志。

  5. lib.cn.ref.capture() :对 lib.cn.ref.buf 进行解析, 获取想要的字符串片段。

需要强调的是:lib.cn.ref.send() 是传递命令行至待测产品UUT的唯一方式, 使用方法如下:

lib.cn.ref.send("python\r", expect=">>>", timeout=10)

对此语句的解释:通过 lib.cn.ref.send 发送命令行 python , 并带回车符 \r , 并期望在 timeout10 秒钟内, 收到字符串 >>> 。 若收到, 此语句正常完成, 产品反馈的日志将以字符串形式保存在 lib.cn.ref.buf 中, 然后执行下一条语句。 若未收到字符串 >>>, 则触发异常(用户可以使用 try...except... 捕获此异常)。

需要说明的是:

  • `expect 可以接受 列表list, 若 expect列表 时, 当平台收到 列表 中的任意一元素时, uut.send() 语句执行完成, 收到的元素保存在 uut.phrase

    lib.cn.ref.send("dir\r", expect=[">", "#", "$"], timeout=60)
    if '$' in lib.cn.ref.buf:
        raise Exception("Got '$', go to fail")
    
  • lib.cn.ref.send() 前会自动清空 lib.cn.ref.buf 内容, lib.cn.ref.send() 完成后, 收到的所有字符会自动保存在 lib.cn.ref.buf 。此例中 lib.cn.ref.send() 完成后, 若使用 log.debug(lib.cn.ref.buf) , 将在事件日志窗口打印出如下字符:

    python
    Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 08:53:46) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  • lib.cn.ref.capture 可以快速截取 lib.cn.ref.buf 中用户想要的字符串, 并支持 正则表达, 其用法如下:

    # 语法说明
    user_string = lib.cn.ref.capture(start_string, end_string="\n")
    # 例如: 想要获取Python的版本(此例中, 版本为: 3.7.8 )
    version = lib.cn.ref.capture("Python")
    

lib.ask_question()

lib.ask_question() 提供一种用户交互方法, 调用此接口函数后, 网页界面将弹出对话框, 用户可以在对话框应答一个问题, 并返回答案(字符串).

典型应用场景:弹出对话框, 要求用户输入产品的序列号:

ans = lib.ask_question("请输入序列号SERIAL: ", timeout=60 * 3)

答案会保存在 ans 中。

需要说明的是:lib.ask_question() 支持传入如下参数:

  1. options : 备选答案, 是一个列表, 例如 ["12345", "678990"]。若传入, 则网页会弹出一个 单项选择题 对话框, 若不设置, 则弹出一个 填空题 对话框。

  2. image : 问题描述图片, 是一个字符串, 例如 "demo\bee.jpg"。若传入, 则弹出的对话框会展示图片信息, 图片高度建议是320px。

  3. visible : 输入内容可视, 默认为 True。若设置为 False, 则用户输入内容显示为 * 号, 常用于密码输入等场景。

  4. multiple : 多选题, 默认为 False。若设置为 True, 则网页弹出一个 多项选择题。当 options 未设置时, multiple 无效。

  5. privilege : 插队, 默认为 False。多 Container工位 提问, 遵循 FIFO先进先出 原则。若设置为 True, 将插队至队列的第一位。

  6. timeout : 超时, 默认为 3600 秒。若在超时时间内, 用户未响应问题, 则触发异常。

  7. tips : 小提示, 默认为 "" , 可以增加一些提示性字符串。

lib.ask_questions()

此接口函数提供一个用户交互方法, 调用此函数后, 网页界面将弹出对话框, 用户可以在对话框同时应答多个问题, 并返回答案(列表).

使用示例:弹出对话框, 要求应答多个问题:

ans = lib.ask_questions(["请输入序列号SERIAL: ", "请输入DUTTYPE: ", "请输入员工工号:"], timeout=60 * 3)

答案将保存在 ans 中。

需要说明的是:lib.ask_questions() 支持传入如下参数:

  1. image : 问题描述图片, 是一个字符串, 例如 "demo\bee.jpg"。若传入, 则弹出的对话框会展示图片信息, 图片高度建议是320px。

  2. privilege : 插队, 默认为 False。多 Container工位 提问, 遵循 FIFO先进先出 原则。若设置为 True, 将插队至队列的第一位。

  3. timeout : 超时, 默认为 3600 秒。若在超时时间内, 用户未响应问题, 则触发异常。

  4. tips : 小提示, 默认为 "" , 可以增加一些提示性字符串。

需要强调的是: lib.ask_questions()lib.ask_question() 共享同一个 FIFO队列

lib.set_display1/2/3/4/5/6()

lib.set_display1/2/3/4/5/6() 可以设置任意信息, 鼠标在container面板上悬停时将展示display1/2/3/4/5/6的内容.

lib.set_step_name()

lib.set_step_name() 设置当前测试项目名称, 若测试项FAIL, 测试记录会自动用此名称作为测试失败项, PASS则不记录。 使用示例:

lib.set_step_name("run cpu test")

lib.get_container_name()

lib.get_container_name() 返回当前的测试工位名称。 使用示例:在 FT:DUT01 上点击开始测试, 返回值为字符串 FT:DUT01

container_name = lib.get_container_name()

lib.add_test_data()

lib.add_test_data() 可以为产品做测试记录。

测试过程中, 使用此接口函数记录产品信息, 测试完成后, 根据测试结果成功或是失败, 自动记录一笔 PASS 或是 FAIL

lib.add_test_data(sernum=serial, duttype=duttype, area="FT")

需要强调的是: 此接口函数至少需要传入3个参数, 它们是: sernum 产品条码, duttype 产品类型, area 测试工序名称。

需要说明的是:此接口函数还支持传入更多参数, 以便帮助用户记录更多信息, 它们是:

  • label1, label2, label3, label4, label5

  • version1, version1, version3, version4, version5

  • str1, str2, str3, str4, str5, str6

lib.get_mode()

lib.get_mode() 返回当前测试的模式, 值为 PRODUCT 或是 DEVELOP

mode = lib.get_mode()

lib.get_sequence_definition()

用此实例编排测试序列。

  1. 通过设置 parallel=True 可以实施 并行测试 策略. 被设置的step将与下一步并行测试.

  2. 通过设置 cycle_time=60 * 5 可以实施 按时间循环测试 策略。

  3. 通过设置 cycle_count=10 可以实施 按次数循环测试 策略。

lib.add_measure()

../_images/add_measure1.png

在测试代码中, 使用接口函数, 可以在MEASURE窗口增加一个measure项目, 示例如下:

lib.add_measure("TEST_MEASURE1", value=3, low=1, high=4)

需要重点说明的是: 参数 value , low , high 的值可以为字符串数字, 接口函数将会将字符串数字自动转为 float 型.

双击measure项目, 可以得到该项目的线性图。

../_images/add_measure2.png