公司项目启用新框架,前后端分离,所以接口测试成为测试工作中不可缺失的一个环节,现在将从0开始搭建接口自动化测试框架的路程,一步步记录下来。
开发语言我们采用Python+第三方库Requests,测试框架使用Unittest。
前期在网上看了很多相关接口自动化的视频,都是采用Python+Requests,看了视频感觉还是比较方便的。在Pycharm中新建一个工程,新建demo.py
#!/usr/bin/env python
# coding=utf-8 import requests
import json class RunMain:
def __init__(self):
pass @staticmethod
def send_post(url,cookies,headers,params=None):
try:
res = requests.post(url=url,cookies=cookies,headers=headers,data=params)
print("请求地址:", res.url)
print("返回状态:", res.status_code)
print("响应时间:", res.elapsed)
try:
print("响应数据格式为:JSON")
print("响应数据:", json.dumps(res.json(), sort_keys=True, indent=2, ensure_ascii=False))
except json.decoder.JSONDecodeError:
print("响应数据格式为:文本")
print("响应文本:", res.text)
return res
except Exception as msg:
return msg @staticmethod
def send_get(url,cookies,headers,params=None,):
try:
res = requests.get(url=url,cookies=cookies,headers=headers,params=params,)
print("请求地址:",res.url)
print("返回状态:",res.status_code)
print("响应时间:",res.elapsed)
try:
print("响应数据格式为:JSON")
print("响应数据:", json.dumps(res.json(), sort_keys=True, indent=2, ensure_ascii=False))
except json.decoder.JSONDecodeError:
print("响应数据格式为:文本")
print("响应文本:", res.text)
return res
except Exception as msg:
return msg def run_main(self, url, method,cookies=None,headers=None,params=None):
if method == 'GET' or 'G':
print('请求类型: GET')
res = self.send_get(url,cookies,headers,params)
return res
elif method == 'POST' or 'P':
print('请求类型:POST')
res = self.send_post(url,cookies,headers,params)
return res
else:
print('不支持的请求方式!')
其他 HTTP 请求类型:PUT,DELETE,HEAD 以及 OPTIONS,可以在上述run_main中自助扩展,因公司主要接口为get/post,所以此处不再继续编写。
测试一下我们的代码:
url = "http://apis.juhe.cn/mobile/get"
headers={
"Content-Type":"application/json"
}
params = {
"phone": "",
"dtype": "json",
"key": "*****" //密匙
}
RunMain().run_main(url=url, method='G',headers=headers, params=params)
我们使用免费接口聚合数据进行测试,测试手机归属地查询。
运行代码后可以返回手机号码归属地、区号、运行商、邮政编码等信息。
在demo.py代码中:
json.decoder.JSONDecodeError
这个声明异常的作用,是为了防止get或post返回值为非json而引起的异常,出现此错误时证明返回值为非json格式,即显示文本内容。