使用python通过连接api接口向数据库中创建数据

一、起因

在功能测试时需要测试商城购物车中加入商品总数,限制为100个如果手动添加购物车感觉很麻烦,为了后期自动化自动创建数据做准备决定使用python直接向数据库中创建数据(其实就是嫌麻烦),起初我直接使用pymysql连接数据库,因为我们使用的是阿里云服务器,我又没有权限所以连接不成功,后面通过chat发现可以直接连接api接口,通过访问接口向数据库中添加数据,我把两种方法都放在下面了,可以结合自己的实际情况选择方法

二、直接连接数据库

1、首先安装pymysql,直接在pycharm终端中安装即可

pip install pymysql

2、导入pymysql,创建数据库连接

users = generate_users(10)
create_users(users)
conn = pymysql.connect(
    host='127.0.0.1', # 连接名称,默认127.0.0.1
    user='username',  # 用户名
    passwd='123456',  # 密码
    port=3306,        # 端口,默认3306
    db='database',    # 数据库名称
    charset='utf8'    # 字符编码
)
print(conn)
# 创建游标
cursor = conn.cursor()

3、添加数据并提交

# 添加一条数据数据
def insertdata1():
    insert_sql = "insert into A.employee (name,age,phone) values ('张三',25,18510107183)"
    # 执行语句
    cursor.execute(insert_sql)
    # 提交数据
    conn.commit()

4、关闭连接

def closeconn():
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

直接连接数据库可以一次添加多条,修改或删除,一次添加多条数据使用for循环在要添加的数据名称后加数字后缀即可,修改和删除修改sql语句即可

三、连接api接口创建数据

1、导入requests,连接api接口并向接口中加入数据

# 数据添加接口URL
data_url = 'http://your-api.wangzhi.com/api/mokuai'

# 设置请求头,包含token
headers = {
    'Authorization': your_token', # 添加token
    'Content-Type': 'application/json'
}

# 发送数据添加请求
user_data_list = [
    {'name': '测试部门1.1','pid': '0'},
    {'name': '测试部门1.2','pid': '0'}
    ]
for user_data in user_data_list:
    response = requests.post(data_url, json=user_data, headers=headers)

    # 检查响应状态码
    if response.status_code == 200:
        print(user_data, '创建成功', response.json())
    else:
        print(user_data, '创建失败', response.json())

2、操作中的问题

2.1、使用pickle保存token

在第一次连接的时候其实我忘记添加token导致报错,所以我直接将token保存在了headers中,但是每个token的时长都不一样,导致每次token到时限就需要重新获取token,所以我想通过登录保存token的方式代替每次手动更换token,这样每次直接执行就可以更换新的token。

2.1.1、验证是否存在pickle文件

pythonpickle是内部模块,不需要安装可以直接使用,直接引用pickle,在初次使用时pickle文件不存在t,运行后提示No such file or directory: './cache.pkl'。

import pickle

token = None
try:
    with open("./cache.pkl",'rb') as f:
        print(5,token)
        token = pickle.load(f)
        print(7,token)
except FileNotFoundError as e:
    print(e)
2.1.2、验证token是否存在,不存在则访问登录接口

之后验证token是否存在,若不存在则访问登录接口,重新获取token记录在pickle文件中,输入你自己的网址和登录时用到的参数及参数值。

if token:
    print(13,token)
    pass
else:
    # 认证接口URL-登录接口
    auth_url = 'http://your-api.wangzhi.com/api/login'
    # 认证信息
    auth_data = {
        'username': '135xxxx3537',
        'password': '123456',
        'key': '$2y$10$zuolhEAANJm59.7uER2j8OKS3Y75uPYfQvuBeSCkbx7ur29qBCEEO',
        'captcha': 'rmna'
    }
    # 发送认证请求
    response = requests.post(auth_url, json=auth_data)
2.1.3、验证两个状态码

最后验证http状态码及业务状态码是否正常,response.status_code == 200验证http状态码,我这里成功是200,再print出加response.json()来验证业务状态码,但是注意这里只是判断http状态码,也就是验证接口是否可以正常使用,若想再验证业务状态码可以自行调整。

# 检查响应状态码
    if response.status_code == 200:
        # 获取token
        token = response.json().get('data')
        print(31,token,response.json())
        with open("./cache.pkl",'wb') as f:
            pickle.dump(token,f)
    else:
        # raise Exception("Authentication failed")
        print("Authentication failed")

***print中前面的数字是行号,为了验证token是否正常获取到,验证问题,全部调整完成可以去掉一些print,或者直接调试

3、一些增强

3.1、通过faker直接造假数据

在创建数据时如果没有备用的信息就需要造一些假数据,或批量创造一些假数据

3.1.1、单个数据
# 初始化Faker
fake = Faker()
# 数据添加接口URL
data_url = 'http://aitest-api.shencaizhilian.com/api/departments'
# 生成假数据
data = {
    'name': fake.name()
}
# 设置请求头,包含token
headers = {
    'Authorization': f'Bearer {token}',
    'Content-Type': 'application/json'
}
# 发送数据添加请求1-1
response1_1 = requests.post(data_url, json=data, headers=headers)
# 检查响应状态码
if response1_1.status_code == 200:
    print(data, "创建成功", response1_1.json())
else:
    print("创建失败")
3.1.2、批量数据

在data处加个for循环就可以了

# 准备要插入的数据
data_to_create = []
for _ in range(100):  # 生成 100 条数据
    data = {
        'name': fake.name(),
        'email': fake.email()
    }
    data_to_create.append(data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值