TreeATE Dev开发指南

Easter79
• 阅读 766

TreeATE系统架构

在基于TreeATE开发自动化测试工程之前,先了解一下TreeATE的整体架构。如下图所示:
TreeATE Dev开发指南

TreeATE借鉴了Chrome的多进程设计思路,支持并行化测试。每个独立的测试进程由“Test Engine”承接。 TreeATE(GUI)是向工厂用户提供的HMI(人机交互界面),详见博客《开始使用TreeATE》。
“Test Engine”是TreeATE的核心,向下负责管理不同设备驱动,对接MES系统、测试结果输出(数据库)、图形化人机界面插件,向上接受不同种语言的测试用例(当前版本支持QtScript(JavaScript)和Python)和测试参数配置等数据。
而TreeATE Dev(以下简称Dev)就是本文需要介绍的重点了。通过Dev可以编辑测试参数配置文件和开发测试用例。当然像上面提到的各种组件需要通过QT进行开发,详情的请关注TreeATE专栏,找到TreeATE组件或插件开发指南。

新建测试工程

打开Dev有2种方式,一种是在安装目录下找到TreeATEDev.exe,另一种是选择TreeATE的菜单“测试工程”->“开发”即可。在第二种打开方式下,如果TreeATE有已加载的测试工程,则无法新建,仅是修改当前打开的测试工程。

  1. 点击菜单“Project”->“New”,出现New Project对话框;
  2. 在New Project对话框中先选择好测试工程的默认工作路径,再输入测试工程名称(名称不能有空格);
  3. 点击OK确认新建测试工程。

在“Project files”窗口中可以看到,Dev系统自动添加了3个文件,后缀分别是:

  • tp:测试工程组织配置文件。测试套和测试项的参数、测试顺序都在该文件中存储。
  • tpx:测试工程公共配置文件。测试工程的公共配置,是否需要支持并行测试等配置都在此。
  • py/js:测试用例脚本文件py或js文件。
    TreeATE Dev开发指南

导入测试组件

测试工程依赖的各种组件,在这里统称为测试组件。例如组件TA_MsgBox(测试过程中的提示框,参见《组件:TA_MsgBox接口说明》),找到组件所在位置,选择“Import”按钮或菜单“Project”->“Import”,在对话框"Import Files"选择Lib files(*.dll *.js *.py)选项,再选择需要的组件导入。导入后,可以在“Project files”窗口中看到被导入的组件都放在"libs"文件夹中。
TreeATE Dev开发指南

为了在测试时向用户提示更为友好,MsgBox中可以显示自定义的图片,目前支持jpg/png/gif三种格式。
图片也可以通过Dev系统导入到测试工程中,在导入文件的对话框“Import Files”选择Images选项,再选择图片文件导入。导入后,可以在“Project files”窗口中看到被导入的图片都放在"images"文件夹中。

在窗口“Project files”里选中组件文件名,可以查看组件的函数;如果是图片,可以快速预览;如是安装TreeATE的接口开发的DLL组件,可以显示组件的函数和参数名。

TreeATE Dev开发指南 TreeATE Dev开发指南

配置测试工程

测试工程配置分为2个部分:配置tpx文件和tp文件2部分。

配置tpx文件

在窗口“Project files”里选中后缀为tpx的工程配置文件,将会在“Property”窗口中显示测试工程可以配置的如下信息:

  • Project Version:测试工程版本号,自定义字符串的版本格式。
  • Project Name:测试工程名。
  • Description:测试工程描述信息。
  • Regex of the barcode:测试工程对应的被测产品条码正则表达式规则。
  • Loop counts:测试工程整体循环次数。
  • 2个选项选中为生效,分别表示为测试当次失败后则后续未开始测试的项不再测试(即停止)和循环测试中遇到有测试失败时停止后续的循环测试。
    TreeATE Dev开发指南

以上内容可以直接编辑和修改,记得及时保存(Ctrl+S)。紧接着是下面可编辑内容:
TreeATE Dev开发指南

  • 当前测试工程依赖的界面插件:该表格可以添加多个界面插件,点击鼠标右键选择弹出菜单“Insert”。在Name栏中输入界面插件的对象名称,在Lib栏中输入dll文件名称(不带路径)。例如添加GUI_TA_MsgBox对话提示框界面插件,Name:msg,Lib:GUI_TA_MsgBox.dll。
  • 测试工程并行化配置:TreeATE支持简单的测试工程级并行化测试。例如需要2个testdemo.tp测试工程并行测试,在该表格中点击鼠标右键选择弹出菜单“Insert”,在Name栏中输入可以区分的名称(分别输入Demo1和Demo2),在File栏中输入相同的testdemo.tp即可。按照以上操作后TreeATE中会显示如下结构(在TreeATE中加载该测试工程):
  • Demo1
    • TestSuite1
      • Item
    • TestSuite2
  • Demo2
    • TestSuite1
    • TestSuite2

配置tp文件

在“Project files”窗口选中tp文件,将会在“Property”窗口中显示如下:
TreeATE Dev开发指南

  • 测试组件:可在此添加和删除测试工程所需的测试组件。Object栏((图中第1列))为对象名称(等同于JavaScript的变量名称),测试用例中将会用到组件对象名称。“Library file name”(图中第2列)为组件文件名,例如TA_MsgBox.dll。在Example附带的测试工程例子中ta为TA_MsgBox组件的对象名(定义好后尽量不要变更)。
  • 公共参数:是指大部分测试项需要共用的参数定义区。可在此添加和删除测试工程所需的公共参数。有参数名称(Parameter name图中第1列,等同于JavaScript的变量名称)、参数(图中第2列)对应的默认值、参数描述(图中第3列)。

配置测试用例

在配置好测试工程信息后,就开始编辑测试用例了。先了解TreeATE测试用例的组织规则运行规则读取配置参数规则

组织规则

第一级为测试工程,第二级为测试套,第三级为测试项。一个测试工程中可以包含多个测试套,一个测试套中可以包含多个测试项,反向包含不可以。

  • 测试工程
    • 测试套
      • 测试项

TreeATE Dev开发指南

运行规则

整体的运行顺序按照组织结构的顺序自上而下。测试套和测试工程都有setup_teardown_ 为前缀的接口,测试项仅以test_ 为前缀的接口。以Example中的TestDemo为例,测试运行顺序如下:

setup_testdemo()     
setup_suite1()   
test_test1() 
// 运行其他 test_ 的测试项
teardown_suite1()
// 运行其他测试套
teardown_testdemo()      

注: 以上接口函数返回 0 表示测试成功,反之测试失败或异常。
TreeATE Dev开发指南

读取配置参数规则

配置参数分测试工程公共参数和测试单元的参数。测试工程公共参数所在位置已在前面配置tp文件中提到。测试单元参数是紧随测试单元的,例如在Example中的TestDemo测试工程,可以看到Name1和Name2两列,Name1和Name2就是测试单元的参数名称,下面对应的内容就是参数值。
规则: 测试运行时先查找本测试单元内是否有该参数,如果没有就查找上一级是否有,一直到顶级的测试工程公共参数。如果都没有,运行时将会产生运行异常(在TreeATE中是黄色状态提示)。
TreeATE Dev开发指南

编辑测试项

在“Edit”->"Test Item"菜单中或者鼠标右键弹出菜单中可以编辑测试项。

  • “Add Sub Item”:需要添加子项时选择。
  • “Insert Item”:插入项目时选择。
  • “Remove Item”:删除测试项时选择,需要鼠标右键点击在被删除的测试项上。
  • “Inser Parameter”:插入测试项的参数(列表示)。
  • “Remove Parameter”:删除测试项的参数(列表示),需要鼠标右键点击在被删除的参数上。
  • 双击鼠标左键修改对应的内容,例如测试项名称和描述。
    TreeATE Dev开发指南

调整测试项的组织(执行)顺序

在“Edit”->"Test Item"菜单中或者鼠标右键弹出菜单中找到“Up Item”和“Down Item”就可以调整。

  • Up Item:表示选中的测试项上移。
  • Down Item:表示选中的测试项下移。
    TreeATE Dev开发指南

不可以超过被选中的单元所在级别。测试项只能在当前的测试套中上下移动顺序,测试套只能在当前的测试工程内上下移动顺序。

开发各个测试用例

在树形的测试单元框中鼠标左键点击需要开发测试用例(包含测试工程、测试套和测试项)名称,下方脚本编辑器将自动定位到测试用例函数位置(如果存在,否则将自动创建)。例如开发内容如下:
JavaScript:

function test_test1()
{
    __ate.OutputError("test_test1");
    var ret = ta.MsgBox("images/treeate.png", "hello", 0, 5000);
    __ate.OutputError(ret);
    __ate.OutputRst(Name2, Gabc, ret);    
    return 0;
}

Python:

def test_test1():

    __ate.OutputError("test_test1")
    ret = ta.MsgBox("images/treeate.png", "hello", 0, 5000)
    __ate.OutputError(ret)
    __ate.OutputRst(Name2, Gabc, ret)
    return 0

测试用例代码中__ate为TreeATE系统Test Engine固定的对象名。关于__ate的接口说明将在另外的博客中描述。

C++,V2.0.0以上版本支持,详见源代码Example中的TestCppDemo

int TestCppDemo::test_test1()
{
   
    // __ate对象定义在基类TACppBase中
    OutputError("test_test1");
    for(int i = 0; i < 5; i++) {
   
        QThread::msleep(300);
        if(IsStopped()) {
   
            break;
        }
    }
    // __ate对象定义在基类TACppBase中
    OutputRst(getParaValue("Name2"), getParaValue("Gabc"), "0");
    return 0;
}

首先函数test_test1是测试项名称为test1的执行接口,测试引擎会自动调用。函数的命名规则请参见运行规则
第3行是将字符串内容“test_test1”输出到TreeATE界面的当前测试工程中错误输出窗口。
第4行中的对象ta,就是前面配置的TA_MsgBox组件对象名称(在配置tp文件中有提到)。当测试执行到MsgBox时,会在TreeATE界面显示一个有超时为5000毫秒,提示内容为“hello”,并且显示了图片treeate.png的提示对话框。MsgBox对话框如果在5000毫秒(5秒)之内没有任何操作,该对话框将自动按照默认选择关闭。
第6行OutputRst为该测试项输出测试结果描述。描述格式内容为:Name2=Gabc,ret将输出到该测试项的测试标准字段。运行Example中的TestDemo样例后,可以在TreeATE界面上看到这些输出。

Name2是前面配置定义的测试项参数名称,Gabc是tp测试工程文件中配置定义的公共参数名称。

第7行的return 0表示当前测试项测试成功,返回其他值表示失败。

注意:返回大于0值(整数)表示测试失败,返回小于0(负整数)值表示异常。该功能在V1.1.1版本开始支持

发布测试工程

当前版本发布测试工程为自行压缩测试工程文件夹,复制到工厂环境使用,后续将会增加远程发布测试工程功能。

问题反馈

任何软件系统都无法避免问题的出现,若您发现了Bug,请在此(https://github.com/WilliamYinwei/TreeATE/issues)提交问题,作者会尽快解决。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
待兔 待兔
2个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
7个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k