接口函数
模拟键盘操作
可以发送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 后, 可以使用实例的以下几种属性:
lib.cn.ref.open():打开连接. 需要说的是: 当第一次调用连接时, 会自动调用open()lib.cn.ref.close():关闭连接lib.cn.ref.send(): 向连接传递命令行.lib.cn.ref.buf:保存lib.cn.ref.send()语句发送后, 待测产品反馈的日志。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 , 并期望在 timeout 的 10 秒钟内, 收到字符串 >>> 。
若收到, 此语句正常完成, 产品反馈的日志将以字符串形式保存在 lib.cn.ref.buf 中, 然后执行下一条语句。
若未收到字符串 >>>, 则触发异常(用户可以使用 try...except... 捕获此异常)。
需要说明的是:
`expect可以接受列表list, 若expect为列表时, 当平台收到列表中的任意一元素时,uut.send()语句执行完成, 收到的元素保存在uut.phraselib.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() 支持传入如下参数:
options: 备选答案, 是一个列表, 例如["12345", "678990"]。若传入, 则网页会弹出一个单项选择题对话框, 若不设置, 则弹出一个填空题对话框。image: 问题描述图片, 是一个字符串, 例如"demo\bee.jpg"。若传入, 则弹出的对话框会展示图片信息, 图片高度建议是320px。visible: 输入内容可视, 默认为True。若设置为False, 则用户输入内容显示为*号, 常用于密码输入等场景。multiple: 多选题, 默认为False。若设置为True, 则网页弹出一个多项选择题。当options未设置时,multiple无效。privilege: 插队, 默认为False。多Container工位提问, 遵循FIFO先进先出原则。若设置为True, 将插队至队列的第一位。timeout: 超时, 默认为3600秒。若在超时时间内, 用户未响应问题, 则触发异常。tips: 小提示, 默认为"", 可以增加一些提示性字符串。
lib.ask_questions()
此接口函数提供一个用户交互方法, 调用此函数后, 网页界面将弹出对话框, 用户可以在对话框同时应答多个问题, 并返回答案(列表).
使用示例:弹出对话框, 要求应答多个问题:
ans = lib.ask_questions(["请输入序列号SERIAL: ", "请输入DUTTYPE: ", "请输入员工工号:"], timeout=60 * 3)
答案将保存在 ans 中。
需要说明的是:lib.ask_questions() 支持传入如下参数:
image: 问题描述图片, 是一个字符串, 例如"demo\bee.jpg"。若传入, 则弹出的对话框会展示图片信息, 图片高度建议是320px。privilege: 插队, 默认为False。多Container工位提问, 遵循FIFO先进先出原则。若设置为True, 将插队至队列的第一位。timeout: 超时, 默认为3600秒。若在超时时间内, 用户未响应问题, 则触发异常。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, label5version1, version1, version3, version4, version5str1, str2, str3, str4, str5, str6
lib.get_mode()
lib.get_mode() 返回当前测试的模式, 值为 PRODUCT 或是 DEVELOP
mode = lib.get_mode()
lib.get_sequence_definition()
用此实例编排测试序列。
通过设置
parallel=True可以实施并行测试策略. 被设置的step将与下一步并行测试.通过设置
cycle_time=60 * 5可以实施按时间循环测试策略。通过设置
cycle_count=10可以实施按次数循环测试策略。
lib.add_measure()
在测试代码中, 使用接口函数, 可以在MEASURE窗口增加一个measure项目, 示例如下:
lib.add_measure("TEST_MEASURE1", value=3, low=1, high=4)
需要重点说明的是: 参数 value , low , high 的值可以为字符串数字, 接口函数将会将字符串数字自动转为 float 型.
双击measure项目, 可以得到该项目的线性图。