什么是TreeATE测试组件
基于TreeATE平台特定接口,专为上层测试脚本提供服务的组件称为TreeATE测试组件。测试组件通常以DLL文件形式存在。当然大家可参照样例中js或py后缀的文件作为组件,这些也是为了某些测试需要自定义的测试组件,但本文不作描述。
一般控制某个特定的仪器或产品时,可以将该部分分装成测试组件。以下就以源代码中Plugins/TA_MsgBox组件为例,介绍如何通过QT开发TreeATE测试组件。
新建项目工程
打开QT Creator,选择“文件”->“新建文件或项目”菜单,显示对话框。
在该对话框的“项目”中选择“Library”->“C++库”,再下一步选择“共享库”,并设置好测试组件名称(请根据实际情况定义测试组件名称),本样例的名称为TA_MsgBox。点击“下一步”直到创建测试组件工程。
定义导出接口
仍然以TA_MsgBox为例,打开头文件ta_msgbox.h
///
/// @brief common of the MessageBox
/// @author David Yin 2018-12 willage.yin@163.com
///
/// @license GNU LGPL v3
///
/// Distributed under the GNU GPL v3 License
/// (See accompanying file LICENSE or copy at
/// http://www.gnu.org/licenses/gpl.html)
///
#include <QObject>
extern "C" TA_MSGBOXSHARED_EXPORT void* CreateDeviceInst(const char *strPara);
class TA_MSGBOXSHARED_EXPORT TA_MsgBox : public QObject
{
Q_OBJECT
public:
TA_MsgBox();
public slots:
bool BandObj(const QString& obj);
QString MsgBox(const QString& strPic, const QString& strMsg, const int type, const int mSec);
int AsyncMsgBox(const QString& strPic, const QString& strMsg, const int type, const int mSec);
QString CloseAsyncMsgBox(int nMsgBoxId);
protected:
QString cmdProcess(const QString& strCmd, int mSec);
private:
QString m_strObj;
QString m_strLstErr;
};
#endif // TA_MSGBOX_H
定义测试组件接口有以下几点需要注意
- 其中上面代码中的TA_MSGBOXSHARED_EXPORT为QT Creator自动添加的导出宏定义。实际你自己创建测试组件名称,例如xxx就是测试组件名称,那么xxxSHARED_EXPORT就是自动生成的导出定义。
- TA_MsgBox类需要继承QObject
- 需要定义统一的函数接口 CreateDeviceInst(const char *strPara); 注意为C接口,留意前缀:extern “C”
- 如果需要测试脚本能够调用到的函数,如同上面代码所示,请在导出函数前加上public slots关键字
实现接口
打开源文件ta_msgbox.cpp,添加CreateDeviceInst接口代码。在CreateDeviceInst接口中返回创建TA_MsgBox的实例。
void* CreateDeviceInst(const char *strPara)
{
Q_UNUSED(strPara)
return new TA_MsgBox();
}
注:new生成的对象实例将由TreeATE平台管理和释放。
其他函数接口实现参见TA_MsgBox源代码文件ta_msgbox.cpp。
以上仅以TA_MsgBox为例描述了测试组件开发方法,请根据实际测试需要开发自己的测试组件函数接口。
构建测试组件
TreeATE需要使用Release构建模式,请选择Release构建模式生成dll文件,最后参见TreeATE Dev开发指南导入测试组件即可。
什么是TreeATE界面插件
界面插件主要解决特定情况下的人机交互,例如TreeATE自带的GUI_TA_MsgBox对话框操作提示。TreeATE界面插件主要运行在TreeATE界面进程内,与后台测试引擎TestEngine是不同的进程。后台测试程序需要调用界面插件时,需要借助TA_MsgBox的以下2个接口调用。
- BandObj:绑定界面对象
- GuiCmdProcess:处理界面事务
样例:
假设MyVideo.dll是自定义的TreeATE界面插件,作用是显示特定网址的视频。在tpx文件内有一个myvideo对象的界面插件,如下图所示。
我们定义了一个专为MyVideo界面插件访问的测试组件对象myv,可复用TA_MsgBox测试组件。
测试脚本也非常简单,如下:
function setup_testdemo()
{
tm.BandObj("msg");
myv.BandObj("myvideo"); // 绑定了前面定义的界面插件对象myvideo
// ...
}
function test_test1()
{
// 界面将显示地址为http://www.abcdef.com/x.mp4的视频窗口
myv.GuiCmdProcess("showVideo('http://www.abcdef.com/x.mp4')", 200); // 200毫秒内得到执行
// ...
基于TreeATE平台开发自动化测试程序,不推荐做界面扩展,但实在需要特定的界面自定义扩展,TreeATE也是支持的。
如何开发自定义的TreeATE界面插件
与测试组件类似,但界面插件接口为CreateGuiInst,例如源代码中的GUI_TA_MsgBox插件。
extern "C" GUI_TA_MSGBOXSHARED_EXPORT void* CreateGuiInst(const void *strPara);
在tpx文件中配置好界面插件
打开TreeATE Dev,找到tpx文件,如上面的样例新增界面插件即可,详见TreeATE Dev开发指南。