一、起因
在功能测试时需要测试商城购物车中加入商品总数,限制为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文件
在python中pickle是内部模块,不需要安装可以直接使用,直接引用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)