接口手工测试
前面让大家根据 白月SMS系统的 接口文档, 练习写接口测试用例,
现在我们根据下面的用例文档, 先进行 手工测试
我们自己开发测试工具, 使用Python和requests库, 发送和接收 测试用例中 的API接口消息。
范例1
先来看 登录 API 的用例 API-0001
首先,这个用例有个前置条件,也就是这个用例执行所需要的数据环境:
手工测试的时候,怎么保证用例的数据环境呢?
测试者 人工检查
,如果有客户、药品、订单,将其删除即可。
如果测试的时候,系统前端已经开发完毕,在前端删除。否则可以通过 API 删除接口删除。
尽量不要在数据库中直接删除数据。
接下来,用例要求 发送一个 登录请求,HTTP消息体填入正确的管理员用户名、密码。
根据接口文档对登录API消息的描述,结合前面学过的 requests库,我们可以很方便的写下如下代码
import requests
# 打印HTTP响应消息的函数
def printResponse(response):
print('\n\n-------- HTTP response * begin -------')
print(response.status_code)
for k, v in response.headers.items():
print(f'{k}: {v}')
print('')
print(response.content.decode('utf8'))
print('-------- HTTP response * end -------\n\n')
response = requests.post("http://127.0.0.1/api/mgr/signin",
data={
'username': 'byhy',
'password': '88888888'
}
)
printResponse(response)
运行结果为
-------- HTTP response * begin -------
200
Date: Thu, 26 Sep 2019 03:09:38 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
Content-Length: 10
Vary: Cookie
Set-Cookie: sessionid=2lixzp270i2q8um3thixexjdedj0puyz; expires=Thu, 10 Oct 2019 03:09:38 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=Lax
{"ret": 0}
-------- HTTP response * end -------
我们发现打印出来的 状态码,消息头中的contenttype,消息体 都符合预期,这个用例就可以填入测试通过了。
范例2
我们再来看 用例 API-0102
根据接口文档对列出客户API消息的描述,结合前面学过的 requests库,我们可以很方便的写下如下代码
import requests
# 打印HTTP响应消息的函数
def printResponse(response):
print('\n\n-------- HTTP response * begin -------')
print(response.status_code)
for k, v in response.headers.items():
print(f'{k}: {v}')
print('')
print(response.content.decode('utf8'))
print('-------- HTTP response * end -------\n\n')
# 创建 Session 对象
s = requests.Session()
# 通过 Session 对象 发送请求
response = s.post("http://127.0.0.1/api/mgr/signin",
data={
'username': 'byhy',
'password': '88888888'
})
# 通过 Session 对象 发送请求
response = s.get("http://127.0.0.1/api/mgr/customers",
params={
'action' : 'list_customer',
'pagesize' : 10,
'pagenum' : 1,
'keywords' : '',
})
printResponse(response)
运行结果为
-------- HTTP response * begin -------
200
Date: Thu, 26 Sep 2019 03:11:29 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
Content-Length: 37
Vary: Cookie
{"ret": 0, "retlist": [], "total": 0}
-------- HTTP response * end -------
和预期一致,也可以给该用例写上测试通过。
发送接收API消息封装到库中
我们还有很多测试用例要完成,还需要写很多的发送接收的代码。
我们思考一下,可以发现,可以把 发送接收API消息封装到库中,这样可以使我们的测试代码更加简洁。
比如,我们可以创建一个 webapi.py的库
import requests
from pprint import pprint
class APIMgr:
def _printResponse(self,response):
print('\n\n-------- HTTP response * begin -------')
print(response.status_code)
for k,v in response.headers.items():
print(f'{k}: {v}')
print('')
print(response.content.decode('utf8'))
print('-------- HTTP response * end -------\n\n')
def mgr_login(self,username,password):
self.s = requests.Session()
response = self.s.post("http://127.0.0.1/api/mgr/signin",
data={
'username': username,
'password': password
}
)
self._printResponse(response)
return response
def customer_list(self,pagesize,pagenumber,keywords):
response = self.s.get("http://127.0.0.1/api/mgr/customers",
params={
'action' :'list_customer',
'pagesize' :pagesize,
'pagenum' :pagenumber,
'keywords' :keywords,
})
self._printResponse(response)
return response
这样,我们就可以在测试代码文件中,如下方式调用库
是不是要方便很多呢?