线性编程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
测试登陆成功 {'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) + "行")
上一篇:Postman_Test代码片段整理


下一篇:38.第六章 Shell脚本编程高级进阶(三)