主要思路:

  1. 连接mysql数据库,这里数据库需要使用Proxifier来设置代理,然后才能正常连接
  2. 获取mysql数据库中某一数据,作为接口的参数信息
  3. 将接口返回结果保存至csv数据表中
# -*- coding:utf-8 -*-
'''
主要功能:
1、连接mysql数据库
2、将返回结果保存至本地文件
''' import pymysql
import urllib.request
import requests
import json class TestMysql(): def __int__(self):
self.address = "mysql://127.0.0.1/" #连接mysql
def connect(self):
flag_init = 0
error_init = 0
error_fail_init = 0
# 初始化接口参数
login_url = 'https://api.ty.com/oauth2/token?grant_type=password&sms_verify=true'
login_header = {"Authorization": "Basic E23werredW3uY243hY5guaXBob76lOrdfREWdfZtrFtfYtfggREWDYTE="}
login_data = {
"username": "15012345678",
"password": "123456",
"appName": "hea-by",
"grant_type": "password",
"sms_verify": "true"
}
# 登录请求接口
r_login = requests.post(url=login_url, data=login_data, headers=login_header) # api_token = '785f510b-95d1-4bfe-8b4b-faa7fdbc8c23' #连接mysql
conn = pymysql.connect(host = 'mysql.beta.ty.net',
port = 3306,
user = 'root',
password = '123456',
db = 'test',charset='utf8')
# conn.set_character_set('utf-8')
# 通过获取到的数据库连接conn下的cursor()方法来创建游标
cur = conn.cursor()
# cur.execute("set NAMES gbk") # 一般到这一步就行了
# cur.execute('SET CHARACTER SET gbk;')
# cur.execute('SET character_set_connection=gbk;') # 打印查询数据库的表中符合的数据数目
test_name_count=cur.execute("select `name` from t_test_nutrition_info;")
print(test_name_count)
# 打印表中的多少数据
test_name_info = cur.fetchmany(test_name_count)
for i in test_name_info:
print(i)
print(type(i))
x = list(i)
print(x) #接口调用 food_data = {
"msg": x[0]
} print(x[0])
# list转换为str,下面响应无结果使用
food_string = "".join(x[0])
print(type(food_string)) print("请求食材名称:" + food_string) print(food_data) # 获取响应报文
print(r_login.text)
print(type(r_login))
response = json.loads(r_login.text) access_token = response['access_token']
food_headers = {"Authorization": "Bearer " + access_token}
food_url = 'https://api.ty.com/food_detect' r_food = requests.post(url = food_url,json= food_data,headers = food_headers) #发送请求接口
# 获取响应报文 # 转换为dict格式
food_response = json.loads(r_food.text)
print(r_food)
print(r_food.json())
print(type(r_food.json()))
print(type(food_response)) # 判断响应结果是否为空,不为空,则获取dict中的第一个
if food_response:
print(food_response[0])
food_response_one = food_response[0]
# 取得AI识别的食物名称
cal_name = food_response_one['properties']['cal_name']
print(cal_name)
# 取得输入的食物名称
food_name = food_response_one['properties']['name']
print(food_name)
# 判断食物和AI是否一致
if cal_name == food_name:
flag_init = flag_init + 1
print("食材匹配成功:%d" %flag_init)
# 首先将字符串转换为list或dict
print(type(cal_name))
food_dict = eval("{'cal_name':cal_name,'name':food_name}")
print(food_dict)
print(type(food_dict))
# 将字典转换为json格式
food_json =json.dumps(food_dict,ensure_ascii= False)
# 识别成功的食材追加保存在文件success_food.json中
file_save = open('success_food.json','a')
file_save.write(food_json)
file_save.close() else:
print(food_name)
error_init = error_init + 1
print("食材匹配失败:%d" %error_init)
# 写入本地保存匹配失败的食材名称
food_error_dict = eval("{'cal_name':cal_name,'name':food_name}")
#将字典转换为json格式
food_error_json = json.dumps(food_error_dict,ensure_ascii=False)
# 识别识别的食材保存在fail_food.json文件中
file_error_save = open('error_food.json','a')
file_error_save.write(food_error_json)
file_error_save.close() else:
error_fail_init = error_fail_init + 1
print("食材没有找到%d"%error_fail_init )
# 写入本地保存没有找到的食材名称
food_fail_dict = eval("{'name':food_string}")
# 将字典转换为json格式
food_fail_json = json.dumps(food_fail_dict,ensure_ascii= False)
file_fail_save = open('fail_food.json','a')
file_fail_save.write(food_fail_json)
file_fail_save.close() # 重新保存文件success_food.json、error_food.json、fail_food.json # food_response_one = food_response[0]
# cal_name = food_response_one['properties']['cal_name']
# print(cal_name)
#
# # 获取食物名称
# food_name = food_response_one['properties']['name']
# print(food_name)
# # 判断食物和AI是否一致
# if cal_name == food_name :
# flag_init = flag_init + 1
# print("食材匹配成功:%d" %flag_init )
# else:
# print(food_name)
# error_init = error_init + 1
# print("食材匹配失败:%d" %error_init)
# #获取响应状态码
# print(r_food.status_code) # 关闭游标
cur.close()
# 关闭连接
conn.commit()
conn.close() if __name__ == '__main__': tm = TestMysql()
tm.connect() print("----------测试结束----------")

该代码主要实现了连接数据库,将数据库中的某一数据保存为接口的一个参数,同时保存响应结果到本地文件。

python requests接口测试系列:连接mysql,获取mysql查询的值作为接口的入参的更多相关文章

  1. Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据

    Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...

  2. Python+Requests+Xpath实现动态参数获取实战

    1.古诗文网直接登录时,用浏览器F12抓取登录接口的入参,我们可以看到框起来的key对应的value是动态参数生成的,需获取到: 2.登录接口入参的值一般是登录接口返回的原数据值,若刷新后接口与对应源 ...

  3. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  4. Python+Requests接口测试教程(2):

    开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...

  5. Python+Requests接口测试教程(2):requests

    开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...

  6. python requests 接口测试

    1.get方法请求接口 url:显而易见,就是接口的地址url啦 headers:请求头,例如:content-type = application/x-www-form-urlencoded par ...

  7. Python+Django+SAE系列教程12-----配置MySQL数据库

    由于SAE上支持的是Mysql,首先我们要在本地配置一个Mysql的环境 ,我在网上找到MySQL-python-1.2.4b4.win32-py2.7.exe,并双击 安装 选择典型安装 安装结束后 ...

  8. python requests接口测试

    Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最 ...

  9. python 模块 wmi 远程连接 windows 获取配置信息

    测试工具应用: https://ask.csdn.net/questions/247013 wmi连接不上报错问题集 https://blog.csdn.net/xcntime/article/det ...

随机推荐

  1. Golang高效实践之interface、reflection、json实践

    前言 反射是程序校验自己数据结构和类型的一种机制.文章尝试解释Golang的反射机制工作原理,每种编程语言的反射模型都是不同的,有很多语言甚至都不支持反射. Interface 在将反射之前需要先介绍 ...

  2. spark 源码分析之十九 -- Stage的提交

    引言 上篇 spark 源码分析之十九 -- DAG的生成和Stage的划分 中,主要介绍了下图中的前两个阶段DAG的构建和Stage的划分. 本篇文章主要剖析,Stage是如何提交的. rdd的依赖 ...

  3. jquery 操作HTML data全局属性缓存的坑

    data-* 全局属性 是一类被称为自定义数据属性的属性,它赋予我们在所有 HTML 元素上嵌入自定义数据属性的能力,并可以通过脚本(一般指JavaScript) 与 HTML 之间进行专有数据的交换 ...

  4. 并发编程之Java内存模型

    在介绍Java内存模型之前,先来了解一下为什么要有内存模型,以及内存模型是什么.然后我们基于对内存模型的了解,学习Java内存模型以及并发编程的三大特性. 为什么要有内存模型 在计算机中,所有的运算操 ...

  5. O2优化的实质

    重点:如果使用多个-O选项(包含或不包含级别编号),则最后一个选项是有效的选项.------------ ------------ ------------例如:#pragma GCC optimiz ...

  6. 【Android】Genymotion 模拟器 Unable to create virtual device

    安装 Genymotion 模拟器的时候报了这个错误,如下: 后来找到了解决方法,见下图: 在 Setting -> Network, 勾选 Use HTTP Proxy, HTTP Proxy ...

  7. python中对多态的理解

    目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...

  8. docker的基本安装和命令详解

    docker的安装 yum install docker-io docker的启动 /bin/systemctl start docker.service docker查找镜像 docker sear ...

  9. 从“n!末尾有多少个0”谈起

    在学习循环控制结构的时候,我们经常会看到这样一道例题或习题.问n!末尾有多少个0?POJ 1401就是这样的一道题. [例1]Factorial (POJ 1401). Description The ...

  10. Golang版本的rocksdb-对gorocksdb的封装

    rocksdb的优秀特性不用多说,但是它是用c++语言写的,就是这一个特点就把很多人拦住了.虽然rocksdb官方也有Java版本,但是Golang的发展速度让人不容小觑,而且由于golang原生对高 ...