TA的每日心情 | 无聊 昨天 09:05 |
---|
签到天数: 1050 天 连续签到: 1 天 [LV.10]测试总司令
|
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命令安装即可:
5.2 接口调用
使用requests库,我们可以很方便的编写上述接口调用方法(如输入phone=手机号,示例代码如下):
在实际编写自动化测试脚本时,我们需要进行一些封装。
- #!/usr/bin/python3
- import unittest
- import requests
- import json
- class Test_Moblie(unittest.TestCase):
- # 封装公共的数据
- def common(self, phone):
- url = "http://apis.juhe.cn/mobile/get"
- date = {
- 'key': "4391b7dd8213662798c3ac3da9f54ca8",
- 'phone': phone
- }
- self.response = requests.get(url, params=date)
- return self.response
- def test_1(self):
- self.common("1857110")
- print(self.response.text)
- def test_2(self):
- self.common("1868115")
- print(self.response.text)
- if __name__ == '__main__':
- unittest.main()
复制代码 我们按照测试用例设计,依次编写每个功能的自动化测试脚本即可。
5.3 结果校验
在手工测试接口的时候,我们需要通过接口返回的结果判断本次测试是否通过,自动化测试也是如此。
对于本次的接口,输入手机,我们需要判断返回的结果resultcode是不是等于200结果分页时需要校验返回的结果数是否正确等。完整结果校验代码如下:
- #!/usr/bin/python3
- import unittest
- import requests
- class Test_Moblie(unittest.TestCase):
- # 封装公共的数据
- def common(self, phone):
- url = "http://apis.juhe.cn/mobile/get"
- date = {
- 'key': "4391b7dd8213662798c3ac3da9f54ca8",
- 'phone': phone
- }
- self.response = requests.get(url, params=date)
- return self.response
- def test_2(self):
- self.common("1868115")
- print(self.response.json())
- dict_2 = self.response.json()
- # 打印值省份值为:200
- resultcode = dict_2["resultcode"]
- # 为演式错误的示例,将对比值改为200,正确值为200,可自行修改
- self.assertEqual(resultcode, "200", msg='失败原因:%s != %s' % (resultcode, "200"))
- if __name__ == '__main__':
- unittest.main()
复制代码 运行结果:
5.4 生成测试报告
用例执行完之后,那就需要发报告给领导。
那么我们使用HTMLTestRunner第3方模块插件生成html格式测试报告:
- from unittest import TestSuite
- from unittest import TestLoader
- import requests
- import json
- import HTMLTestRunner
- import unittest
- class Test_Moblie(unittest.TestCase):
- # 封装公共的数据
- def common(self, phone):
- url = "http://apis.juhe.cn/mobile/get"
- date = {
- 'key': "4391b7dd8213662798c3ac3da9f54ca8",
- 'phone': phone
- }
- self.response = requests.get(url, params=date)
- return self.response
- def test_1(self):
- """判断状态码"""
- self.common("1857110")
- print(self.response.json())
- # 返回数据为dict
- print(type(self.response.json()))
- dict_1 = self.response.json()
- # 打印值省份值为:湖北
- province = dict_1["result"]["province"]
- self.assertEqual(province, "湖北", msg='失败原因:%s != %s' % (province, "湖北"))
- def test_2(self):
- """判断省份"""
- self.common("1868115")
- print(self.response.json())
- dict_2 = self.response.json()
- # 打印值省份值为:湖北
- resultcode = dict_2["resultcode"]
- # 为演式错误的示例,将对比值改为201,正确值为200,可自行修改
- self.assertEqual(resultcode, "201", msg='失败原因:%s != %s' % (resultcode, "200"))
- if __name__ == '__main__':
- report = "E:/report_path/result.html"
- file = open(report,"wb")
- # 创建测试套件
- testsuit = unittest.TestSuite()
- testload = unittest.TestLoader()
- # 括号内传入的是类名,会自动找到以test开头全部的用例
- # 用例以例表形式存储
- case = testload.loadTestsFromTestCase(Test_Moblie)
- testsuit.addTests(case)
- run = HTMLTestRunner.HTMLTestRunner(stream=file,
- title="接口自动化测试报告",
- description="用例执行结果")
- run.run(testsuit)
- file.close()
复制代码 5.5发送邮件报告
测试完成之后,我们可以使用zmail模块提供的方法发送html格式测试报告。
基本流程是读取测试报告 -> 添加邮件内容及附件 -> 连接邮件服务器 -> 发送邮件 -> 退出,示例代码如下:
- #!/usr/bin/python3
- import zmail
- def send_mail():
- # 定义邮件
- mail = {"subject": "接口测试报告",# 任一填写
- 'content_text': '手机号归属地_API自动化测试报告',# 任一填写
- # 多个附件使用列表
- "attachments": "E:/report/result.html"
- }
- # 自定义服务器
- # 如果不知道如何查看授权码,请查看这一篇博客:https://www.cnblogs.com/zzpython/p/13095749.html
- server = zmail.server("发送人邮箱.com",
- "QQ邮箱是用授权码",
- smtp_host="smtp.qq.com",
- smtp_port = 465)
- # 发送邮件
- server.send_mail("收件人QQ邮箱", mail)
- try:
- send_mail()
- except FileNotFoundError:
- print("未找到文件")
- else:
- print("发送成功")
复制代码 6. 结果分析
打开完成后生成的测试报告,可以看出本次测试共执行了2条测试用例,1条成功,1条失败:
最终发送测试报告邮件,截图如下:
|
|