python+requests+json 接口测试思路示例

实际项目中用python脚本实现接口测试的步骤:

1 发送请求,获取响应 》》 2 提取响应里的数据,对数据进行必要的处理 》》 3 断言响应数据是否与预期一致

以豆瓣接口为例,做一个简单的接口测试吧。使用到的知识涉及requests库,json库。

1 发送请求,获取响应

python 复制代码
#coding:utf-8
'''
dinghanhua
2018-11-10
接口返回数据为json类型,提取数据实例
'''

import requests
import json

q = 'python'
count = 3
url = 'https://api.douban.com/v2/book/search?q={0}&count={1}'.format(q,count)
response = requests.get(url) #请求并获取响应

2 json解析响应数据

python 复制代码
jsonstr = json.loads(response.text) #json解析响应文本 
#或者jsonstr = response.json()

'''解析后的数据格式'''
print('响应解析后的类型:',type(jsonstr)) #dict
print('响应解析后的键值对个数:',len(jsonstr)) #字典键值对个数
for key in jsonstr: #打印出所有的keys
    print(key ,end=' ')

3 提取数据及数据处理

python 复制代码
'''取json串里的值'''
books = jsonstr['books'] #取books对应的值
# print(type(books)) #list 数组
print('books共有%d本书'%len(books)) #数组元素个数

for book in books: #编辑books取每本书的信息
    # print(type(book)) # book的类型
    # for key in book: # book的keys
    #     print(key)
    '''取出所需的字段'''
    index = books.index(book) #索引
    NO = str(index+1) #第几本书
    average= book['rating']['average']

    author = book['author'] #author是数组,可能有多个作者
    authors = ','.join(author)
 
    pubdate = book['pubdate']
    title = book['title']
    author_intro = book['author_intro']
    summary = book['summary']
    price = book['price']

    '''格式化输出'''
    print('NO.{NO}\n书名:{title}\n出版日期:{pubdate}\n平均分:{average}\n定价:{price}\n'
          '作者:{author}\n{author_intro}\n内容简介:{summary}'.format(title = title,
                                                                NO = NO,
                                                                pubdate = pubdate,
                                                                author = authors,
                                                                author_intro = author_intro,
                                                                average = average,
                                                                price = price,
                                                                summary = summary))

4 断言

python 复制代码
 '''断言'''
    expectedtitle = ['Python编程:从入门到实践','利用Python进行数据分析','Python基础教程'] #预期结果(接口数据会变,根据实际情况添加预期结果)

    if title ==  expectedtitle[index]:
        print('test pass')
    else:
        print('test fail. The expected title is %s,but the actual title is: %s.'%(expectedtitle[index],title))

好了,简单的接口测试脚本完成。完整代码:

python 复制代码
#coding:utf-8
'''
dinghanhua
2018-11-10
接口返回数据为json类型,提取数据实例
'''

import requests
import json

q = 'python'
count = 3
url = 'https://api.douban.com/v2/book/search?q={0}&count={1}'.format(q,count)
response = requests.get(url) #请求并获取响应

jsonstr = json.loads(response.text) #json解析响应文本
#jsonstr = response.json()


'''解析后的数据格式'''
print('响应解析后的类型:',type(jsonstr)) #dict
print('响应解析后的键值对个数:',len(jsonstr)) #字典键值对个数
for key in jsonstr: #打印出所有的keys
    print(key ,end=' ')

'''取json串里的值'''
books = jsonstr['books'] #取books对应的值
# print(type(books)) #list 数组
print('books共有%d本书'%len(books)) #数组元素个数

for book in books: #编辑books取每本书的信息
    # print(type(book)) # book的类型
    # for key in book: # book的keys
    #     print(key)
    '''取出所需的字段'''
    index = books.index(book) #索引
    NO = str(index+1) #第几本书
    average= book['rating']['average']

    author = book['author'] #author是数组,可能有多个作者
    authors = ','.join(author)
    
    pubdate = book['pubdate']
    title = book['title']
    author_intro = book['author_intro']
    summary = book['summary']
    price = book['price']

    '''格式化输出'''
    print('NO.{NO}\n书名:{title}\n出版日期:{pubdate}\n平均分:{average}\n定价:{price}\n'
          '作者:{author}\n{author_intro}\n内容简介:{summary}'.format(title = title,
                                                                NO = NO,
                                                                pubdate = pubdate,
                                                                author = authors,
                                                                author_intro = author_intro,
                                                                average = average,
                                                                price = price,
                                                                summary = summary))

    '''断言'''
    expectedtitle = ['Python编程:从入门到实践','利用Python进行数据分析','Python基础教程'] #预期结果

    if title ==  expectedtitle[index]:
        print('test pass')
    else:
        print('test fail. The expected title is %s,but the actual title is: %s.'%(expectedtitle[index],title))
相关推荐
(・Д・)ノ21 分钟前
python打卡day31
开发语言·人工智能·python
北漂老男孩28 分钟前
JavaScript 性能优化实战指南
开发语言·javascript·性能优化
yorushika_41 分钟前
python打卡训练营打卡记录day31
开发语言·python·机器学习
qq_25183645744 分钟前
基于springboot3 VUE3 火车订票系统前后端分离项目适合新手学习的项目包含 智能客服 换乘算法
java·开发语言·spring boot·后端·学习
乐言3611 小时前
目前主流的AI测试工具推荐
人工智能·测试工具
oioihoii1 小时前
C++23:修正常量迭代器、哨兵和范围
java·开发语言·c++23
老歌老听老掉牙1 小时前
SymPy|主元、重新表示、分数、约分表达式、极限、级数、ode、获取值、输出形式
python·sympy·符号运算
熊猫在哪1 小时前
野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(三)用yolov5-face算法实现人脸检测
人工智能·python·嵌入式硬件·神经网络·yolo·目标检测·机器学习
投笔丶从戎2 小时前
Kotlin Multiplatform--04:经验总结(持续更新)
android·开发语言·kotlin