python request接口测试笔记(1)

涉及到的功能说明:

  1. 需要登录拿到token,才能进行下一个接口的请求
  2. 读取csv文件中的信息,作为接口的参数
  3. 将接口响应结果,写入csv文件,以便分析统计
# -*- coding:utf-8 -*-
'''
author:***cy
time:2019-08-28
主要功能说明:
1、获取登录接口的token
2、接入食物识别的接口,批量测试食物识别模型,得出模型的正确率
'''
import requests
import json
import csv class FoodDetect(): def __init__(self):
print("----------------start----------------") '''获取token'''
def login_token(self): # 初始化登录接口
login_url = 'https://api.ty.com/oauth2/token?grant_type=password&sms_verify=true'
login_header = {"Authorization": "Basic T23DZZMfrrdFrTfdfR4esdFGrfrdfOjdmTFJyEmFmYzgxRDgwSfdfR="}
login_data = {
"username": "15012345678",
"password": "123456",
"appName": "ty",
"grant_type": "password",
"sms_verify": "true"
}
# 登录请求接口
r_login = requests.post(url=login_url, data=login_data, headers=login_header) # 获取登录的响应报文
print(r_login.text)
# login_response = json.loads(r_login.text)
# 保存登录的token信息
# access_token = login_response['access_token']
token = r_login.json()['access_token']
print(token)
'''请求接口获取token值'''
return token def detect_food(self): # 初始化
food_flag_init = 0
food_error_init = 0
food_fail_init = 0 # 读取csv文件
with open('E:\\test\\ty\\food_detect_init.csv', 'r') as csvFile:
reader = csv.reader(csvFile)
print(type(reader))
next(reader)
for row in reader: # 食物识别问答接口的请求参数msg
food_msg = {"msg": row[0]}
print(food_msg) # 获取登录接口中的token
food_headers = {"Authorization": "Bearer " + self.login_token()}
# 食物识别接口url
food_url = 'https://api.ty.com/nlp/api/v1.0/food_detect'
# 食物识别模型接口请求
r_food = requests.post(url=food_url, data=food_msg, headers=food_headers)
# 获取响应报文
print(r_food.text)
# 转换响应结果为dict格式
food_response = json.loads(r_food.text) # 判断响应结果是否为空,不为空,则获取cal_name和name的名称
if food_response:
print(food_response[0])
food_response_all = food_response[0]
food_response_all_one = food_response_all['properties']
# 获取cal_name的值
food_response_cal = food_response_all_one['cal_name']
food_response_name = food_response_all_one['name']
print("food的calname:" + food_response_cal)
#food_response_name
if food_response_cal == row[0]:
# 如果calname和输入的食物名称一致,则测试通过,写入food_py_success文件
"""
模型匹配的方法:先匹配name,然后和库里面的cal_name对比,这里需要修改一下判断条件
""" food_flag_init = food_flag_init + 1
print("food匹配成功%d" %food_flag_init)
else:
fail_data = ['food_name','name','cal_name']
food_fail_init = food_fail_init + 1
print("food匹配错误%d" %food_fail_init)
with open('E:\\test\\ty\\food_detect_fail.csv','a+',encoding='utf-8-sig') as ff: fail_data[0] = row[0]
fail_data[1] = food_response_name
fail_data[2] = food_response_cal
ff.write(','.join(fail_data))
ff.write('\n')
ff.close() else:
food_error_init = food_error_init + 1
print("food匹配失败%d" % food_error_init) # 将失败的食物name存在csv文件
error_data = ['name']
with open('E:\\test\\ty\\food_detect_error.csv','a+',encoding = 'utf-8-sig')as ef:
error_data[0] = row[0]
ef.write(','.join(error_data))
ef.write('\n')
ef.close() # 写入csv文件
data_row = ['food_real_name', 'food_response_name','food_response_cal']
with open('E:\\test\\ty\\food_detect_py.csv','a+',encoding='utf-8-sig') as f:
# csv_write = csv.writer(f)
data_row[0] = row[0]
data_row[1] = food_response_name
data_row[2] = food_response_cal # data_row = list(data_row)
# print(data_row)
f.write(','.join(data_row))
f.write("\n")
# f.write("\\n")
print("down")
f.close() # 打印食物匹配结果
print("food匹配成功%d" % food_flag_init)
print("food匹配错误%d" % food_fail_init)
print("food匹配失败%d" % food_error_init) csvFile.close() if __name__ == '__main__':
fd = FoodDetect()
fd.detect_food()

食物检测接口的响应结果格式如下:

[
{
"properties":{
"cal_name":"苹果汁",
"type":"food",
"index":4,
"food_id":4342,
"kcal_unit_weight":53.56,
"name":"苹果汁",
"start_index":0,
"time_stamp":1567226386
},
"sub_properties":{
"grams":543,
"is_default":true,
"quantifier_id":54,
"quantity":1,
"unit":"瓶"
},
"type":"Entity"
}
]

所以这里想要获取响应结果中的cal_name,需要先获取properties,代码如下:

food_response_all = food_response[0]
food_response_all_one = food_response_all['properties']
# 获取cal_name的值
food_response_cal = food_response_all_one['cal_name']

整体下来,批量测试接口模型的工作就是这样,其中将接口返回结果写入csv时,需要注意要换行写入,而且使用写入的格式是'a'或'a+'追加模式。

python request接口测试笔记(1)的更多相关文章

  1. python request 接口测试get和post请求

    开发IDE:pycharm python:2.7.10 get请求 # coding: UTF-8 #兼容中文字符,如果没有这句,程序中有中文字符时,运行会报错 import requests #引用 ...

  2. Python + request接口测试中Cookie和Session的获取和使用

    Cookie和Session的简单理解  由于Http协议是无状态的,所以产生了cookie和session进行状态的管理. 从哪里来,在哪里,到哪里去: --> Cookie是由服务端生成,存 ...

  3. python+request接口自动化框架

    python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...

  4. Python网络爬虫笔记(五):下载、分析京东P20销售数据

    (一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面 ...

  5. 【转】基于Python的接口测试框架实例

    下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...

  6. 阅读OReilly.Web.Scraping.with.Python.2015.6笔记---Crawl

    阅读OReilly.Web.Scraping.with.Python.2015.6笔记---Crawl 1.函数调用它自身,这样就形成了一个循环,一环套一环: from urllib.request ...

  7. 阅读OReilly.Web.Scraping.with.Python.2015.6笔记---找出网页中所有的href

    阅读OReilly.Web.Scraping.with.Python.2015.6笔记---找出网页中所有的href 1.查找以<a>开头的所有文本,然后判断href是否在<a> ...

  8. 阅读OReilly.Web.Scraping.with.Python.2015.6笔记---BeautifulSoup---findAll

    阅读OReilly.Web.Scraping.with.Python.2015.6笔记---BeautifulSoup---findAll 1..BeautifulSoup库的使用 Beautiful ...

  9. 基于Python的接口测试框架实例

    文章来源:http://www.jb51.net/article/96481.htm 下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. ...

随机推荐

  1. vue.js-vue入门教程教你如何html中使用vue(30分钟快速入门)

    前后端分离.微服务框架是当下比较流行的词汇,而vue就是前端框架的佼佼者.下面重点介绍一下vue的用法: vue起步:1.引包    2.启动new Vue({el:目的地,template:模板内容 ...

  2. 用python输出回文数

    一个b站上的朋友问我,怎么返回五位数的回文数的个数. 我首先百度回文数的概念,就是正读和倒读都一样的数字,例如:10001,99899 等等 数字的位数拆分一头雾水,思来想去,用字符串的方法完美解决! ...

  3. [学习笔记] pymysql入门

    一.快速开始 对于会用MySQL的朋友来说,开始使用pymysql可以说真的so esay,只要用下面的代码,把想要对数据库的操作放在 sql = " " 里就可以了. 没有接触过 ...

  4. ES 22 - Elasticsearch中如何进行日期(数值)范围查询

    目录 1 范围查询的符号 2 数值范围查询 3 时间范围查询 3.1 简单查询示例 3.2 关于时间的数学表达式(date-math) 3.3 关于时间的四舍五入 4 日期格式化范围查询(format ...

  5. Mac相关快捷键操作

    拷贝: shift + option + 拖动拖动至目的地 创建快捷方式: option + command + 拖动至目的地

  6. golang-http 请求---设置header与直接发

    背景 现在各种软件到处都是,写代码难免有时候需要http 调用其他的接口. 其实这个东西还挺常用,虽然很简单,但是写的时候 又忘,就像是提笔忘字,索性总结一下吧. 不需要设置header属性的http ...

  7. 创建软RAID5

    一  创建4块硬盘组软  RAID5  新增四块20G的新硬盘,将四块硬盘分别分区,全部大小都分为一个区,并改  id  为 “ fd ”      1创建阵列mdadm -Cv /dev/md5 - ...

  8. 经典SQL(sqlServer)

    一.基础 .说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) .分组: ...

  9. 大型系列课程之-七夕告白之旅vbs篇

    也许,世间所有的美好的东西,都是需要仪式感的,遇到了一年一度的七夕节,怎么过这个节日,成了很多心中有爱的人关注的事情,七夕不浪漫,人间不值得,七夕,发源于中国,这个美好的节日,来自动人的神话故事传说牛 ...

  10. Oracle创建设置查询权限用户

    用户创建的可以参考博客: https://blog.csdn.net/u014427391/article/details/84889023 Oracle授权表权限给用户: 语法:grant [权限名 ...