智创未来队伍——Alpha冲刺测试随笔

智创未来队 团队 2024-05-14 23:51:32
这个作业属于哪个课程2302软件工程
这个作业要求在哪里团队作业——alpha冲刺
团队名称智创未来队
团队置顶集合随笔链接智创未来队——置顶集合随笔
这个作业的目标记录测试安排、测试工具使用、测试心得体会与综合概述
其他参考文献《构建之法》

目录

  • 1. 测试工作安排
  • 2. 测试工具的选择
  • 3. 测试数据准备
  • 3.1 环境准备
  • 3.2 步骤
  • 3.3 生成的数据
  • 4. 测试工具的应用
  • 4.1 测试场景
  • 4.2 测试配置过程步骤
  • 4.3 JMeter 脚本结构示例
  • 4.4 测试执行
  • 4.5 测试结果
  • 5. 测试用例文档
  • 6. 测试体会
  • 7. 项目测试评述

1. 测试工作安排

学号姓名测试内容
222100421林宜斌测试后端登录接口、 用户认证接口、 知识库接口

2. 测试工具的选择

  • 测试工具:Apache JMeter 5.x
  • 操作系统:Linux Ubuntu
  • 数据库:MySQL 5.x

3. 测试数据准备

本次测试的数据使用 python 编码来获取

3.1 环境准备

安装以下Python库:

  • pymysql 对应数据库的连接器,用于连接数据库并获得
  • faker

安装命令如下:

pip install pymysql faker

3.2 步骤

步骤1:连接数据库

编写Python脚本以连接MySQL数据库:

import pymysql
def connect_to_db():
    try:
        connection = pymysql.connect(host='localhost',
                                     user='root',  
                                     password='password', 
                                     database='cloud',  
                                     charset='utf8mb4',
                                     cursorclass=pymysql.cursors.DictCursor)
        return connection
    except Exception as e:
        print(f"Error connecting to the database: {e}")
        return None

步骤2:通过表名获取表结构

# 获取表结构的函数
def get_table_structure(connection, table_name):
    with connection.cursor() as cursor:
        query = f"DESCRIBE `{table_name}`"
        cursor.execute(query)
        return cursor.fetchall()

# 打印表结构信息
for table, structure in tables_structure.items():
    print(f"Structure for {table}:")
    for column in structure:
        print(f"  {column['Field']}: {column['Type']}")

步骤3:根据表结构生成对应的数据

使用faker库为每个表生成1万条模拟数据:

  • 对表中的 varchar 类型 可以使用 fake.word() 生成
  • 对表中的 text 类型 可以使用 fake.paragraph() 生成
    # 生成对应表的对应数据
    # 对表中的 varchar 类型 可以使用 fake.word() 生成
    # 对表中的 text 类型 可以使用 fake.paragraph() 生成
    def generate_faker_data(table_structure, num_records):
     data = []
     for _ in range(num_records):
         record = {}
         for column in table_structure:
             if column['Field'] == 'id':
                 value = random.getrandbits(22)
             elif column['Type'] == 'varchar(255)':
                 value = fake.word()
             elif column['Type'] == 'text':
                 value = fake.paragraph()
             elif column['Type'] == 'datetime':
                 value = fake.date_time_between(start_date='-2y', end_date='now').date()
             elif column['Field'] == 'del_flag':
                 value = 0
             elif column['Field'] == 'userId':
                 value = random.getrandbits(12)
             else:
                 value = None  
             record[column['Field']] = value
         data.append(record)
     return data
    

** 步骤4:将数据以csv结构写入文件**

def write_to_csv(data, table_name, file_path):
    with open(file_path, 'w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=data[0].keys())
        writer.writeheader()
        writer.writerows(data)

** 步骤5: 编写main函数**

def main():
    db_connection = connect_to_db()
    print("hello here!")
    if db_connection:
        tables = ['knowledge', 'knowledge_page', 'page', 'sys_auth', 'sys_role', 'sys_role_auth', 'sys_user', 'sys_user_role', 'user_knowledge']
        for table_name in tables:
            table_structure = get_table_structure(db_connection, table_name)
            faker_data = generate_faker_data(table_structure, 1000)
            file_path = f"C:\\Users\\asus\\Desktop\\data\\{table_name}.csv"   # CSV文件将被保存在这里
            write_to_csv(faker_data, table_name, file_path)
            print(f"Data for {table_name} has been written to the CSV file.")
        db_connection.close()
    else:
        print("Failed to connect to the database.")

3.3 生成的数据

在这里插入图片描述


在这里插入图片描述

4. 测试工具的应用

4.1 测试场景

  • 用户登录
  • 用户注册
  • 用户认证接口
  • 知识库接口

4.2 测试配置过程步骤

Number of Threads (Users): 在 JMeter中,线程组代表了一定数量的虚拟用户,设置为期望的并发用户数,如50.
Ramp-Up Period: 设置所有用户启动的时间间隔,如60秒。这样,JMeter 将逐渐增加并发用户数,避免一开始就对服务器造成过大压力。
Loop Count: 设置用户执行请求的次数。如果设置为1,每个用户将只执行一次请求。

步骤 1: 启动 JMeter,配置请求的基本信息
通过命令行窗口启动JMeter 应用程序,添加消息头管理器,与所有线程组同级,可以为所有线程组使用。设置键值对Content-Type: application / json; charset=utf-8,明确请求体的类型为json。

在这里插入图片描述


设置所有请求的默认值,包括请求的协议、服务器地址、端口号与内容编码形式。

在这里插入图片描述

步骤 2: 创建线程组
在 JMeter 主界面,右键点击测试计划,选择“添加” -> “线程(用户)” -> “线程组”,可以根据要测试的不同接口设置多个不同的线程组。这里设置了投票线程组、登录线程组、和用户与运动员信息请求线程组。

步骤 3: 配置线程组

在线程组中,设置虚拟用户数(线程数)为,Ramp-Up Period(所有用户启动的时间间隔)为10秒,循环次数为每个用户20次。

在这里插入图片描述

** 步骤 4: 添加 HTTP 请求**

  1. 右键点击“线程组”,选择“添加” -> “取样器” -> “HTTP 请求”。
  2. 配置 HTTP 请求的详细信息:
    • HTTP 方法:如 GET 或 POST,取决于要请求的接口。
    • 服务器或域名:应用程序的服务器地址或域名,已由请求默认值设置。
    • 端口号:应用程序使用的端口,如12345。
    • 路径:登录和投票的路径,如 /page/page/detail/${pageId}

      在这里插入图片描述

步骤 5: 导入csv数据文件
在进行测试时,经常需要模拟具有不同属性的大量用户。例如,在测试用户登录功能时,我们可能需要不同的用户名和密码组合来模拟真实世界的使用场景。在测试获取用户信息的请求时,我们需要不同的用户ID来模拟真实的使用场景。为了实现这一点,JMeter 支持使用 CSV 数据文件来动态设置测试参数。

为什么使用 CSV 文件?

  • 灵活性:CSV 文件易于创建和修改,可以快速更改测试数据。
  • 可维护性:集中管理测试数据使得维护和更新变得更加容易。
  • 模拟多样性:CSV 文件可以包含多行数据,每行数据代表一个用户或一个测试场景,从而模拟更多的测试情况。

导入 CSV 文件的步骤

  1. 准备 CSV 文件:创建一个 CSV 文件,其结构与测试需求相匹配。例如,测试登录功能,CSV 文件包含以下列:username,password,CSV文件在数据准备阶段生成好了。

  2. 配置 CSV Data Set Config元件
    在 测试计划中,右键点击 选择“添加” -> “配置元件” -> “CSV Data Set Config”。找到想要使用 CSV 文件添加到设置中。

  3. 填写 CSV Data Set Config
    Filename:填写 CSV 文件的路径和文件名。
    Variable Names:指定一个变量名,如 id,content,它将用于在 HTTP 请求中引用 CSV 文件中的数据,可以根据需求来引用
    Delimiter:设置 CSV 文件中使用的分隔符,默认为逗号 ,
    Sharing Mode:设置为 “All threads share CSV files” 允许所有线程共享 CSV 文件。

    在这里插入图片描述

  4. 引用 CSV 数据
    在 HTTP 请求的“参数”部分,添加新的参数,其值使用 ${variableName} 语法引用 CSV 文件中的数据。例如/page/detail/${pageId}。请求体中数据则设置成这样: {"password": "${password}", "username": "${username}"}。JMeter会自动解析前面设置的csv文件,提取出变量值,拼接到各个请求中。

    在这里插入图片描述

  5. 运行测试
    启动 JMeter 测试,观察到测试使用 CSV 文件中的数据来动态替换参数。

步骤 6: 设置 HTTP 请求参数、请求体数据

在 HTTP 请求下方的参数部分,添加所需的参数。如登录请求中 { "username": "${username}", "${password}": "123456"},同样通过${varName}来引用csv数据文件中的内容。在请求体中也通过这样的方法添加数据。

步骤 7: 添加监听器
监听器用于展示测试结果。右键点击线程组或测试计划,选择“添加” -> “监听器”,可以添加“查看结果树”等。点击运行可以查看每个请求的详细情况,如请求信息、响应信息等。

4.3 JMeter 脚本结构示例

请求默认值
请求头信息管理器
csv格式文件设置
...
测试计划
  |-- 线程组
      |-- HTTP 请求(登录)
      |-- HTTP 请求(投票)
      |-- 监听器(查看结果树)
      |-- 监听器(图形结果)

4.4 测试执行

点击运行按钮执行对应的请求操作,点击生成的结果树来查看具体的某个请求的情况。

4.5 测试结果

用户登录请求汇总报告

在这里插入图片描述


在这里插入图片描述

用户认证请求汇总报告:

img


img

获取用户知识库汇总报告

img


img

页面请求汇总报告

img


img

5. 测试用例文档

测试用例文档

6. 测试体会

经过本次软件系统的测试,我们团队验证了系统的各个关键组件,包括后端服务、数据库交互等。测试结果表明,系统在较高负载情况下依然保持了良好的稳定性和响应速度。
展望未来,我们计划进一步完善测试流程与自动化测试方法以提高测试的覆盖率和效率。同时,我们也将探索持续集成和持续部署的最佳实践,确保开发和测试的无缝对接。通过实施测试驱动开发(TDD)策略,我们将测试工作与编码过程结合,从源头上保证代码质量,减少后期的维护成本。

7. 项目测试评述

JMeter 是一个强大的开源测试工具,它通过模拟多种用户请求来对后端服务进行性能、压力和稳定性测试。在测试过程中,可以利用 JMeter 的丰富元件来设计测试场景,监控关键性能指标,并使用断言来验证响应的正确性。JMeter 支持结果分析和报告生成,可以帮助团队测试系统稳定性、识别性能瓶颈,进行调试优化,并确保后端服务的持续性能和质量。

...全文
64 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
在这份精心准备的“智创哲航——半潜式环保无人船”大学生创业计划书中,我们深入探索了一种创新的环保解决方案,通过半潜式无人船技术,实现对水域环境的高效清洁与保护。该计划书详细阐述了我们团队的设计理念、技术实现路径、市场前景以及商业模式等多个方面。我们的半潜式环保无人船采用先进的自主导航与智能控制系统,能够自主完成水域巡检、垃圾收集、水质监测等多项任务,极大地提高了水域环保的效率和准确性。在技术实现上,我们结合了现代机械设计、电子信息技术以及环保科学等多学科知识,通过不断的研究与试验,最终实现了无人船的稳定运行与高效作业。同时,我们还注重无人船的可持续性,采用了环保材料和节能设计,确保其在长期使用过程中对环境的影响最小化。市场前景方面,随着人们对水域环境保护意识的不断提高,以及政府对环保产业的政策支持,半潜式环保无人船的需求将持续增长。我们计划先从小型水域开始试点应用,逐步拓展到大型湖泊、河流甚至海洋等广阔水域,为水域环保事业贡献我们的力量。在商业模式上,我们提出了以租赁、销售与技术服务为一体的综合服务模式,满足不同客户的多样化需求。同时,我们还计划开展与政府、企业以及社会组织的合作,共同推动水域环保事业的发展。总之,“智创哲航——半潜式环保无人船”创业计划书是一份充满创新与激情的环保创业计划,我们期待能够借此机会,为水域环保事业贡献我们的智慧与力量。

116

社区成员

发帖
与我相关
我的任务
社区描述
FZU-SE
软件工程 高校
社区管理员
  • LinQF39
  • 助教-吴可仪
  • 一杯时间
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧