自动化测试案例-读取多条测试用例、验库文件(完整)

本文档详细描述了一种自动化测试方法,通过读取服务器和数据库配置,执行包含登录和注册用例的pandas DataFrame,并验证实际结果与预期的一致性。代码中涉及数据库操作、SQL文件、Excel测试用例和配置文件的交互.
摘要由CSDN通过智能技术生成

一、思路

1.读取服务器配置文件信息,获取服务信息及数据库信息

2.初始化数据库信息

3.利用pandas 读取测试用例

4.执行测试用例,写用例比对,实际结果与预期结果比对

5.验库

二、代码分析

apitest.sql     数据库操作SQL文件

apites_liear_v2.py    自动化测试代码

login_case.xlsx     测试用例

server.conf          服务器配置信息

三、apites_liear_v2.py代码
import configparser, pymysql, pandas, requests


#获得接口服务器信息
conf=configparser.ConfigParser()
conf.read('server.conf', encoding='utf-8')
which_server='api_server'
ip=conf.get(which_server, 'ip')
port=conf.get(which_server, 'port')
base_url=f'http://{ip}:{port}'
# print(base_url)
#获得数据库服务器信息
which_db='db_server'
host=conf.get(which_db, 'host')
db=conf.get(which_db, 'db')
user=conf.get(which_db, 'user')
passwd=conf.get(which_db, 'passwd')
dbinfo={'host':host, 'db':db, 'user':user, 'passwd':passwd}
# print(dbinfo)
#初始化数据库
# conn=pymysql.connect(host='', db='', user='', passwd='') #老写法
conn=pymysql.connect(**dbinfo) #**字典表示把字典变成关键字参数形式,也就是变成host='', db='', user='', passwd=''
cursor=conn.cursor()
file=open('apitest.sql', encoding='utf-8')
for sql in file:
    if sql.strip() and sql.strip()[:2]!='--':
        cursor.execute(sql)
conn.commit()
file.close()
conn.close()
#读取并处理登录用例
data=pandas.read_excel('api_login.xlsx', usecols=['用例编号', '用例标题', '接口路径', '请求方法', '请求类型', '参数', '预期结果'])
case_info=data['用例编号']+'-'+data['用例标题']
url=base_url+data['接口路径']
data.insert(0, '用例信息', case_info)
data.insert(1, '接口地址', url)
data.drop(['用例编号', '用例标题', '接口路径'], axis=1, inplace=True)
data['参数']=data['参数'].apply(eval) #eval不能加引号,不能加括号
data['预期结果']=data['预期结果'].apply(eval)
cases=data.values.tolist()
# print(cases)
#执行登录用例、比对测试结果
for case in cases: #cases是所有的用例,case代表一条用例
    case_info, url, method, send_type, args, expect=case
    send=f"requests.{method}('{url}', {send_type}={args})"
    res=eval(send)
    actual=res.json()
    if actual==expect:
        print(f'{case_info}==响应结果比对通过')
    else:
        print(f'{case_info}==响应结果比对失败,预期结果:{expect},实际结果:{actual}')
#读取并处理注册接口用例
data=pandas.read_excel('api_signup.xlsx', usecols=['用例编号', '用例标题', '接口路径', '请求方法', '请求类型', '参数', '预期结果', '验库表名', '验库sql', '数据库预期行数'])
case_info=data['用例编号']+'-'+data['用例标题']
url=base_url+data['接口路径']
data.insert(0, '用例信息', case_info)
data.insert(1, '接口地址', url)
data.drop(['用例编号', '用例标题', '接口路径'], axis=1, inplace=True)
data['参数']=data['参数'].apply(eval) #eval不能加引号,不能加括号
data['预期结果']=data['预期结果'].apply(eval)
data['数据库预期行数']=data['数据库预期行数'].apply(eval)
cases=data.values.tolist()
# print(cases)
#执行注册用例、比对测试结果
for case in cases: #cases是所有的用例,case代表一条用例
    case_info, url, method, send_type, args, expect, tables, check_sql, db_expect=case
    send=f"requests.{method}('{url}', {send_type}={args})"
    res=eval(send)
    actual=res.json()
    if actual==expect:
        print(f'{case_info}==响应结果比对通过')
    else:
        print(f'{case_info}==响应结果比对失败,预期结果:{expect},实际结果:{actual}')
    #注册接口验库
    conn=pymysql.connect(**dbinfo)
    cursor=conn.cursor()
    cursor.execute(check_sql)
    db_actual=cursor.fetchone()
    if db_actual==db_expect:
        print(f'{case_info}==验库通过')
    else:
        print(f'{case_info}==验库失败,检查表{tables}中的数据{args},预期行数:{db_expect},实际行数:{db_actual}')
    conn.close()
#优点:按步骤、按顺序,相对简单,数据与代码分离;缺点:初始化数据和验库的时候连接数据库代码重复,读取并处理用例的代码重复,循环执行用例代码重复,不容易实现多人代码分工/合作编程

四、apitest.sql文件代码

--登录接口
--测试成功登录,test01、姓名"成功登录用户"写库
delete from info where id=4
delete from users where id=4
insert into users(id, username, password) values(4, 'test01', md5('123456'))
insert into info(id, name) values(4, '成功登录用户')

--测试密码为空,test02、姓名"登录密码为空用户"写库
delete from info where id=5
delete from users where id=5
insert into users(id, username, password) values(5, 'test02', md5('123456'))
insert into info(id, name) values(5, '登录密码为空用户')

--测试用户名错误,删test03、姓名"登录用户名错误用户"
delete from info where name='登录用户名错误用户'
delete from users where username='test03'

--测试密码错误,test04、姓名"登录密码错误用户"写库
delete from info where id=6
delete from users where id=6
insert into users(id, username, password) values(6, 'test04', md5('123456'))
insert into info(id, name) values(6, '登录密码错误用户')

--测试用户名与密码均错误,删test05、姓名"登录用户名与密码均错误用户"
delete from info where name='登录用户名与密码均错误用户'
delete from users where username='test05'

--注册接口
--测试成功注册,删:test06、姓名"成功注册用户"
delete from info where name='成功注册用户'
delete from users where username='test06'

--测试用户名为空,删姓名"注册用户名为空用户"
delete from info where name='注册用户名为空用户'

--测试密码为空,删test07、姓名"注册密码为空用户"
delete from info where name='注册密码为空用户'
delete from users where username='test07'

--测试确认密码为空,删test08、姓名"注册确认密码为空用户"
delete from info where name='注册确认密码为空用户'
delete from users where username='test08'

--测试姓名为空,删test09
delete from users where username='test09'

--测试两个密码不一致,删test10、姓名"注册两个密码不一致用户"
delete from info where name='注册两个密码不一致用户'
delete from users where username='test10'

--重复注册,写test11、姓名"注册用户名被占用用户"
delete from info where id=7
delete from users where id=7
insert into users(id, username, password, regtime) values(7, 'test11', md5('123456'), '2022/01/01')
insert into info(id, name) values(7, '注册用户名被占用用户')

五、login_case.xlsx用例信息

 六、server.con配置信息

#此配置文件用于存储测试时需要使用的所有服务器信息
[api_server] ;api_server叫节点,相当于服务器代号/服务器名字
ip=x.x.x.x
port=80

[db_server]
host=x.x.x.x
db=数据库
user=用户名
passwd=密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值