线性编程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)

posted @ 2021-11-05 17:15  暄总-tester  阅读(109)  评论(0)    收藏  举报