接口测试
程序员文章站
2024-03-24 10:20:28
...
当不能够白盒测试的时候,可以快速选择接口测试,测试后台逻辑
接口文档要素:
1、接口地址、请求方式
2、接口描述,使用场景,需要的前置,与其他接口的关系
3、请求头内容,有token、session等身份信息,需说明获取方式和有效期,提供示例数据
4、接口请求、响应报文结构,需说明参数类型、是否必填、长度、值代表信息和对应的描述,提供示例数据 5、就是创造测试数据,如果接口前置可以测试自行插入数据,需要提供接口使用的表的结构
接口测试要点:
json格式测试 |
传参非json,返回对应error值 |
默认值测试 |
确认默认值 |
异常类型测试 |
int、str等类型的转换 |
必传项测试 |
比传项不传,会有对应errorcode值 |
非必传项 |
不传有相应的结果 |
非空测试 |
Value=null |
业务逻辑测试 |
查询数据库增删改查 |
兼容性 |
前端的兼容 |
错误码测试 |
错误码是否全面,是否清晰说明问题 |
数据异常测试 |
长度类型 |
返回值测试 |
内容,类型, |
加密测试 |
|
组合场景测试 |
|
1.GET
# coding=utf-8
# author:
import requests # 导入requests模块
import unittest # 导入Python单元测试框架unittest
# import json # 导入json
class RequestGet(unittest.TestCase):
'''
使用requests模块的Get请求方法测试
'''
def test_get_without_param(self):
"""
测试GET请求无参数
:return:
"""
# 请求的接口地址
url = 'http://api.zhongchou.cn/deal/list?v=1'
# para = {}
# 获取响应内容
res = requests.get(url,)
# 将返回内容转换为json格式
jresult = res.json()
# print jresult
# 判断errno的值不为空
if (jresult['errno'] != ""):
# 断言:验证errno的值为0
self.assertEqual(0, jresult['errno']) #
self.assertEqual(200,res.status_code) # 验证返回的状态码为200
#print "接口/deal/list----------OK!"
else:
#print "接口/deal/list----------Failure!"
if __name__ == '__main__':
unittest.main()
2、Post
# coding=utf-8
# author:
import requests
import unittest
class RequestPost(unittest.TestCase):
'''
使用Requests的post请求测试登录接口
'''
def test_post_login(self):
# 测试登录
posturl = "http://api.zhongchou.cn/user/login?v=1"
postdata = {'identity': '18311338905', 'password': 'a000000'}
res = requests.post(posturl, postdata)
jresult = res.json()
print res.text
print jresult['data']['userID']
if (jresult['errno'] != ""):
self.assertEqual('765a03f489ef55e284bcefd1', jresult['data']['userID'])
print "接口/user/login----------OK!"
else:
print "接口/user/login----------Failure!"
self.assertEqual(0, 1)
if __name__ == '__main__':
unittest.main()
3.注意点
需要登录的接口,加入headers,token和session,可以通过抓包工具抓取或者问开发直接要
#_/_/_/_/前置_/_/_/_/
def setUp(self):
self.headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) ',
'Accept':'application/json',
# 'Content-Type':'application/json',
# 'Accept-Language ':'zh-CN',
'X-CSRFToken':'KyeUya7GfZuMbJQ5xGxTI0xX4xUyC4yUCbBE3OdcNac76ni4WNPQLGP3Rtz7Z4bY',
'Authorization':'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjEwMDAwMDAwMDgxIiwidXNlcl9pZCI6MTE2NjksImVtYWlsIjoiIiwiZXhwIjoxNTE2NTE1MjYzfQ.jyGsMsY-Hxz-4kx6ILPOVC9s8wNVe6r_A3zoTc1vzLo'}
#/api/reading/begin/
def test_readingBegin(self):
result = requests.get('https://#####################',headers = self.headers)
self.assertEqual(200,result.status_code,'请求失败')
注意自己测试的服务器支持解析的格式
当时application/json的时候,我们使用
result = requests.post('https://#####################',',json = self.postdata5,headers = self.headers)
用json=这种方式直接把字典类型的python数据转化成,json,
bingo
上一篇: execl导入
下一篇: SAAS软件架构——数据层架构实践