前言
之前介绍了接口测试中需要关注得测试点,现在我们来看看如何进行接口测试,现在接口测试工具有很多种,例如:postman,soapui,jemter等等,对于简单接口而言,或者我们只想调试一下,使用工具是非常便捷而且快速得,但是对于更复杂得场景,这些工具虽然也能实现,但是难度要比写代码更大,而且定制化受到工具得功能影响,会遇到一些障碍,当然我们还要实现自动化等等,鉴于以上因素,我们还是要学会使用代码进行接口测试,便于维护与扩展,或者算是我们知识得补充把~
requests库是python用来发起http/https请求得第三方库,支持get,post,put,delete等,requests特点是简单便捷、功能丰富,能够满足日常测试需求,所以我们选取requests库进行接口测试。
第一部分:基础部分
以一个简单的get接口为例
import
requests
import
json
import
io
import
syssys.stdout =
io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8') #解决Python3无法输出中文的问题第三部分:进阶部分
url="https://api.douban.com/v2/book/search"
params={ "q":"python", "start":"0", "count":"10" }
response=requests.get(url,params=params)
1.响应信息(response)解析
#print(response.text)
print(response.content)
##下面是输出信息,太长了,此处仅显示前面部分,后面省略。下同。
b'{"count":10,"start":0,"total":1701,"books":[{
response.text是以str的形式返回的响应信息
response.content是以bytes形式返回
2.获取状态码
print('返回响应状态码:',response.status_code)
##输出
返回响应状态码: 200
3.获取headers信息
print('获取headers信息:',response.headers)
##输出
获取headers信息: {'Date': 'Sun, 02 Sep 2018 02:32:39 GMT',
'Content-Type': 'application/json;
4.获取COOKIEs信息
print('获取COOKIEs信息:',response.COOKIEs)
##输出
获取COOKIEs信息: ]>
注意:这里与其他部分稍有不同,返回COOKIEs的信息为COOKIEs对象,而不是像前面部分返回得是字符串或者字典,COOKIEs解析部分在后面会进行单独说明
5.获取请求url
print('获取请求url:',response.url)
##输出
获取请求url:
https://api.douban.com/v2/book/search?q=python&start=0&count=10
6.获取反序列化后的得信息:
res=response.json()
print('获取反序列化后的信息:',res)
##输出
获取反序列化后的信息: {'count': 10, 'start': 0, 'total': 1701,
'books': [{
注意:只有在返回信息为json格式时才能使用,否则会报json异常
7.获取响应时间
print(response.elapsed)
print(response.elapsed.microseconds)
print(response.elapsed.seconds)
print(response.elapsed.total_seconds())
##输出
0:00:00.413287
413287
0
0.4132
第二部分:进阶部分
通常我们要想获取正确得响应信息需要传递一些参数,针对不同得请求,传参方式稍有不通,下面我们来看一下这里get接口和一个post接口。
1.get请求传递参数
url="https://api.douban.com/v2/book/search"
params={ "q":"python", "start":"0", "count":"10" }
response=requests.get(url,params=params)
说明:先定义一个参数字典,然后将参数字典以params参数传递给get方法
2.post请求传递参数(这部分暂未有实例,先转载他人的代码)
post传递参数和get有所不同,根据服务端取值方式进行不同方式的传递
如果是传递的json格式的参数
p={"name":"john","age":17}
response=requests.post("http://localhost:5000/post_params",json=p)
print(response.text)
###输出:
{"name":
"john", "age":
17}
如果是以html中form的形式传递参数
response=requests.post("http://localhost:5000/post_params",data=p)
print(response.text)
如果是form传递的是json格式需要以下面的方式
response=requests.post("http://localhost:5000/post_params",data=json.dumps(p))
print(response.text)
说明:需要将字典形式的参数转换为json格式,再进行传递
根据服务端的情况选中一种方式进行传递参数,通常情况下这三种情况可以满足测试需求
第三部分:高级部分
1.操作COOKIEs
有时候由于服务端需要取得COOKIEs信息来进行用户身份验证,
或者另外一些用户信息来进行逻辑处理,这时候我们在测试接口时需要手动获取COOKIEs信息和添加COOKIEs信息到请求中。
这里我定义一个登陆函数Login(),获取COOKIE,将COOKIE对象转换为字典形式的,然后返回备用。
response=requests.post(url=url,data=data)
#将COOKIEs转换成字典dict形式的
COOKIEs=requests.utils.dict_from_COOKIEjar(response.COOKIEs)
#返回COOKIEs给其他接口使用 return
COOKIEs
然后再下个接口中,直接调用该函数所返回的COOKIEs
#COOKIEs直接调用login函数中的COOKIEs值
res=requests.get(url=url,params=params,COOKIEs=Login())
转载自https://www.jb51.net/article/143333.htm,代码部分有做修改