线性编程14--自动执行excel测试用例
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 |
|---|---|---|
| 测试登陆成功 | 登录成功 | |
| 测试用户名为空 | 用户名或密码为空 | |
| 测试密码为空 | 用户名或密码为空 | |
| 测试用户名和密码为空 | 用户名或密码为空 | |
| 测试用户名错误 | 用户名或密码错误 | |
| 测试密码错误 | 用户名或密码错误 | |
| 测试用户密码都错误 | 用户名或密码错误 |
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 |
|---|---|---|---|---|
| 软件注册成功 | select count(*) from user where username='test02' | 1 | ||
| 测试用户名被占用 | select count(*) from user where username='test03' | 1 | ||
| 测试两个密码不一致 | select count(*) from user where username='test04' | 0 | ||
| 测试用户名为空 | select count(*) from user where username='' | 0 | ||
| 测试密码为空 | select count(*) from user where username='test05' | 0 | ||
| 测试确认密码为空 | select count(*) from user where username='test06' | 0 | ||
| 测试用户名密码确认密码均为空 | 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,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15515009.html

浙公网安备 33010602011771号