专注于自动化测试,性能测试.......

发布新日志

  • KDATFFS v1.0 发布

    2011-12-09 09:26:37Top 1 Digest 1

      KDATFFS 作为一个基于Selenium的关键字驱动的自动化框架,其中包括KDATFFS,KDATFFSRecorder,KDATFFSRunner. KDATFFS是框架的核心,KDATFFSRecorder是一个测试录制工具,KDATFFSRunner是一个测试运行工具。

    具体详情请见 KDATFFS

    如果有问题可以在博客中留言或者发email给我。

    By the way, 如果下载后,360报有trojan.generic病毒,那并不是病毒,而是360的流氓本色在作怪,^_^!

  • 关于WebDriver(selenium2)的关键字驱动自动化框架-KDATFFS(原创)

    2011-11-16 12:31:11Top 1 Digest 1

      本文为作者原创,如需转载请声明作者及出处

      刚刚发布了关于WatiN系列最后一篇文章,算是对使用WatiN的最终篇了,WatiN+Gallio的组合,就我看来应该是最佳的一种组合了,它们之间互补性很强,以至于在Gallio的Samples里就有一个关于WatiN的事例,写的非常精彩,有兴趣的可以去看看。事实上,我从来不是一个安分的人,总是喜欢尝试一些新奇的东西。最近在研究Selenium,在selenium1.0时代,我使用过它,感觉很不方便,虽然它一直名列最受欢迎的web开源测试工具的首位,但就是感觉不是那么回事。但令人惊喜的是,Selenium 2.0发布了,它完全颠覆1.0的模式。采用了类似于WatiN,Watir的方式,浏览器,元素,Find方法等等,都极其的类似,却又有所简化,试用了一下,感觉还不错。

      当然使用是最基本的,但是自动化测试追求的是适应性强,以致出现了数据驱动框架,关键字驱动框架,很显然这些框架大大的提高了测试的灵活性,易用性。现在Selenium采用了WatiN类似的测试方式,受了Wax项目的启发,我也在最近针对Selenium2(也就是WebDriver)开发了一个关键字驱动的自动化框架-KDATFFS.(Key-Driver Automated Testing Framework For Selenium)

    界面

    主要实现以下一些功能:

    - 不需编写测试代码实现自动化测试
    - 多种测试数据载体(Excel,CSV)
    - 支持IE,Firefox浏览器,Firefox可以使用代理
    - 支持JS弹出框,弹出窗口
    - 支持IFrame结构
    - 支持页面元素,图片以及数据库数据的验证功能
    - 支持测试结果,测试日志输出
    - 良好的GUI操作和显示

     这个框架还在测试中,不久后可能会上传到codeplex开源网站与大家共享。

  • 解决KDATFFSRecorder运行报错问题

    2011-12-15 21:40:24

     之前KDATFFS下载安装完毕后,KDATFFSRecorder运行会报错,原因是ComUtilities.dll未打包,先解决方法有两个:
     1) 卸载KDATFFS,重新下载后,重新安装
     2) 下载附件中的文件,解压到KDATFFS的安装目录中,运行Regsvr.BAT即可。
  • KDATFFS框架测试实例(一) 登录测试

    2011-12-14 20:33:16


    KDATFFS工具进行自动化测试还是比较简单的,现以Ctrip登录测试作为实例来讲解KDATFFS工具的使用

    1.首先使用KDATFFSRecorder工具进行测试步骤的录制


    1.JPG


    Figure 1 开始录制

    1)输入测试网址,并导航到测试页面

    2)添加一个测试,比如“LoginTest”,并选中它,状态栏中会显示当前的测试名称

    3)点击“开始录制”的按钮,就可以开始录制,录制过程中可以暂停/记录录制,同时也可以删除某个测试步骤,也可以通过“开始查找”按钮来进行测试步骤的手工添加。(注意,浏览器的操作的测试步骤也需要在“开始录制”按钮被Checked的情况下录制。)

    2.JPG


    Figure 2 添加验证点

    4)用户登录成功后,我们为了验证登陆是否成功,可以对登陆成功页面添加验证点。把“Is Find Element”按钮按下,把鼠标移动到需要验证的页面元素上,点击左键就可以选择需要的验证点了。这里我们添加两个验证点,一个是验证页面标题ValidteBrowerTitle ,一个是验证用户名称 ValidateItemText

    5)这样一个登陆的测试就录制完成了,勾选需要导出的测试,输入sheet name,导出即可。

    3.JPG


    Figure 3 录制成的测试步骤

    2. 然后,我们就可以对录制完的测试步骤进行编辑,参数化等操作。

       录制完成后,你可直接在KDATFFSRunner中运行你录制的测试步骤,但是因为刚才输入的数据都是固化数据,不利于灵活的执行测试,你也可以选择对测试数据进行参数化,参数化的操作很简单。创建一个Excel文件用于存放数据,比如“TestData.xlsx,Sheet表名为”Login”。你需要参数化几个参数就创建几列,这里有 网址,用户名,密码,两个预期值。

    那么测试数据如下

    4.JPG


    Figure 4 测试数据

    1) 修改测试文件,参数化数据,参数化的格式为Data[sheet表名:列明],那么测试文件中的测试数据就应该修改为

    Logintest 修改为 Data[LoginName]

    …………

    一个测试只能匹配excel中的一个表

    5.JPG


    Figure 5 参数化后的测试文件

    2)把测试文件中需要参数化的参数都依据如上进行参数化话后,就可以进行测试执行了

    3.测试执行

    打开KDATFFSRunner

    1)如果需要执行数据驱动的话,导入测试文件

    6.JPG


    Figure 6 导入测试数据

    2) 导入测试文件

    7.JPG


    Figure 7 导入测试文件

    3) 设置选择浏览器类型,是否设置代理,速度等参数后,如果是数据驱动的话,把Data Driver设置为yes,点击Start就可以开始测试了,在IE浏览器中执行时,Speed最好设置大一点,比如300Firefox无所谓,可以极速执行。

    8.JPG


    Figure 8 测试执行过程中

    4) 上图会发现测试步骤多出了很多,这是因为执行过程中会根据测试数据的数量迭代的生成测试,执行完毕后,可以在Test
    Log
    中查看执行的错误信息。

    9.JPG


    Figure 9 测试日志

  • KDATFFS中增加可参数化的字段

    2011-12-13 15:19:56

     
     
       之前在KDATFFS中,只可以参数化CommandArgs,ExpectedValue两个字段可以进行参数化,现增加了FindArgs,Frame,window字段也可以进行参数化操作。
  • 自动化测试中自动生成测试数据

    2011-12-02 17:12:15

     在进行自动化测试过程中,很多的框架的测试数据都是从外部(ExcelCsv,数据库)读取的,一般数据都是固化数据。显然这样做不够灵活,而且很多场景下这些数据需要频繁的改动,比如用户注册,第一次这个数据注册成功了,但是第2次再运行,很显然会失败,因为这个用户已经注册过了。这时候我们会想到生成随机数据,但是随机什么样的数据呢?这需要定义生成数据的规则,对于数据的匹配规则,我们很快想到了正则表达式,那么测试数据写成正则表达式,然后根据正则表达式来生成数据不是Perfect,确实是这样。但是对于正则表达式的反解析绝对是一个不轻松的工作,而且需要相当的正则表达式的知识。那么我们何不自己定义数据生成的规则呢?这就是我下面想讲的,如何定义自己的规则,然后生成对应的测试数据?

     

      首先,我们要先定义规则标识,只有这样,数据被读取到代码后,它才会去解析数据。这样我们给出这样的标识 Rule[],当测试代码读取到测试数据为Rule[]时,就知道这是一个需要解析的测试数据,调用解析方法进行GetReturnData(string name)方法进行解析。Rule[][]括号中就是我们的数据规则,比如数据中固定的数据我们定义为F() ,随机数定义为R(),随机字符串定义为S()等等。比如我们有这样一个数据规则Rule[F(fix)|R(5)|S(2)],这样在测试输入时就应该是输入一个fix+5位随机数+2个随机字符的数据。

     

       而因为定义数据规则后,输入的数据时不可预测的,那之后的测试过程中如果用到这个测试数据该怎么办呢?我们应该可以有个方法可以获取到输入的数据。那么在输入时我们就定义一个规则:Value1 =Rule[],就是说在输入数据的同时把这个值赋值给Value1。而这个Value1会被添加到一个泛型字典中,这样在以后需要用到该数据的地方我们就可以定义一个规则Rule[E(Value1)]来读取value1的值。

       就这样,我们可以灵活的定义自己的数据规则,使测试数据更为灵活,简单,方便。

    具体实现代码如下:

     

     public class UtilityClass

        {

           private static Dictionary<string, string> returnData = new Dictionary<string, string>();

     

            static UtilityClass()

           {

     

           }

     

            public static string GetReturnData(string name)

            {

                foreach (string item in returnData.Keys)

                {

                    if (name == item)

                    {

                        return returnData[item];

                    }

                }

                return "";

            }

            public static string GetTestDate(string commandArgs)

            {

                Regex regex = new Regex(@"(.*)Rule\[(.*)\]");

                Regex returnRegex = new Regex(@"(.*)=");

                Regex fixeRegex = new Regex(@"(F\()(.*)(\))");

                Regex randomRegex = new Regex(@"(R\()(\d*)(\))");

                Regex expectedRegex = new Regex(@"(E\()(.*)(\))");

                if (regex.IsMatch(commandArgs))

                {

                    var items = regex.Match(commandArgs).Groups;

                    string[] regItems = (items[2].ToString()).Split('|');

                    StringBuilder sb = new StringBuilder();

                    for(int i=0;i<regItems.Length;i++)

                    {

                      

                        //固定值

                        if (fixeRegex.IsMatch(regItems[i].ToString()))

                        {

                            var result = fixeRegex.Match(regItems[i].ToString()).Groups;

                            sb.Append(result[2].Value);

                        }

     

                        //随机数

                        if (randomRegex.IsMatch(regItems[i].ToString()))

                        {

                            var result = randomRegex.Match(regItems[i].ToString()).Groups;

                            int number = Convert.ToInt32(result[2].Value);

                            sb.Append(GetRandomNumber(number));

                        }

     

                        //之前输入过的测试数据

                        if (expectedRegex.IsMatch(regItems[i].ToString()))

                        {

                            var result = expectedRegex.Match(regItems[i].ToString()).Groups;

                            sb.Append(GetReturnData(result[2].Value));

                        }

                    }

     

                    if(returnRegex.IsMatch(items[1].ToString()))

                    {

                        string name = returnRegex.Match(items[1].ToString()).Groups[1].Value;

                        if(returnData.ContainsKey(name))

                        {

                            returnData.Remove(name);

                        }

                        returnData.Add(name, sb.ToString());

                    }

     

                    return sb.ToString();

                }

                else

                {

                    return commandArgs;

                }

              

            }

     

            /// <summary>

            /// 生成随机数

            /// </summary>

            /// <param name="length"></param>

            /// <returns></returns>

            public static string GetRandomNumber(int length)

            {

                Random random = new Random();

                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < length; i++)

                {

                    sb.Append(random.Next(10).ToString());

     

                }

                return sb.ToString();

            }

     

        }

  • KDATFFSRecorder - KDATFFS自动化测试框架中的测试录制工具(原创)

    2011-11-30 14:41:34

     

    本文为作者原创,如需转载请声明作者及出处

     

    前文对KDATFFS框架以及测试执行工具KDATFFSRunner做了简单的介绍,而作为KDATFFS自动化测试框架中的一个组成部分,KDATFFSRecorder是一个测试步骤的录制工具。它同样基于.net framework 3.5,使用C#开发,其中最重要的一个组件就是csEXWB2,官方站点中声称是“The most complete .NET Webbrowser control wrapper”,功能确实强悍。

     KDATFFSRecorder主要具有以下功能:

    -          测试步骤录制

    -          测试步骤添加

    -          验证点添加

    -          支持弹出窗口,弹出JS对话框,Frame框架

    -          支持输出Xpath

    -          导入导出功能

    界面如下:

     

    录制过程中会生成测试步骤的关键字,也就是KDATFFSRunner可以运行的格式。当然测试步骤导出成Excel后,也可以对测试步骤和测试数据进行修改,基于Excel超强的编辑能力,所以无论是KDATFFSRunner,还是KDATFFSRecorder都没有提供测试步骤的修改功能就是这个原因,Excel可以解决一切问题 ^_^

    生成的测试步骤(TestStep):

     

      KDATFFSRecorder支持手动的添加测试步骤和验证点,通过在页面中指定需要的步骤或验证点,指定的元素高亮显示。

     

     支持弹出窗口的脚本录制,以及添加验证点。

     

Open Toolbar