python requests接口测试系列:连接mysql,获取mysql查询的值作为接口的入参
主要思路:
- 连接mysql数据库,这里数据库需要使用Proxifier来设置代理,然后才能正常连接
- 获取mysql数据库中某一数据,作为接口的参数信息
- 将接口返回结果保存至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查询的值作为接口的入参的更多相关文章
- Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据
Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...
- Python+Requests+Xpath实现动态参数获取实战
1.古诗文网直接登录时,用浏览器F12抓取登录接口的入参,我们可以看到框起来的key对应的value是动态参数生成的,需获取到: 2.登录接口入参的值一般是登录接口返回的原数据值,若刷新后接口与对应源 ...
- Python+Requests接口测试教程(1):Fiddler抓包工具
本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...
- Python+Requests接口测试教程(2):
开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...
- Python+Requests接口测试教程(2):requests
开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...
- python requests 接口测试
1.get方法请求接口 url:显而易见,就是接口的地址url啦 headers:请求头,例如:content-type = application/x-www-form-urlencoded par ...
- Python+Django+SAE系列教程12-----配置MySQL数据库
由于SAE上支持的是Mysql,首先我们要在本地配置一个Mysql的环境 ,我在网上找到MySQL-python-1.2.4b4.win32-py2.7.exe,并双击 安装 选择典型安装 安装结束后 ...
- python requests接口测试
Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最 ...
- python 模块 wmi 远程连接 windows 获取配置信息
测试工具应用: https://ask.csdn.net/questions/247013 wmi连接不上报错问题集 https://blog.csdn.net/xcntime/article/det ...
随机推荐
- php--学习封装类 (一)(操作mysql数据库的数据访问)
<?php class DBDA //定义一个类 { //定义成员变量,不能直接定义,前面要加上public或者是private public $host = "localhost&q ...
- python的发展史
python的发展史 1989年,被称为龟叔的Guido在为ABC语言写插件时,产生了写一个简洁又实用的编程语言的想法,并开始着手编写.因为其喜欢Monty Python喜剧团,所以将其命名为pyth ...
- 15款好用超赞的chrome插件, 开发者们的必备~
今天推荐一波Chrome插件干货.这些插件带给我开发效率上的提升.所以在这里整理一下,分享给朋友们. 作为一名程序开发者,推荐一波常用的chrome插件,用了就舍不得丢,包括免费FQ工具,github ...
- vue教程二 vue组件(2)
每个组件都可以有自己的data.methods.computed和您之前看到的所有内容—就像Vue实例本身一样. 您可能已经注意到了组件和Vue实例之间的一个细微差别:Vue实例上的数据属性是一个对象 ...
- 【Android】drawable VS mipmap
Android Studio 创建工程后默认的资源文件夹如下图所示: 一直有些疑惑的是 mipmap 和 drawable 文件夹有什么区别,以及是否还需要创建 drawable-xhdpi, dra ...
- hdu 6397 Character Encoding (生成函数)
Problem Description In computer science, a character is a letter, a digit, a punctuation mark or som ...
- form提交的几种方式
背景 一直使用postman作为restful接口的调试工具,但是针对post方法的几种类型,始终不明白其含义,今天彻底了解了下 form提交的来源 html页面上的form表单 <form a ...
- Linux系统与程序监控工具atop教程
引言 Linux以其稳定性,越来越多地被用作服务器的操作系统(当然,有人会较真地说一句:Linux只是操作系统内核:).但使用了Linux作为底层的操作系统,是否我们就能保证我们的服务做到7*24地稳 ...
- red hat enterprise Linux 64 bit 配置IP
在win7 64位操作系统的台式机器上,安装了VMware® Workstation,9.0.1 build-894247.新建一个虚拟机安装linux.具体过程请搜索相关文档.安装的时候选择的网络连 ...
- 页面元素定位-CSS元素基本定位
基本定位 """属性定位 一 """ # #通过id # driver.find_element_by_css_selector(" ...