测试开发

kunlun-data文件夹

首次安装Kunlun平台后, 执行 kunlun start , 平台将自动创建 ~\kunlun-data 文件夹, 用户也可以自行创建此文件夹。

~\kunlun-data 包含以下文件或文件夹.

  1. db.sqlite3 :数据库文件, 保存测试记录.

  2. logs :测试日志文件夹, 保存测试过程中产生的测试日志, 以及保存一些临时文件.

定制用户界面

用户可以通过以下方式将 测试程序示例 下载到 ~\kunlun-data 文件夹

cd ~\kunlun-data
git clone git@gitee.com:robinwu0607/kunlun_scripts_demo.git
mv kunlun_scripts_demo kunlun_scripts
  • configs 中包含界面定制代码.

  • demo 中包含演示测试代码.

../_images/hostname.png

用于演示的 autotest.py 文件的内容示例如下, 用户可以根据业务需要进行增加、修改或是拷贝:

def main():
    return [
        {
            'name': 'ST1',
            'description': 'X客户ST1测试',
            'image': 'assets/server.png',
            'esop': 'http://www.baidu.com',
            'container': [
                {
                    'name': 'DUT01',
                    'py_path': 'demo/kunlun/test_st1.py::Test::test_st1',
                    'connection': [
                        {'name': 'INFO', 'type': 'info'},
                        {'name': 'EVENT', 'type': 'event'},
                        {'name': 'REF', 'type': 'session', 'col': 6},
                        {'name': 'CPU', 'type': 'session', 'col': 6},
                        {'name': 'STEP', 'type': 'step'},
                        {'name': 'MEASURE', 'type': 'measure'},
                    ],
                },
            ],
        }
    ]

需要注意的是:每次对 autotest.py 进行修改, 必须使用 kunlun start 重启服务, 修改后的内容才会生效.

py_path 的路径是入口函数, 遵循pytest的标准路径.

开发者模式与生产模式

在测试主界面, 用户可以自由切换 生产模式开发模式 (默认为 生产模式 ), 平台后台将根据选择的模式, 自动处理调用 kunlun_scripts 或是 develop 文件夹下测试代码.

../_images/product-mode.png ../_images/develop-mode.png

需要强调的是:每次页面刷新后, 测试模式将会默认切换至 生产模式 .

测试代码开发方案

用户的代码存放于 ~\kunlun-data\kunlun_scripts 下.

给开发者建议:

  1. 用户项目下的文件夹与文件, Python代码开发规范参考PEP8规范, PEP8链接为: https://www.python.org/dev/peps/pep-0008/

  2. 用户项目下的每一个文件夹, 都包含文件 __init__.py .

  3. 用户项目文件夹的名称与实际项目名称保持一致.

  4. 使用 git 等版本工具管理测试代码.

基于不同的测试需求与目标, 用户可以采用快速开发方案或是测试序列编排方案.

小型项目快速开发

建议采用快速开发方案的是:

  1. 相对独立的项目(较少与其他项目复用代码).

  2. 测试命令行小于或等于20条的项目.

快速开发方案的演示代码可以参考 demo/kunlun/test_st1.py::Test::test_st1 .

以下截取部分代码片段进行说明:

def test_st1(self):
    container_name = lib.get_container_name()
    log.debug(container_name)
    lib.set_display1("机型: 1234567890123456")
    lib.set_display2("料号: 1234567890123456")
    lib.set_display3("Slot ID: 1234567890123456")
    lib.add_test_data(sernum="1234567890", duttype="DEMO", area="DEMO")
    uut = lib.cn.ref
    uut.open()
    start_time = time.time()
    count = 0
    while time.time() - start_time < 1:
        count += 1
        lib.set_display4(f"测试次数: {count}")
        log.debug(f"第{count}次测试")
        uut.send("python3\r", expect=">>>", timeout=10)
        uut.send("import sys\r", expect=">>>", timeout=10)
        uut.send("sys.platform\r", expect=">>>", timeout=10)
        uut.send("exit()\r", expect=[">", "$"], timeout=10)
        lib.add_measure("TEST_TIME", value=1, low=1, high=1)
    return

大型项目测试编排

建议采用测试序列编排方案的是:

  1. 大型项目的子项目(较多与其他项目复用代码).

  2. 持续演进的项目.

  3. 需要实施较多测试策略的项目.

  4. 测试命令行大于20条的项目.

测试序列编排方案的演示代码可以参考 demo/kunlun/test_st1.py::Test::test_st1 .

以下截取部分代码片段供参考:

def test_st1(self):
   seq = lib.get_sequence_definition('ST1 Sequence')
   seq.add_step(self.scan_sernum, name='Scan Sernum')
   seq.add_step(self.test_case01, name='Test Case 1')
   seq.add_step(self.test_case02, name='Test Case 2')
   seq.run()

需要注意的是: 最后需要调用 seq.run() 执行测试序列.

测试用例格式

  1. 测试用例必须是pytest的标准格式, 用例名必须以 test_ 开头.

  2. 测试用例必须使用allure的修饰器, 否则不会被识别到, 以下是必须包含的修饰器示例, 共计5个:

    @allure.epic('DEMO项目')
    @allure.feature('产线测试')
    @allure.story('老化测试')
    class Test:
    
        @allure.title('守护程序')
        @allure.id('burn_daemon')
        def test_01(self):
            # 省略测试用例代码
            pass
    

导入其他pip依赖包

用户代码中如导入其他依赖, 直接使用 pip install 安装对应依赖包即可.