2021最全Python接口测试自动化教程【附学习资料】

小码哥说测试 2021-10-28 20:57:53
自动化 Python 测试 接口 最全

【摘要】 接口定义:接口普遍有两种意思,一种是API(Application ProgramInterface),应用编程接口,它是一组定义、程序及协议的集合,通过API接口实现计算机软件之间的相互通信。而另外一种则是Interface,它是面向对象语言如java,c#等中一个规范,它可以实现多继承的功能。接口测试中的接口指的是API。为什么要使用接口:假如公司的产品前端开发还没开发完,...

文章目录

一、接口定义
二、基本流程
三、需求分析
四、用例设计
五、脚本开发
六、自动化测试资源分享

一、接口定义

接口普遍有两种意思,一种是API(Application Program Interface),应用编程接口,它是一组定义、程序及协议的集合,通过API接口实现计算机软件之间的相互通信。而另外一种则是Interface,它是面向对象语言如java,c#等中一个规范,它可以实现多继承的功能。接口测试中的接口指的是API。

为什么要使用接口:

假如公司的产品前端开发还没开发完,接口开发好了。有天领导说,小王,你测下这个登录功能,要是你不懂接口的话就会对领导说这个功能测不了啊,页面没开发完。领导会把你!@¥@)¥!

接口测试是不需要看前端页面的,可以更早的介入到测试工作中,提高工作效率。

根据测试金字塔,越底层成本越低,一个底层的bug可能会引起上一层的多个bug,所以测试越底层,越能保证产品的质量,也越能节省测试的成本。而单元测试一般是由开发来完成的,所以对于测试来说,接口测试是非常必要的。

对于自动化测试来说,UI的变动性最大,所以UI自动化测试的维护成本很高。而接口的改动很小,所以接口自动化测试是最实用,最节约成本的。

二、基本流程

接口功能自动化测试流程如下:需求分析 -> 用例设计 -> 脚本开发 -> 测试执行 -> 结果分析


2.1 示例接口
手机号码归属地
接口地址: apis.juhe.cn/mobile/get
返回格式: json/xml
请求方式: get
请求示例: apis.juhe.cn/mobile/get?…

三、需求分析

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

四、用例设计

五、脚本开发

5.1 模块安装
使用pip命令安装即可:
pip install requests 复制代码
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" } # 自定义服务器 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条失败 

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

六、自动化测试资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于进阶自动化的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

在我的QQ技术交流群里(技术交流和资源共享,广告勿扰)

可以自助拿走,群号:310357728,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

版权声明
本文为[小码哥说测试]所创,转载请带上原文链接,感谢
https://blog.csdn.net/jiangjunsss/article/details/121016214

  1. python定义列表 新手入门级别
  2. Liste de définition Python débutant
  3. 如何用Python实现,急!!xdm
  4. 如何用Python實現,急!!xdm
  5. Comment implémenter en python, urgent!! Xdm
  6. 新猿木子李:0基础学python培训教程 Python操作Redis之hash类型
  7. python导入模块变量后,打印的值固定不变了,大老们怎么破。
  8. Why is my rust slower than Python!
  9. 用Python给喜欢的女孩写一个办公小工具,她说棒极了!
  10. python中\t是空一个tab,那这个1.2后面怎么没空格?
  11. Il y a un onglet vide en python, alors pourquoi n'y a - t - il pas d'espace après ce 1.2?
  12. 关于python中pygame.display.set_mode()的一点小问题
  13. 猜我能否用Python编程抢到茅台?已经全部开源到GitHub了
  14. python数据分析numpy 补充短试题
  15. 2W + word long article, an article on literacy python, numpy and pandas, recommended collection!
  16. Python培训-自动化运维常用库
  17. On the magical usage and principle of weak reference in Python
  18. Formation python - bibliothèques d'exploitation et de maintenance automatisées
  19. Python培训-HTTP与HTTPS之间的区别
  20. Python有哪些高级特性?
  21. Python代码阅读(第25篇):将多行字符串拆分成列表
  22. Quelles sont les fonctionnalités avancées de python?
  23. 运用python程序编写下面的的代码
  24. Python代码阅读(第25篇):将多行字符串拆分成列表
  25. 初学者 可以帮我看一下为什么Python程序运行不了吗
  26. 初學者 可以幫我看一下為什麼Python程序運行不了嗎
  27. Python代碼閱讀(第25篇):將多行字符串拆分成列錶
  28. Les débutants peuvent - ils m'aider à voir pourquoi le programme Python ne fonctionne pas?
  29. Lecture du Code Python (article 25): diviser les chaînes multilignes en listes
  30. Écrivez le code suivant en utilisant le programme Python
  31. Python exercises
  32. Python exercises
  33. Python exercises
  34. 随机试验数据函数统计分析python
  35. Python after class exercises (junior / October 11, 2021)
  36. python使用cv2.imread()读取图片失败
  37. python使用cv2.imread()讀取圖片失敗
  38. Python n'a pas lu l'image en utilisant cv2.imread ()
  39. Error debugging is accurate to lines, match case pattern matching... The official version of Python 3.10 is really friendly
  40. 100 basic Python interview questions Part II (41-60)
  41. Angry liver half moon! Python learning route + resource summary
  42. 如何用Python编写下列程序
  43. Comment écrire les programmes suivants en python
  44. 熬夜整理了2021年Python最新学习资料,分享给学弟学妹们【大学生必备】
  45. 朋友股票亏惨了,我一怒用Python爬取了证券最新数据
  46. Python爬虫高阶:微店混淆逆向解密
  47. Python爬虫开发学习全教程第二版,爆肝十万字【建议收藏】
  48. 我用Python逆向登录世界上最大的游戏平台,steam加密手段有多高明【内附源码】
  49. 我用Python爬取1000封情书助力室友表白班花,却反转再反转...原来这就是班花的终极秘密!
  50. 我用Python爬取了五千张美女图壁纸,每天一张忘记初恋!
  51. 我Python采集了新榜热门内容,原来这就是别人能成为自媒体大佬的秘密!
  52. 30个Python小游戏,上班摸鱼我能玩一天【内附源码】
  53. 【JS 逆向 AES逆向加密】Python爬虫实战,日子越来越有判头了
  54. python将两个列表进行合并,合并时删除重复元素
  55. J'a i utilisé Python pour accéder aux dernières données sur les titres.
  56. Rester debout tard pour trier les derniers documents d'apprentissage de Python 2021 et les partager avec les étudiants et les jeunes filles [Must for College Students]
  57. python中sklearn版本一直是0.0
  58. La version de sklearn en Python a toujours été 0.0
  59. django 自定义中间件如何忽略部分视图函数
  60. Comment les intergiciels personnalisés Django ignorent certaines fonctions de vue