• postman是一个跨平台的接口测试工具,下载链接在这里:https://www.getpostman.com/
  • unittest是一个单元测试框架,python中安装:pip install unittest
  • requests是一个发送http请求的库,安装:pip install requests

  官方文档:http://docs.python-requests.org/en/master/user/quickstart/,

  中文文档:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

以测试http://www.kuaidi100.com/query 为例:

有一个汇通快递的单号:350757819118

请求的url为http://www.kuaidi100.com/query?type=huitongkuaidi&postid=350757819118

用postman调试接口:

点击右上角的code,如下图:

以python--requests的格式复制:

复制得到的代码如下:


import requests

url = "http://www.kuaidi100.com/query"

querystring = {"type":"huitongkuaidi","postid":""}

headers = {
'cache-control': "no-cache",
'postman-token': "9794775a-f3eb-0322-1365-01b775fa9925"
} response = requests.request("GET", url, headers=headers, params=querystring) print(response.text)

新建py文件,命名为kuaidi.py,对复制的代码稍作调整:


import requests
import unittest class KuaiDi(unittest.TestCase):
def test_huitong_api(self):
url = "http://www.kuaidi100.com/query"
querystring = {"type":"huitongkuaidi","postid":""}
headers = {
'cache-control': "no-cache",
'postman-token': "9794775a-f3eb-0322-1365-01b775fa9925"
}
response = requests.request("GET", url, headers=headers, params=querystring).json()
#print(response)
self.assertEqual(response['status'],'') #断言
self.assertEqual(response['message'],'ok') #断言 if __name__ == '__main__':
unittest.main()

运行结果:

举例测试:

import requests
import json
import unittest
import time
from HTMLTestRunner import HTMLTestRunner class MyTest(unittest.TestCase):
def setUp(self):
print("[+]start") def tearDown(self):
print("[+]end") def zhongtong(self,type = "zhongtong", id = ""):
self.url = "http://www.kuaidi100.com/query"
self.params = {
"type":type,
"postid":id
}
self.headers={'user-agent': 'my-app/0.0.1'}
r = requests.get(url = self.url, params = self.params , headers = self.headers)
print(r.status_code)
return r class ExpressInquiry(MyTest):
def test001_type_valid(self):
print("")
zhongtong = self.zhongtong(type = "shentong")
self.assertIn("快递公司参数异常",zhongtong.text) def test002_type_invalid(self):
print("")
zhongtong = self.zhongtong(type = "sssssssssssss")
self.assertIn("参数错误",zhongtong.text) def test003_id_valid(self):
print("")
id = self.zhongtong(id = "")
self.assertIn("交通工程学院菜鸟驿站",id.text) def test004_id_invalid(self):
print("")
id = self.zhongtong(id = "")
self.assertIn("参数错误",id.text) def test005_type_id_invalid(self):
print("")
type_and_id = self.zhongtong(type = "dads",id = "")
#print(type_and_id.url)
#print(type_and_id.text)
self.assertIn("参数错误",type_and_id.text) def test006_type_id_null(self):
print("")
null = self.zhongtong(type = "", id = "")
#print(null.url)
#print(null.text)
self.assertIn("参数错误",null.text) def suite():
now = time.strftime("%Y-%m-%d %H_%M_%S")
filename = './' + now + 'test_result.html'
fp = open(filename,'wb')
runner = HTMLTestRunner(stream = fp,
title = "快递查询接口测试报告",
description = "测试用例执行情况:") suite = unittest.TestSuite()
suite.addTest(ExpressInquiry("test001_type_valid"))
suite.addTest(ExpressInquiry("test002_type_invalid"))
suite.addTest(ExpressInquiry("test003_id_valid"))
suite.addTest(ExpressInquiry("test004_id_invalid"))
suite.addTest(ExpressInquiry("test005_type_id_invalid"))
suite.addTest(ExpressInquiry("test006_type_id_null"))
#unittest.TextTestRunner().run(suite) runner.run(suite)
fp.close() if __name__ == '__main__':
#unittest.main(exit = False , verbosity = 2)
#它是全局方法,把它屏蔽后,不在suite的用例就不会跑,exit = False表示中间有用例失败也继续执行;还有比较常用的verbosity=2,表示显示def名字 suite()

 总结:

postman可以帮助完成一半的工作

unittest+requests可以实现断言,方便持续集成

 

最新文章

  1. Codeforces 731C Socks 并查集
  2. EF优缺点的理解
  3. 如何使用Android JetPlayer类
  4. JVM调优总结 -Xms -Xmx -Xmn -Xss
  5. Web 开发常见安全问题
  6. OC语言-08-深拷贝与浅拷贝详解(示例)
  7. Spring 集成 Hibernate 和 Struts 2
  8. Shifting List Item Values From One List To Another In Oracle Forms
  9. Sprint第二个冲刺(第二天)
  10. SQLite 对中文路径的支持(用到了StringToWideChar和Utf8Encode在D7的System单元中自带)
  11. acdream1412:2-3 trees 组合数dp
  12. iOS发展 - 使用您自己的自定义字体
  13. python3 第十章 - 如何进行进制转化
  14. 11 个简单的 Java 性能调优技巧
  15. defaultdict的威力
  16. Spring常用注解总结(2)
  17. .NET记录-获取外网IP以及判断该IP是属于网通还是电信
  18. [android] 请求码和结果码的作用
  19. Nginx 如何增大nginx使用cpu有效时长
  20. BZOJ 4242: 水壶(Kruskal重构树 + Bfs)

热门文章

  1. 文件上传C:\fakepath\解决方案
  2. RT-thread国产实时操作系统概述
  3. 【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线 二分+SPFA
  4. axios post提交数据格式不对的问题
  5. python函数调用关系图(python call graph)
  6. python-输出颜色显示
  7. [洛谷P4721]【模板】分治 FFT_求逆
  8. [NOI2009]管道取珠 DP + 递推
  9. BZOJ1047:[HAOI2007]理想的正方形——题解
  10. 《Java程序设计》第五周学习总结 20165218 2017-2018-2