线性编程06--执行多条测试用例
使用列表存储初始化sql语句
1、使用列表存储sql语句,使用循环遍历列表
案例1:将所有的数据库初始化代码写入列表,然后执行这些代码
思路:
仍然使用线性编码
列表存储多个数据(很多sql)
循环遍历列表
2、缺点
(1)代码臃肿
(2)数据与代码不分离
自动化执行多条测试用例步骤
1)数据库初始化
准备多个数据,存入列表,循环读取与执行
a)连接数据库 1次
b)创建游标 1次
c)将多条sql语句存入列表中1次,形如:
sqls=["insert ....","delete.....",...] -- 注意逻辑顺序
d)循环执行sql语句
for sql in sqls:
执行sql
e)提交数据1次
f)关闭数据库连接1次
2)发送请求
参数(用例数据)有很多,存入列表,循环读取并发送
a)用例存入列表(用例只写请求参数,格式是字典,不要写预期,不要写用例名称)
b)预期结果存入列表
c)i=0#表示第i个预期
for 变量 in 用例列表:
响应结果=requests.post(接口地址,变量)#发送一个参数(一条用例)
if 第i个预期结果 in 响应结果.text:#预期结果列表[i]
测试通过
else:
测试失败
3)比对响应结果
预期结果有很多,存入列表
4)落库检查
数据库预期sql语句很多,存入列表,循环读取
数据库预期结果也很多,存入列表,循环读取
准备所有登陆接口和注册接口需要的测试数据
"""
准备所有登陆接口和注册接口需要的测试数据
登陆:test01写库
注册:test02删库
注册:test03写库
增加test01(用于成功登录)
考虑到反复执行,先删除后增加
删除test02(用于成功注册)
增加test03(用于重复注册)
考虑到反复执行,先删除后增加
实现登录接口和注册接口的初始化数据准备
"""
import pymysql
try :
sqls=["delete from user where username ='test01'",
"insert into user(id,username,password) values(2,'test01','123456')",
"delete from user where username='test02'",
"delete from user where username='test03'",
"insert into user(id,username,password) values(3,'test03','123456')"]#列表
conn=pymysql.connect(host='192.168.139.137',user='root',password='123456',db='exam')
cursor = conn.cursor()
for sql in sqls:#对于sqls中的每一个数据sql
cursor.execute(sql)
conn.commit()
conn.close()
except Exception as e:
print(e)
测试登录接口
"""
测试登录接口,发送请求,输出响应内容,检查结果正确性
接口地址: http://192.168.139.137/exam/login/
登陆成功 test01 123456
用户名或密码为空
用户名或密码错误
登录测试用例
用户名 密码 预期结果
test01 123456 登陆成功
test01 用户名或密码为空
123456 用户名或密码为空
用户名或密码为空
test001 123456 用户名或密码错误
test01 123 用户名或密码错误
test001 123 用户名或密码错误
"""
import requests
# 数据库初始化代码暂时省略
case_data = [
{"username": "test01", "password": "123456"},
{"username": "test01", "password": ""},
{"username": "", "password": "123456"},
{"username": "", "password": ""},
{"username": "test001", "password": "123456"},
{"username": "test01", "password": "123"},
{"username": "test001", "password": "123"},
] # 发送请求的参数,相当于测试用例,优点实现了数据和代码的初步分离,缺点是分离的不够彻底,当数据量很大时,也难以修改和维护
expects = ['登录成功', '用户名或密码为空', '用户名或密码为空', '用户名或密码为空', '用户名或密码错误', '用户名或密码错误', '用户名或密码错误'] # 预期结果
address = 'http://192.168.139.137/exam/login/'
i = 0
# a = [23,45,22,25]
# 0 1 2 3 下标
for arg in case_data:
r = requests.post(url=address, data=arg)
actual = r.text # 实际结果
if expects[i] in actual: # 预期结果 in 实际结果
print("测试通过")
else:
print("测试失败\n\t预期结果",expects[i],'\n\t实际结果:',actual)
i = i + 1 # python 不支持 i++
测试注册接口
"""
测试注册接口,发送请求,输出响应内容,检查结果正确性
注册测试用例
接口地址 : http://192.168.139.137/exam/signup/
用户名 密码 确认密码 预期
test02 123456 123456 {'Status': 1000, 'Input': {'Username': 'test02', 'Password': '123456'}, 'Result': 'Success', 'Message': '注册成功'}
test03 123456 123456 {'Status': 1003, 'Result': 'Username test03 is taken', 'Message': '用户名已被占用'}
test04 1234 123456 {'Status': 1002, 'Result': 'Password Not Compare', 'Message': '两次输入密码的不一致'}
'' 123456 123456 {'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}
test05 '' 123456 {'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}
test06 123456 '' {'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}
'' '' '' {'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}
思路:
1.数据库初始化(删除test02,添加test03)
2.用例存列表,预期存入列表
3.循环发送请求,获得响应结果,比对结果
"""
import requests, pymysql
try:
# 数据库初始化
sqls = ["delete from user where username = 'test02'",
"delete from user where username = 'test03'",
"insert into user(id,username,password) values(3,'test03','123456')"
]
conn = pymysql.connect(host='192.168.139.137', user='root', password='123456', db='exam')
cursor = conn.cursor()
for sql in sqls: # 遍历列表
cursor.execute(sql)
conn.commit()
conn.close()
# 执行用例 (发送参数给接口)
cases_data = [
{'username': 'test02', 'password': '123456', 'confirm': '123456','name':'测试02'},
{'username': 'test03', 'password': '123456', 'confirm': '123456','name':'测试03'},
{'username': 'test04', 'password': '1234', 'confirm': '123456','name':'测试04'},
{'username': '', 'password': '123456', 'confirm': '123456','name':'测试05'},
{'username': 'test05', 'password': '', 'confirm': '123456','name':'测试06'},
{'username': 'test06', 'password': '123456', 'confirm': '','name':'测试07'},
{'username': '', 'password': '', 'confirm': '','name':'测试08'}
]
expects = [
{'Status': 1000, 'Result': 'Success', 'Message': '注册成功'},
{'Status': 1003, 'Result': 'Username test03 is taken', 'Message': '用户名已被占用'},
{'Status': 1002, 'Result': 'Password Not Compare', 'Message': '密码错误'},
{'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'},
{'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'},
{'Status': 1003, 'Result': 'Username test06 is taken', 'Message': '用户名已被占用'},
{'Status': 1001, 'Result': 'Input Incomplete', 'Message': '输入信息不完整'}
]
url = 'http://192.168.139.137/exam/signup/'
i = 0 # 表示第i个预期结果
for argument in cases_data:#遍历测试用例 获取参数
res = requests.post(url,argument)
actual = res.json()
expect = expects[i]#第i个预期
if expect == actual:
print('测试通过')
else:
print('测试失败\n\t预期结果:',str(expect),'\n\t实际结果:',str(actual))
i = i + 1
except Exception as e:
print(e)
本文来自博客园,作者:暄总-tester,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15514268.html

浙公网安备 33010602011771号