• 接口自动化测试详解(文档)


    phpunit 接口自动化测试系列

    Post接口自动化测试用例

    Post方式的接口是上传接口,需要对接口头部进行封装,所以没有办法在浏览器下直接调用,但是可以用Curl命令的-d参数传递接口需要的参数。当然我们还以众筹网的登录接口为例,讲解post方式接口的自动化测试用例。

    (1)接口文档

    .登录(POST)
    URL:http://api.zhongchou.cn/user/login

    参数:

    • identity,用户名、用户手机、用户邮箱,三者之一
    • password,用户密码

    返回:

    • errno,0:表示成功,非0:表示失败
    • User基础数据结构
    • token,成功会返回32位token字符串,失败会返回空字符串

    这个接口文档很清楚,就是传递用户名和密码进行登录,登录后会返回user基本数据结构和Token。

    同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

    软件测试视频教程观看处:

    字节大佬教你逼自己如何在15天内掌握自动化测试(接口自动化/APP自动化/Web自动化/性能测试),内含项目实战

    (2)Curl命令执行

    分析了接口文档,我们需要在终端下执行接口,然后才能根据接口的返回值来编写对应的接口测试用例。

    在终端下执行命令:

    [root@n028 api]# curl -d ‘identity=1838905&password=a**0’ http://api.zhongchou.cn/user/login?v=1

    其中的identity为众筹网的用户名,password为密码,V=1是因为这个接口是第一版本的。执行结果如图4.2.1所示:

    (3)Curl返回值查看

    由于post方式无法用浏览器直接调用,返回结果是编码后的json字符串,不方便我们查看结果。所以我们要借助于chrome的插件。

    打开chrome浏览器->右击浏览器,选择“审查元素”->在浏览器下部选择“Console”选项卡。在打开的栏目下的“>”后输入dir().然后将刚刚终端Curl返回的结果拷贝到这个函数中,回车即可解析结果。如图4.2.2所示:


     

    (4)PHP调用Post方式接口

    PHP调用Post接口和Get方式有所不同,一般用以下方式调用,而且是固定的:

    1. public function testlogin()
    2. {
    3. $url='http://api.zhongchou.cn/user/login?v=1';
    4. $post_params=array('identity'=>'183****8905','password'=>'a0****0');
    5. $ch = curl_init();//初始化curl
    6. curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
    7. curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
    8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
    9. curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
    10. curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);
    11. $data = curl_exec($ch);//运行curl
    12. curl_close($ch);
    13. echo $data;
    14. }

    然后执行代码,就可以看到如图4.2.3所示的输出结果:

    如到Get方式,这个输出结果同样是经过编码后的json字符串,我们也需要对其进行json_decode()解码一下,然后再输出结果。所以增加以下两行代码:

    r e s = j s o n d e c o d e ( res=json_decode(res=json 
    d

     ecode(data);

    print_r($res);

    此时的输出结果图4.2.4所示,简单清晰了许多。


    (5)PHP编写Post接口自动化测试用例

    现在PHP能调用post方式的接口了,可是没有添加自动判断执行结果的脚本,不算是一个真正的测试用例。接下来我们添加上对返回值的assert语句,使之成为一个完整的自动化测试用例。

    完整的测试用例如下:

    1. public function testlogin()
    2. {
    3. $url='http://api.zhongchou.cn/user/login?v=1';
    4. $post_params=array('identity'=>'183****8905','password'=>'a0******0');
    5. $ch = curl_init();//初始化curl
    6. curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
    7. curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
    8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
    9. curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
    10. curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);
    11. $res = curl_exec($ch);//运行curl
    12. curl_close($ch);
    13. $data=json_decode($res,true);
    14. //print_r($data);
    15. if(is_null($data)==false)
    16. {
    17. if($data['errno']=='0')
    18. {
    19. $this->assertEquals('0',$data['errno']);//判断errno是否为0,此步为抛出执行通过
    20. $index =strpos($data['data']['name'],'8905');
    21. $this->assertnotEquals(-1,$index);//判断结果是否包含关键字
    22. print('接口/user/login:登录接口------------------OK'."\n");
    23. }
    24. else
    25. {
    26. $this->assertEquals('0',$data['errno']);//抛出执行失败
    27. print("接口/user/login:登录接口---------------Failure!"."\n".$res."\n");
    28. }
    29. }
    30. }

    Assert判断语句和get相似,先判断返回errno,然后判断返回的name是不是我们刚刚登录的账号。当然如果返回值不是我们预期的,也要使测试用例执行失败。执行结果如图4.2.5所示,同样如果要看接口返回值 ,注销掉//print_r($data);

    测试用例的覆盖

    上面我们讲述了get和post两种方式的接口自动化测试用例的编写,通过运行我们发现还是挺简单的嘛。不过上面两种测试用例只是接口的一个正常的测试用例,而对于一个接口的测试用例覆盖是非常多的。下面我们就常用的接口测试用例覆盖方法列举一下:

    (1)必需参数覆盖。对于接口的参数,接口文档一般都会说明哪些儿是必需的,哪儿是非必需的。对于必需的参数,一定要测试传参数和不传参数接口是否报错?

    (2)必需的参数各种情况覆盖。传非法的字符,特殊的字符,空值,超过边界的参数是否报错?错误信息是否正确?

    (3)非必需参数覆盖。一般接口对于非必需参数都不会做非正常性传值的判断,所以要测试合法的参数值 ,接口返回的内容是否正确。如果有接口文档说明对非必需参数做了非正常的验证的话,也要对其进行验证。

    (4)参数的组合覆盖。有些儿参数需要相互配合着才起作用,如“offset”和“count”组合起来进行翻页,这个时候要组合起来进行测试。

    (5)业务逻辑相关的覆盖。有些儿接口与业务逻辑关联密切,单独从接口角度测试,可能会遗漏掉一些儿因业务逻辑而产生的bug。所以如果和业务逻辑相关,也要考虑到业务逻辑相关的测试用例。

    其实接口的测试用例差不多也就这些儿情况,也许有特殊的接口,到时候和产品,开发人员做好沟通,尽量先从接口层面保证质量。这样再从测试接口的应用层的时候,就可以少很多工作量,只注重样式和各个接口调用的配合就可以了。

    本章小结

    本章讲述了常用的Get和Post方式Curl命令调用,浏览器调用和查看接口返回值的方法,以及对应的接口自动化用例的编写方法。最后还介绍了接口测试用例的覆盖方法,通过本章的学习我们可以参照接口文档,写出这个接口的所有自动化测试用例。下章节我们将讲述对测试架构的规划及测试用例的组织。

    PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

    ☑ 240集-零基础到精通全套视频课程
    ☑ [课件+源码]-完整配套的教程
    ☑ 18套-测试实战项目源码
    ☑ 37套-测试工具软件包
    ☑ 268道-真实面试题
    ☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

    这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

  • 相关阅读:
    活字格低代码开发平台怎么样?靠谱吗?
    C语言基础-结构体
    Springboot毕设项目短视频网站r3k6x(java+VUE+Mybatis+Maven+Mysql)
    利用华为云ECS服务器搭建安防视频监控平台
    [C++网络协议] I/O复用
    填坑之路!SpringBoot导包坑之spring-boot-starter-parent
    笔记 | 排序算法实现(Python)
    IPETRONIK数采与第三方软件集成
    数据分析:小红书品牌“共情力”缔造指南
    【Linux】进程管理命令,了解运维的五大性能监测
  • 原文地址:https://blog.csdn.net/HUA6911/article/details/133770350