51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 650|回复: 0
打印 上一主题 下一主题

接口测试:从需求分析到用例设计到生成测试报告

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:04
  • 签到天数: 942 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-7-14 10:50:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1. 接口定义
      接口普遍有两种意思,一种是API(Application Program Interface),应用编程接口,它是一组定义、程序及协议的集合,通过API接口实现计算机软件之间的相互通信。而另外一种则是Interface,它是面向对象语言如java、c#等中一个规范,它可以实现多继承的功能。[url=]接口测试[/url]中的接口指的是API。
      为什么要使用接口:
      假如公司的产品前端开发还没开发完,接口开发好了。有天领导说,小王,你测下这个登录功能,要是你不懂接口的话就会对领导说这个功能测不了啊,页面没开发完。领导会把你……
      接口测试是不需要看前端页面的,可以更早的介入到测试工作中,提高工作效率。
      根据测试金字塔,越底层成本越低,一个底层的bug可能会引起上一层的多个bug,所以测试越底层,越能保证产品的质量,也越能节省测试的成本。而单元测试一般是由开发来完成的,所以对于测试来说,接口测试是非常必要的。
      对于自动化测试来说,UI的变动性最大,所以UI自动化测试的维护成本很高。而接口的改动很小,所以接口自动化测试是最实用,最节约成本的。
      2. 基本流程
      接口功能自动化测试流程如下:
      需求分析 -> 用例设计 -> 脚本开发 -> 测试执行 -> 结果分析。
      2.1 示例接口
      手机号码归属地
      **接口地址:**http://apis.juhe.cn/mobile/get
      **返回格式:**json/xml
      **请求方式:**get
      **请求示例:**http://apis.juhe.cn/mobile/get?phone=手机号&key=您申请的KEY
      3. 需求分析

    需求分析是参考需求、设计等文档,在了解需求的基础上还需清楚内部的实现逻辑,并且可以在这一阶段提出需求、设计存在的不合理或遗漏之处。
      如:手机号归属地接口,输入不同号码段的手机号,查看手机号归属和手机号码属于哪个运营商。
      4. 用例设计

    5. 脚本开发
      5.1 模块安装
      使用pip命令安装即可:
    1. pip install requests
    复制代码
    5.2 接口调用
      使用requests库,我们可以很方便的编写上述接口调用方法(如输入phone=手机号,示例代码如下):
      在实际编写自动化测试脚本时,我们需要进行一些封装。
    1. #!/usr/bin/python3

    2. import unittest
    3. import requests
    4. import json

    5. class Test_Moblie(unittest.TestCase):

    6.     # 封装公共的数据
    7.     def common(self, phone):
    8.         url = "http://apis.juhe.cn/mobile/get"
    9.         date = {
    10.             'key': "4391b7dd8213662798c3ac3da9f54ca8",
    11.             'phone': phone
    12.         }
    13.         self.response = requests.get(url, params=date)
    14.         return self.response

    15.     def test_1(self):
    16.         self.common("1857110")
    17.         print(self.response.text)

    18.     def test_2(self):
    19.         self.common("1868115")
    20.         print(self.response.text)

    21. if __name__ == '__main__':
    22.     unittest.main() 
    复制代码
    我们按照测试用例设计,依次编写每个功能的自动化测试脚本即可。
      5.3 结果校验
      在手工测试接口的时候,我们需要通过接口返回的结果判断本次测试是否通过,自动化测试也是如此。
      对于本次的接口,输入手机,我们需要判断返回的结果resultcode是不是等于200结果分页时需要校验返回的结果数是否正确等。完整结果校验代码如下:
    1. #!/usr/bin/python3

    2. import unittest
    3. import requests

    4. class Test_Moblie(unittest.TestCase):

    5.     # 封装公共的数据
    6.     def common(self, phone):
    7.         url = "http://apis.juhe.cn/mobile/get"
    8.         date = {
    9.             'key': "4391b7dd8213662798c3ac3da9f54ca8",
    10.             'phone': phone
    11.         }
    12.         self.response = requests.get(url, params=date)
    13.         return self.response

    14.     def test_2(self):
    15.         self.common("1868115")
    16.         print(self.response.json())
    17.         dict_2 = self.response.json()
    18.         # 打印值省份值为:200
    19.         resultcode = dict_2["resultcode"]
    20.         # 为演式错误的示例,将对比值改为200,正确值为200,可自行修改
    21.         self.assertEqual(resultcode, "200", msg='失败原因:%s != %s' % (resultcode, "200"))

    22. if __name__ == '__main__':
    23.     unittest.main()
    复制代码
    运行结果:

    5.4 生成测试报告
      用例执行完之后,那就需要发报告给领导。
      那么我们使用HTMLTestRunner第3方模块插件生成html格式测试报告:
    1. from unittest import TestSuite
    2. from unittest import TestLoader
    3. import requests
    4. import json
    5. import HTMLTestRunner
    6. import unittest

    7. class Test_Moblie(unittest.TestCase):

    8.     # 封装公共的数据
    9.     def common(self, phone):
    10.         url = "http://apis.juhe.cn/mobile/get"
    11.         date = {
    12.             'key': "4391b7dd8213662798c3ac3da9f54ca8",
    13.             'phone': phone
    14.         }
    15.         self.response = requests.get(url, params=date)
    16.         return self.response

    17.     def test_1(self):
    18.      """判断状态码"""
    19.         self.common("1857110")
    20.         print(self.response.json())
    21.         # 返回数据为dict
    22.         print(type(self.response.json()))
    23.         dict_1 = self.response.json()
    24.         # 打印值省份值为:湖北
    25.         province = dict_1["result"]["province"]
    26.         self.assertEqual(province, "湖北", msg='失败原因:%s != %s' % (province, "湖北"))

    27.     def test_2(self):
    28.      """判断省份"""
    29.         self.common("1868115")
    30.         print(self.response.json())
    31.         dict_2 = self.response.json()
    32.         # 打印值省份值为:湖北
    33.         resultcode = dict_2["resultcode"]
    34.         # 为演式错误的示例,将对比值改为201,正确值为200,可自行修改
    35.         self.assertEqual(resultcode, "201", msg='失败原因:%s != %s' % (resultcode, "200"))

    36. if __name__ == '__main__':

    37.     report = "E:/report_path/result.html"
    38.     file = open(report,"wb")
    39.     # 创建测试套件
    40.     testsuit = unittest.TestSuite()
    41.     testload = unittest.TestLoader()
    42.     # 括号内传入的是类名,会自动找到以test开头全部的用例
    43.     # 用例以例表形式存储
    44.     case = testload.loadTestsFromTestCase(Test_Moblie)
    45.     testsuit.addTests(case)
    46.     run = HTMLTestRunner.HTMLTestRunner(stream=file,
    47.                                         title="接口自动化测试报告",
    48.                                         description="用例执行结果")
    49.     run.run(testsuit)
    50.     file.close()
    复制代码
    5.5发送邮件报告
      测试完成之后,我们可以使用zmail模块提供的方法发送html格式测试报告。
      基本流程是读取测试报告 -> 添加邮件内容及附件 -> 连接邮件服务器 -> 发送邮件 -> 退出,示例代码如下:
    1. #!/usr/bin/python3

    2. import zmail

    3. def send_mail():
    4.     # 定义邮件
    5.     mail = {"subject": "接口测试报告",# 任一填写
    6.             'content_text': '手机号归属地_API自动化测试报告',# 任一填写
    7.             # 多个附件使用列表
    8.             "attachments": "E:/report/result.html"
    9.             }
    10.     # 自定义服务器
    11.     # 如果不知道如何查看授权码,请查看这一篇博客:https://www.cnblogs.com/zzpython/p/13095749.html
    12.     server = zmail.server("发送人邮箱.com",
    13.                           "QQ邮箱是用授权码",
    14.                           smtp_host="smtp.qq.com",
    15.                           smtp_port = 465)
    16.     # 发送邮件
    17.     server.send_mail("收件人QQ邮箱", mail)

    18. try:
    19.     send_mail()
    20. except FileNotFoundError:
    21.     print("未找到文件")
    22. else:
    23.     print("发送成功")
    复制代码
    6. 结果分析
      打开完成后生成的测试报告,可以看出本次测试共执行了2条测试用例,1条成功,1条失败:

    最终发送测试报告邮件,截图如下:










    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-7 09:56 , Processed in 0.066201 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表