51Testing软件测试论坛

标题: SilkTest循序渐进系列 [打印本页]

作者: yuetiantian    时间: 2009-6-27 16:40
标题: SilkTest循序渐进系列
SilkTest循序渐进1-调用DLL函数

昨天一位朋友希望我能讲讲如何在silktest中调用dll导出的函数,说实话,我也没有实际操作过,不过还是答应在有空时能够给她一个简单的例子。今天晚上捣腾了半天终于调通了一个非常非常简单的例子,不过远比我想像的困难,主要是好久没碰VC了。现在时钟指向11点,我争取20分钟内完成这篇文章。

废话不多说,关于silktest中使用dll的基本介绍,参见Silktest天天学系列4-在silktest中调用DLL


今天我们的例子,就是编写一个dll,让其导出一个函数Calculate。该函数的功能是返回输入int参数的两倍。然后我要在silktest中调用该dll中的Calculate函数,从而计算Calculate(5)的值。

下面是例子的步骤:

1.打开Visual Studio,我的是2003。新建一个VC++的project,选择类型为MFC DLL

2.命名该project为helloworld,最后它应该生成一个helloworld.dll

3.编辑头文件helloworld.h,其内容如下:


#pragma once

#ifndef __AFXWIN_H__
    #error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"        // main symbols

__declspec(dllexport) int Calculate (const int x);         //C++ language
//extern "C" int PASCAL EXPORT Calculate (const int x);  // C language

4.编辑源代码文件helloworld.cpp,其内容如下:

#include "stdafx.h"
#include "helloworld.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// C++
__declspec(dllexport) int Calculate (const int x)
{
  return 2*x;
}
// C language
/*extern "C" int PASCAL EXPORT Calculate (const int x)
{
  return 2*x;
}*/

5. 编辑helloworld.def, 该文件显式指明了你要到处的函数名,这里我们导出Calculate

; helloworld.def : Declares the module parameters for the DLL.

LIBRARY      "helloworld"

EXPORTS
    ; Explicit exports can go here
   
Calculate

6. 编译,在Release目录下得到一个helloworld.dll

7.打开SilkTest新建一个project

8.新建一个hello.inc文件, 它的内容如下,注意引用dll时,请用全路径

[-] dll "F:\VS2003\helloworld\Release\helloworld.dll"
    [ ]  int Calculate(int i )

9.新建一个脚本文件,它的内容如下

[ ] use "hello.inc"
[-] testcase test()
    [ ] Int i
    [ ] i = Calculate(5)
    [ ] print(i)

10. 运行该脚本文件,它应该打印结果10

祝你顺利!

作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian
版权所有 - 转载时必须以链接形式注明作者和原始出处
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yuetiantian/archive/2009/06/21/4287551.aspx
作者: yuetiantian    时间: 2009-6-27 16:42
SilkTest循序渐进2-建立SilkTest分布式测试环境

大家都知道SilkTest支持分布式的测试,这主要是由于SilkTest采用了Host和Agent架构的原因。简单来说Host就是编辑编译测试脚本的组件,Agent是用来解释Host发过来的脚本命令并且驱动待测软件的组件。当我们在做单机测试的时候,Host和Agent是装在同一个机器上的,而当我们需要测试分布式的应用时,一般会有一个Host和多个Agent安装在不同的机器上。今天我们就来介绍一下如何建立一个简单的分布式测试环境。

首先你需要有两台联网的机器,假设他们的名字分别是SilkHost和SilkAgent,并且拥有同一域名后缀,其中SilkAgent上装有待测应用(AUT)。下面是建立环境需要的步骤:

1.       确保两台机器能互相ping通对方的机器名。

2.       在两台机器上安装同一版本的SilkTest。

3.       先启动SilkAgent机器的Agent软件,运行后右击该程序,选择Network…,在弹出的对话框中选择:Network->TCP/IP, Port number会自动被设为2965,点击确定。这时,在SilkAgent机器上打开一个dos窗口,运行netstat –a, 查看2965端口在监听状态。

4.       确保网络防火墙没有关闭两个机器的2965端口。

5.       在SilkHost机器上打开SilkTest, 进入你的Project, 选择下面的菜单:Options –>RunTime.在打开的对话框中将AgentName设置为SilkAgent, Network设置为TCP/IP,然后点击确定。

6.       在SilkHost上运行任意testcase,监视SilkAgent机器上测试的运行。



   作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian
版权所有 - 转载时必须以链接形式注明作者和原始出处
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yuetiantian/archive/2009/06/24/4294937.aspx
作者: yuetiantian    时间: 2009-6-27 16:42
SilkTest循序渐进3-编程规范

写code的同时写注释,注释应该用来描述你某块代码的目的和功能,而不要描述具体如何实现。
如果你的注释不能完全说明代码,考虑编写文档作为补充。
合理的使用空行来使代码易读。
尽量用appstate来将你的应用设置到某种预设状态,并且确保每个testcase执行结果都不影响其他testcase的执行。
使用括号来避免歧义。
模块化你的程序,避免重复代码。
如果测试总是在做同一件事,只是输入数据不同,那么考虑将case改成DDT的。
尽量使用已有的库函数来工作,不要自己重造轮子。
在需要的地方引入异常处理机制。对于检查结果可能不正确但不影响后续测试步骤执行的检查点,不要使用抛出会异常的表达式;对于检查结果可能不正确但会影响后续测试步骤执行的检查点,应该考虑抛出异常使当前testcase中断并且记录log。
尽量记录详细的log,以便测试执行完后分析。
不是万不得已,不要试图优化你程序的执行效率。
一个testcase中的检查点最好不要超过15个,太长的testcase不易维护。
将底层的GUI定义和类定义放入inc文件中。
将常量和全局函数,全局变量放入单独的inc文件中。
将高层的类定义和本地的函数放入t文件中。
在修改过代码文件后,记录history表明什么时候做了什么样的改动。
给inc文件,t文件分别定义统一的文件头样式。
给函数和类分别定义统一的注释块样式。
给testcase定义统一的注释块样式。
代码风格在整个项目中保持一致。
常量用带类型的大写字符串来命名。
变量用类型和有意义的单词来命名。例如 List of String lsMyName

作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian
版权所有 - 转载时必须以链接形式注明作者和原始出处

[ 本帖最后由 yuetiantian 于 2009-8-31 17:22 编辑 ]
作者: yuetiantian    时间: 2009-6-27 16:43
标题: SilkTest循序渐进4-Windows下Extension kit建立步骤
SilkTest循序渐进4-Windows下Extension kit建立步骤
1.       建立一个winform的vc项目

2.       在项目里引入FWxQapDynDll.h和FWxQapDynDll.cpp

3.       将assist.dll放在可以被引用到的library路径下面

4.       在项目中加入用于控件操作的cpp文件

5.       在主例程里面的InitInstance初始化一个QAPDynLoadEK实例

6.       在SilkTest项目里面编写你的silktest类

7.       在FWxQapDynDll.cpp中用RegisterClassFun来映射VC和SilkTest中的函数。

具体步骤请参见SilkTest自带的关于Extension kit的Pdf文档



作者: Zeng YueTian

网站: SilkTest 中文站

网址: http://blog.csdn.net/yuetiantian

版权所有 - 转载时必须以链接形式注明作者和原始出处

[ 本帖最后由 yuetiantian 于 2009-9-15 09:53 编辑 ]
作者: yuetiantian    时间: 2009-6-27 16:43
标题: SilkTest循序渐进5-类的继承
具体内容请参见
http://blog.csdn.net/yuetiantian/archive/2009/09/02/4513212.aspx

[ 本帖最后由 yuetiantian 于 2009-9-15 09:56 编辑 ]
作者: yuetiantian    时间: 2009-6-27 16:43
标题: SilkTest循序渐进6-data driven test起步
请看
http://blog.csdn.net/yuetiantian/archive/2009/09/13/4548374.aspx

[ 本帖最后由 yuetiantian 于 2009-9-15 09:57 编辑 ]
作者: yuetiantian    时间: 2009-6-27 16:54
标题: SilkTest循序渐进7-使用TrueLog
SilkTest循序渐进7-使用TrueLog

SilkTest2008提供了一个强大的log分析工具,它就是TrueLog。TrueLog功能可以帮助你在测试运行时,根据不同的操作来捕捉屏幕,从而为测试完成后的结果分析提供了有力支撑。在SilkTest提供这个功能之前,测试工程师一般需要自己在脚本里指定什么时候调用CaptureBitmap来进行抓屏,实现起来有些繁琐,现在好了,silkTest提供的TrueLog可以方便的是你在某些特定操作之前或者之后来捕捉屏幕,并且可以将他们统统存入一个xlg文件中,在测试执行完成之后,你可以通过Explore Results功能调用TrueLog Explorer查看它记录的测试结果。

要想使用TrueLog,你必须先启用该功能。通过选择SilkTest的菜单“Options->TrueLog”你就可以打开"TrueLog Options"对话框,选择Enable TrueLog,注意TrueLog功能仅仅针对Classic Agent执行的用例有效。然后,你需要选择一个记录结果的.xlg文件。如果你不指定,系统会帮你指定一个和你测试脚本同名的xlg文件。接下来,你就可以选择为控件记录哪些信息,对浏览器记录哪些信息,在什么时候捕捉屏幕。在另外一个Action Setting页中,你可以选择在特定操作的什么时候来进行抓屏。最后,点击确定就完成了设定。

运行你的脚本,待结束后使用Explore Results来选择你指定的xlg文件,你就可以看到TrueLog为你记录的测试结果了。


作者: Zeng YueTian

网站: SilkTest 中文站

网址: http://blog.csdn.net/yuetiantian

版权所有 - 转载时必须以链接形式注明作者和原始出处



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yuetiantian/archive/2009/09/23/4585896.aspx

[ 本帖最后由 yuetiantian 于 2009-9-26 12:22 编辑 ]
作者: ForgetWork    时间: 2009-7-3 17:03
thank you!!!!
作者: colwell2008    时间: 2009-8-25 14:55
That helps a lot~
作者: yuetiantian    时间: 2009-8-31 17:23
本系列已完成!

[ 本帖最后由 yuetiantian 于 2009-9-26 12:23 编辑 ]




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2