conn_db()
功能:连接数据库
返回值:数据库连接对象
说明:调用db_info()函数,获得连接数据库的参数字典
project_h1目录中test.py运用conn_db()函数连接数据库
import pymysql
def conn_db(): # 连接数据库的函数
try:
dbinfo = db_info() # 数据库信息,存入dbinfo字典
conn = pymysql.connect(**dbinfo) # 连接数据库
print('连接数据库成功')
return conn
except Exception as e:
print('数据库连接出错'+e)
# 调试
conn_db()
init_db(sqlfiles)
功能:执行初始化sql语句
参数:sql文件名列表
用于指定执行哪些初始化sql文件中的命令
返回值:无
说明:调用read_sqls(sqlfiles)函数,获得要执行的sql语句列表
在代码中查看受影响行数
project_h1目录中test.py运用init_db(sqlfiles)函数执行初始化sql语句
def init_db(sqlfiles=[]): # 执行指定sql文件中的命令
try:
sqls = read_sqls(sqlfiles) # 读取所有需要执行的sql命令
conn = conn_db() # 连接数据库
cursor = conn.cursor() # 创建游标
for sql in sqls:
cursor.execute(sql) # 执行sql语句
conn.commit() # 提交数据到数据库
conn.close()
print('初始化数据库成功')
except Exception as e:
print('初始化数据库出错')
# 调试
init_db()
read_cases(casefile,columns)#casefile 指定文件,columns指定列
功能:读取Excel案例数据到列表
参数:excel文件名、excel列名列表(参数可选,省略读所有列)
返回值:数据列表
project_h1目录中test.py
创建login.xlsx存放登录测试用例
目的:运用read_cases(casefile,columns)函数读取Excel案例数据到列表
import pandas
def read_cases(excel, columns=[]): # 读取excel用例中的指定列
try:
if len(columns) == 0:
file = pandas.read_excel(excel) # 读取所有列
else:
file = pandas.read_excel(excel, usecols=columns) # 读取指定列
data = file.values.tolist() # 文件数据转为列表
print('读取用例文件'+excel+'成功')
return data
except Exception as e:
print('读取测试用例文件出错')
# 调试
read_cases('login.xlsx')
login.xlsx
| case_name |
data |
expect |
| 测试登陆成功 |
|
登录成功 |
| 测试用户名为空 |
|
用户名或密码为空 |
| 测试密码为空 |
|
用户名或密码为空 |
| 测试用户名和密码为空 |
|
用户名或密码为空 |
| 测试用户名错误 |
|
用户名或密码错误 |
| 测试密码错误 |
|
用户名或密码错误 |
| 测试用户密码都错误 |
|
用户名或密码错误 |
check_db(case_name, expectsql, dbexpect)
功能:验证增、删、改数据库的结果是否正确
参数:用例名称、预期sql语句、数据库预期结果
实际测试时,来源于Excel用例
返回值:无
说明:连接数据库、执行sql语句获得实际结果、关闭连接、数据比对
project_h1目录中test.py创建check_db()函数
目的:运用check_db(case_name, expectsql, dbexpect)函数验证增、删、改数据库的结果是否正确
def check_db(case_name, expectsql, dbexpect): # 落库检查
# case_name 用例名称、expectsql sql预期语句、dbexpect 预期结果
conn = conn_db() # 连接数据库
try:
cursor = conn.cursor() # 创建游标
cursor.execute(expectsql) # 执行sql语句
dbactual = cursor.fetchone()[0] # 取第一行第一列数据
if dbactual == dbexpect:
print(case_name + '==落库检查==通过')
else:
print(case_name + '==落库检查==失败==预期行数:' + str(dbexpect) + ',实际行数:' + str(dbactual))
except Exception as e:
print('落库检查出错'+e)
# 调试
check_db('数据库行数','select count(*) from user',3)
准备login.sql
--登陆接口:test01
delete from user where username = 'test01';
insert into user(id,username,password) values(2,'test01','123456')
测试登录接口函数test_login()
功能:初始化数据库、读用例文件、获得被测接口地址、发送请求、判断结果正确性
project_h1目录中test.py创建test_login()函数
目的:运用test_login()函数测试登录接口
import requests
def test_login(): # 测试登录接口的函数
# 数据库初始化
init_db(['login.txt'])
# 读测试用例数据
cases = read_cases('login.xlsx') # 用例:用例名0、参数数据1、预期结果2
# 读接口服务器地址
host = server_info()
address = host + '/exam/login/'
try:
# 发送请求
for case in cases: # case代表一行用例
case_name = case[0] # 第0列,是用例名称
argument = eval(case[1]) # 要发送的参数
expect = case[2] # 预期接口的返回结果
res = requests.post(url = address, data=argument)
actual = res.text
# 结果比对
if expect in actual:
print('比对接口返回==' + case_name + '==通过')
else:
print('比对接口返回==' + case_name + '==失败==预期结果:' + expect + ',实际结果:' + actual)
except Exception as e:
print('登录接口测试出错'+e)
# 调试
test_login()
测试注册接口函数
test_signup()
功能:初始化数据库、读用例文件、获得被测接口地址、发送请求、判断响应结果正确性、落库检查
准备signup.sql文件
-- 注册接口:test02、test03
delete from user where username = 'test02'
delete from user where username = 'test03'
insert into user(id,username,password) values(3,'test03','123456')
def test_signup():
# 数据库初始化
init_db(['signup.txt'])
# 读测试用例
cases = read_cases('signup.xlsx')
# 接口地址
host = server_info()
address = host + '/exam/signup/'
try:
# 发送请求
for case in cases:
case_name = case[0] # 用例名称
argument = eval(case[1]) # 参数
expect = eval(case[2]) # 预期接口返回结果
sql = case[3] # 预期sql
dbexpect = case[4] # 预期数据库行数
# 发送请求
res = requests.post(url=address, data=argument)
actual = res.json() # 实际结果(字典)
# 比对接口返回结果
if expect == actual:
print("比对接口返回==" + case_name + '==通过')
else:
print('比对接口返回==' + case_name + '==失败==预期结果:' + str(expect) + ',实际结果:' + str(actual))
# 落库检查
conn = conn_db()
cursor = conn.cursor()
cursor.execute(sql)
dbactual = cursor.fetchone()[0]
if dbexpect == dbactual:
print('落库检查==' + case_name + '==通过')
else:
print('落库检查==' + case_name + '==失败==预期行数:' + str(dbexpect) + "实际行数:" + str(dbactual))
conn.close()
except Exception as e:
print('注册接口测试出错'+e)
# 调试
test_signup()
signup.xlsx
| 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 |