eval()函数

eval函数用来执行一个字符串表达式,并返回表达式的值,可以理解为剥离字符串外的引号,可用于将字符串转换为字典

自动执行excel登陆接口测试用例

自动执行excel登陆接口测试用例
初始化sql:sqls01.txt

-- 注册接口:test02、test03
delete from user where username = 'test02'

delete from user where username = 'test03'

insert into user(id,username,password) values(3,'test03','123456')

--登陆接口:test01
delete from user where username = 'test01';

insert into user(id,username,password) values(2,'test01','123456')

用例:login.xlsx (data,expect)

case_name

data

expect

测试登陆成功

{'username':'test01','password':'123456'}

登录成功

测试用户名为空

{'username':'','password':'123456'}

用户名或密码为空

测试密码为空

{'username':'test01','password':''}

用户名或密码为空

测试用户名和密码为空

{'username':'','password':''}

用户名或密码为空

测试用户名错误

{'username':'test001','password':'123456'}

用户名或密码错误

测试密码错误

{'username':'test01','password':'123'}

用户名或密码错误

测试用户密码都错误

{'username':'test001','password':'1236'}

用户名或密码错误

import  requests,pymysql,pandas
try:
#初始化数据库
sqlfile = open('sqls01.txt','r',encoding='utf-8')# 打开文件
conn = pymysql.connect(host='192.168.139.137',user='root',password='123456',db='exam')#连接或打开数据库
cursor = conn.cursor()# 创建游标

for row in sqlfile:# row表示一行
if len(row.strip())>0 and not row.startswith('--'):# 过滤掉空行和注释行
sql = row.strip()# 去掉首尾空白符,作为有效sql命令
cursor.execute(sql)# 执行sql语句
conn.commit()# 提交保存数据到数据库 提交事物
conn.close()#关闭数据库连接
sqlfile.close()#关闭文件
# 读取excel测试用例
# 读取excle中的指定列到内存excel对象中
excel = pandas.read_excel('login.xlsx',usecols=['data','expect'])
cases = excel.values.tolist()#数据转为列表,包括用例数据和预期结果
# 接口地址
address = 'http://192.168.139.137/exam/login/'
for case in cases:#case 表示某一行用例
argument = eval(case[0])#Excel中的data列,eval将字符串转为字典
expect = case[1]#Excel中的expect列
res = requests.post(url=address,data=argument)
actual = res.text # 实际结果
# 比对响应结果正确性
if expect in actual:
print('响应结果==验证通过')
else:
print('响应结果==验证失败==预期结果'+str(expect)+',实际结果'+str(actual))
except Exception as e:
print(e)

自动化执行Excel注册接口用例

1.初始化数据库
读取sql文件
遍历行
执行行中的sql命令
2.自动执行Excel用例
读取Excel文件
遍历行
发送请求
判断响应结果正确性
判断落库正确性

case_name

data

expect

expect_sql

expect_db_rows

软件注册成功

{'username':'test02','password':'123456','confirm':'123456','name':'测试02'}

{'Status': 1000, 'Result': 'Success', 'Message': '注册成功'}

select count(*) from user where username='test02'

1

测试用户名被占用

{'username':'test03','password':'123456','confirm':'123456','name':'测试03'}

{'Status': 1003, 'Result': 'Username test03 is taken', 'Message': '用户名已被占用'}

select count(*) from user where username='test03'

1

测试两个密码不一致

{'username':'test04','password':'123456','confirm':'1234','name':'测试04'}

{'Status': 1002, 'Result': 'Password Not Compare', 'Message': '两次输入密码的不一致'}

select count(*) from user where username='test04'

0

测试用户名为空

{'username':'','password':'123456','confirm':'123456','name':'测试07'}

{'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}

select count(*) from user where username=''

0

测试密码为空

{'username':'test05','password':'','confirm':'123456','name':'测试05'}

{'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}

select count(*) from user where username='test05'

0

测试确认密码为空

{'username':'test06','password':'123456','confirm':'','name':'测试06'}

{'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}

select count(*) from user where username='test06'

0

测试用户名密码确认密码均为空

{'username':'','password':'','confirm':'','name':''}

{'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}

select count(*) from user where username=''

0

import pymysql, requests, pandas
# 初始化数据库
conn = pymysql.connect(host="192.168.139.137", user='root', password='123456', db='exam')
cursor = conn.cursor()
sqlfile = open('sqls01.txt', 'r', encoding='utf-8') # 工作中要将登陆 和 注册分开放入两个文件中
for row in sqlfile:
if len(row.strip()) > 0 and not row.startswith('--'):
sql = row.strip()
cursor.execute(sql)
conn.commit()
conn.close()
sqlfile.close()
# 执行Excel用例
excel = pandas.read_excel('signup.xlsx', usecols=['data', 'expect', 'expect_sql', 'expect_db_rows'])
cases = excel.values.tolist()
address = 'http://192.168.139.137/exam/signup/'
for row in cases:
argument = eval(row[0]) # 要发送的参数
expect = eval(row[1]) # 预期响应结果
sql = row[2] # 预期sql语句
db_rows = row[3] # 预期数据库行数
res = requests.post(url=address, data=argument)
actual = res.json()
if actual == expect:
print('响应结果==验证通过')
else:
print("响应结果==验证失败==预期结果\n\t" + str(expect) + ',实际结果\n\t' + str(actual))
# 落库检查
conn = pymysql.connect(host='192.168.139.137', user='root', password='123456', db='exam')
cursor = conn.cursor()
cursor.execute(sql)
actual_rows = cursor.fetchone()[0] # fetchone是一个元祖,要第一个数据,即0号数据
if db_rows == actual_rows:
print("落库检查通过")
else:
print("落库检查失败==预期数据库中存在:" + str(argument) + str(db_rows) + '行,实际存在' + str(actual_rows) + "行")

作者:​​暄总-tester​​,