zoukankan      html  css  js  c++  java
  • 第六章 自动执行自动化测试用例

                             ------phpunit 接口自动化测试系列

       所有自动化测试用例最终的目的都是一样的,实现无人值守的自动化运行。而目前最常用的就是Jenkins来实现这个功能,在前面的Webdriver+Python页面自动化的教程中我们已经详细讲解了如何将自动化测试用例接入到Jenkins中。本章我们只讲述接口接入的步骤,不再详细讲述相关的操作原理,同时加入接口中自动化检测点的设置技巧。

    6.1 接口自动化接入Jenkins

       第五章我们讲到了如何利用TestSuite组织测试用例,当我们编写好了相应的TestSuite文件,再接入到Jenkins就容易的多了。下面我们分步来完成这个操作:

    1)上传自动化测试代码到SVN或是Git。要对自动化测试代码进行管理,上传到代码管理工具中,如上传到Gitgit@gitlab.corp.ncfgroup.com:zhongchou/zcapitest.git

    2)打开Jenkins,创建Job。打开Jenkins网站,创建Job如:Zhongchou-api-AutoTest-OnlineEnv,并对项目描述,丢弃旧的构建和启用项目安全进行相应的配置,如图6.1.1所示:

    6.1.1 Jenkins描述等配置

    3)源码管理和构建触发器。在源码管理中我们选择Git,并将上面的Git地址填写进去。并且在构建触发器的时候,我们设置成定时执行。详细说明见:http://blog.sina.com.cn/s/blog_68f262210102vmlx.html,具体配置如图6.1.2所示:

            6.1.2 配置源码和构建触发器

    4)填写构建命令。构建命令是我们执行自动化测试用例的命令行,如果没有此命令行,则Jenkins就不知道如何执行自动化测试,针对我们第五章编写的用例集,我们的构建命令应该是:

    Phpunit OnlineRegression.php

    将命令填写到Jenkins配置页—>构建àExecute shellàCommand”框中。

    5)失败邮件通知。如果测试用例执行失败了,我们希望邮件通知相关人员,这里就可以单击“构建后操作”->E-mail Notification”,然后在Recipients后填写要接收邮件的邮箱地址。同时选择“每次不稳定的构建都发送邮件通知”即可。

    6)保存配置。单击保存后,就将测试用例接入到了,Jenkins中,并且每个小时会自动执行一次。

    7)手工执行。在Jenkins页面上,打开刚刚创建的Job Zhongchou-api-AutoTest-OnlineEnv,单击页面左侧的“立即构建”,即可马上执行自动化测试用例。如图6.1.3所示:

    6.1.3 立即构建自动化测试用例

    8)查看构建结果。单击Job左侧“Build History”要查看的构建的任务,在打开的页面左侧单击“控制台输出”,既可在右侧打开控制台输出,查看测试用例执行的结果。如图6.1.4所示:

    6.1.4 查看测试用例执行结果

    6.2 Jenkins实现执行失败短信通知

    现在手机使用这么发达,邮件通知感觉到不那么及时了,如果不经常查看一下邮箱,即使是Jenkins给我们发了邮件我们也不能及时收到。所以如果自动化测试用例执行失败了,能发送短信,这不是很好吗?

    遗憾的是,Jenkins没有这个功能,如果想实现这个目标,我们只有自己努力了!下面我们分析一下思路:

    (1)   我们要根据执行结果来分析出测试用例执行成功了或是失败了,这个虽然Jenkins会自己分析,可是我们没有办法获取它分析的结果。所以我们要保存执行结果。

    (2)   解析保存的执行结果,如果失败了,解析出哪些儿测试用例失败了,把测试用例名字保存下来,以便作为我们失败通知短信的内容。

    (3)   需要一个发短信给固定手机的方法,我的办法是我们公司有一个公共短信平台,申请了相关的权限后就可以直接调用发短信接口向任何手机号发短信。读者要想达到这个目的,请自行想办法,因为没有免费的短信接口。

    (4)   上面三方面我们需要写一个脚本来做这些儿事情,我们暂时命名为TestGetResult.php,因为调用接口php最方便。脚本都是在linux下执行的,所有python,php都不会相互影响的。脚本内容涉及公司接口,就不给大家展示了。

    (5)   如果测试用例执行成功,则直接执行Jenkins返回成功,如果失败,则调用此脚本发送短信,并同时调用Jenkins发送邮件。所以我们的脚本执行不能影响Jenkins对执行结果的判断。

    (6)   为了达到这个目的,我们需要在“构建”—>Excute Shell”下添加脚本语言,如下所示:

     

      #!/bin/sh
      phpunit OnlineRegression.php >./Result/ApiResult.log
      if [ $? -ne 0 ];
      then
          php TestGetResult.php
         exit 1
     else
          exit 0
      fi
    

     

     

    脚本讲解:

    A,02行我们是调用执行suite文件,执行测试用例,并将结果保存到./Result/ApiResult.log文件中。

    B,第03行判断第一行执行的结果,如果执行结果不等于0,说明测试用例执行失败,然后调用05行我们处理测试结果,发短信的脚本。

    C,06行很关键,当测试用例执行失败后,第02行会返回一个非0的结果,此时我们调用05行执行。05行执行成功后会返回0,此时Jenkins接到的结果代码是0,会把执行结果置成成功,并且不会发邮件。所以06行,我们人为的返回一个非零的代码给Jenkins,为了不影响Jenkins的结果。

      D,第08行和06行的目的是一样的,当03行判断结果为失败时,返回代码是非零的,如果不在08行添加一个人为地返回0的语句,测试用例执行成功时,Jenkins根据返回码也会认为是失败。为了不影响Jenkins原来的判断结果,我们添加了0608两个强制返回语句。

       至此,我们完成了Jenkins的配置,这些儿配置可以满足我们对自动化测试用例的失败监控。当然,如果你们有其他的需要,可以去网上学习Jenkins的其他配置及插件的使用,学无止境嘛!

    6.3 接口自动化检测点的设置技巧

    对于接口自动化的检测其实也比较简单,先对接口返回值进行json_decode()。然后对解压后的数组进行判断,和预期相同就成功,不同就失败。这看似很简单,可是要设置好一个检测点,才能高效的发现Bug,还是需要一些儿技巧的。

    (1)检测返回的错误码。针对一些儿接口,比较注重成功或是失败,而不是特别注重返回的数据,或都没有返回数据的时候,我们就检测返回的错误码。如果是正确的就成功,错误的就失败。如:$this->assertEquals(0,$data["errno"]);

    (2)检测返回的数据。有的时候接口的错误码相同,但是可能是因为不同的原因引起的,此时我们就要检测返回的数据,如error。或者接口比较注重返回的数据,就要检测返回的Data是否和预期的相同或是包含。如:

    $index =strpos($data['data']['name'],'8905');

     $this->assertnotEquals(-1,$index);//判断结果是否包含关键字

    (3)检测关键字段。有些儿接口会在后期优化的时候增加字段或是返回值必须具有某些儿字段值才算成功的话,我们就要对特定的字段进行检测。如:

    $this->assertArrayHasKey("is_friend",$data['data'],"新增加字段:is_friend");

    (4)  Assert语句的位置。对于接口自动化,Assert语句是必不可少的,但是这个语句的位置还是有讲究的。如果在接口处理的时候有输出或是要记录一些儿内容,就要考虑一下这个Assert语句的位置了,因为一旦这个语句执行失败,则程序就不再继续往下执行。例如:

    if($data['errno']==0)

    { 

    $this->assertEquals($dr->readnodevalue("login","serrno"),$data["errno"]);

    TextOperation::writetoken($data['data']['token']);

     print('接口login:登录成功------------------OK'.' ');

    }

    Else

    {

    print("接口login:登录失败----------Failure!"." ".$content." ");

    TextOperation::writetxt("接口28:登录失败-----Failure!"." ".$content." ");

    $this->assertEquals($dr->readnodevalue("login","serrno"),$data["errno"]);

    }

    (5)Assert后适当的输出。因为我在网上查看了一下phpunit相关的输出报告,好像没有什么好的样式。我们就在接口执行成功或是失败后做出一些儿输出,这样我们就可以对结果进行分析,然后定制出自己的执行报告。如果上面的例子中:

    print('接口login:登录成功------------------OK'.' ');

    or

    print("接口login:登录失败----------Failure!"." ".$content." ");

    6.4 本章小结

    本章我们介绍了如何将测试用例接入到Jenkins中,实现无人值守的自动化执行。并通过定制化配置,达到我们想要的一些儿个性要求,如执行失败给相关人员发短信。最后又介绍了接口自动化测试用例编写过程中检测点设置的相关技巧,通过一些儿小的技巧可以提高我们测试用例执行的效率,将输入结果更加完美。

  • 相关阅读:
    《架构漫谈》有感
    《掌握需求过程》阅读笔记三
    《掌握需求过程》阅读笔记二
    《掌握需求过程》阅读笔记一
    《代码阅读方法与实现》阅读笔记三
    《代码阅读方法与实现》阅读笔记二
    《代码阅读方法与实现》阅读笔记一
    《软件需求模式》阅读笔记三
    《软件需求模式》阅读笔记二
    第二阶段个人总结06
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6520854.html
Copyright © 2011-2022 走看看