说明:
此次接口测试实例是基于天气API
所需相关
- python3
- unittest框架
- requests模块
测试API
- 测试的API为:天气API
- 接口URL:https://www.sojson.com/open/api/weather/json.shtml
- 请求方式GET
- 参数:
city
为各城市名称 - 接口返回格式
{
"status": 200,
"data": {
"wendu": "29",
"ganmao": "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。",
"forecast": [
{
"fengxiang": "南风",
"fengli": "3-4级",
"high": "高温 32℃",
"type": "多云",
"low": "低温 17℃",
"date": "16日星期二"
},
{
"fengxiang": "南风",
"fengli": "微风级",
"high": "高温 34℃",
"type": "晴",
"low": "低温 19℃",
"date": "17日星期三"
},
{
"fengxiang": "南风",
"fengli": "微风级",
"high": "高温 35℃",
"type": "晴",
"low": "低温 22℃",
"date": "18日星期四"
},
{
"fengxiang": "南风",
"fengli": "微风级",
"high": "高温 35℃",
"type": "多云",
"low": "低温 22℃",
"date": "19日星期五"
},
{
"fengxiang": "南风",
"fengli": "3-4级",
"high": "高温 34℃",
"type": "晴",
"low": "低温 21℃",
"date": "20日星期六"
}
],
"yesterday": {
"fl": "微风",
"fx": "南风",
"high": "高温 28℃",
"type": "晴",
"low": "低温 15℃",
"date": "15日星期一"
},
"aqi": "72",
"city": "北京"
},
"message": "OK"
}
实例
用例设计
测试场景 | 用例描述 | 期望结果 |
---|---|---|
正常参数 | 传入正常的参数 | 返回:Success提示信息。 |
异常参数 | 传入数字,特殊字符等 | 返回:Check the parameters提示信息。 |
参数为空 | 不传参数 | 返回:Check the parameters提示信息。 |
代码实现
import unittest
import requests
from urllib import parse
from time import sleep
class WeatherTest(unittest.TestCase):
def setUp(self):
# 接口地址
self.url = 'https://www.sojson.com/open/api/weather/json.shtml'
# 代理设置,避免ip被封
# 根据协议类型,选择不同的代理
proxies = {
"http": "http://123.134.156.279:8888",
"https": "http://123.134.156.279:8888",
}
def test_weather_sh(self):
'''测试上海天气'''
data = {'city': '上海'}
# 中文需要把传入的参数对转换为url标准格式
city = parse.urlencode(data).encode('utf-8')
# 发送请求
r = requests.get(self.url, params=city) # 如果需要代理再加个参数proxies
result = r.json()
#断言
self.assertEqual(result['status'], 200)
self.assertEqual(result['message'], 'Success !')
self.assertEqual(result['city'], '北京')
# 设置间隔时间,避免ip被封
sleep(3)
def test_weather_param_error(self):
'''异常参数'''
data = {'city': '343sad'}
r = requests.get(self.url, params=city)
result = r.json()
# 断言
self.assertEqual(result['message'], 'Check the parameters.')
sleep(3)
def test_weather_param_null(self):
'''参数为空'''
r = requests.get(self.url)
result = r.json()
# 断言
self.assertEqual(result['status'], 400)
self.assertEqual(result['message'], 'Check the parameters.')
sleep(3)
if __name__ == '__main__':
unittest.main()
好了,一个简单的接口测试实例就先到这了。通过代码可以发现很多代码都是重复的,其实还可以继续优化,实现数据驱动。等下次再分享吧。
网友评论