您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center 汽车系统工程   模型库  
会员   
   
企业架构方法与实践
7月27-28日 北京+线上
AI智能体开发技术实践
8月6-7日 上海+线上
敏捷测试-简单而可行
8月14-15日 北京+线上
     
   
 订阅
软件测试高阶 | 从自动化到智能化测试
 
作者:软件工程教研组
  7   次浏览      
 2026-7-22
 
编辑推荐:
文章主要目的是掌握自动化测试的设计与实现,理解AI在测试中的应用,构建高效智能的测试体系,希望对你的学习有帮助。
本文来自于智能化软工学习,由火龙果软件Alice编辑、推荐。

导读

测试演进 = 手工测试 → 自动化测试 → 智能化测试

本章核心:掌握自动化测试的设计与实现,理解AI在测试中的应用,构建高效智能的测试体系。

01 部分:手工测试

一、手工测试的定义与特点

定义:测试人员手动执行测试用例,不借助自动化工具。

手工测试的特点:

二、手工测试的适用场景

三、手工测试的最佳实践

02 部分:自动化测试

一、自动化测试概述

定义:使用自动化工具和脚本执行测试,无需人工干预。

自动化测试的优势:

效率高:快速执行大量测试

准确性高:减少人工错误

可重复性好:结果稳定

成本低:长期投入产出比高

支持 CI/CD :持续集成

覆盖面广:可测试复杂场景

数据收集:自动生成报告

自动化测试的劣势:

初期投入大:工具、人力、培训

维护成本高:脚本需要维护

学习曲线陡:需要技术能力

灵活性差:难以应对变化

无法替代手工:某些测试只能手工

工具依赖:工具问题影响测试

二、测试脚本生成

定义:自动生成或编写测试脚本的过程。

脚本生成的三种方式:

  1. 录制与回放(Record & Playback)
  • 适用场景:快速原型、简单测试

2. 代码编写(Code-Based)

  • 适用场景:复杂测试、长期维护

3. 关键字驱动 (Keyword-Driven)

脚本生成最佳实践:

脚本设计原则:

模块化:分解为独立模块

可重用性:提高代码复用率

可维护性:清晰的代码结构

可读性:注释清晰、命名规范

鲁棒性:处理异常情况

高效性:执行速度快

独立性:测试间无依赖

脚本编写规范:

命名规范:testloginsuccess

注释规范:说明测试目的

代码风格:遵循编程规范

错误处理:完善的异常处理

日志记录:详细的执行日志

数据分离:测试数据独立

配置管理:环境配置独立

三、测试脚本演化

定义:测试脚本从创建到废弃的整个生命周期。

脚本演化的四个阶段:

阶段1:脚本创建

分析需求

设计脚本

编写脚本

脚本调试

脚本验证

阶段2:脚本维护

修复脚本缺陷

适应需求变化

更新测试数据

优化脚本性能

记录脚本版本

阶段3:脚本优化

提取公共方法

重构脚本结构

改进执行效率

增强代码质量

建立脚本库

阶段4:脚本淘汰

功能下线

需求变更

脚本失效

维护成本高

归档记录

四、自动化测试工具

主流自动化测试工具对比:
工具 类型 易用性 功能 价格
Selenium UI 中等 完整 免费
Appium 移动 中等 完整 免费
Cypress UI 容易 完整 免费
Playwright UI 容易 完整 免费
QTP/UFT UI 困难 强大 昂贵
Postman API 容易 完整 免费
JMeter 性能 中等 完整 免费
LoadRunner 性能 困难 强大 昂贵

自动化测试工具的选型原则:

选型考虑因素:

技术栈匹配:与项目技术栈兼容

功能完整性:满足测试需求

易用性:团队易于学习

社区支持:文档、示例、社区活跃

成本效益:投入产出比

扩展性:支持定制和扩展

集成能力:与CI/CD集成

供应商支持:技术支持和更新

选型流程:

需求分析:明确测试需求

工具评估:对比候选工具

原型验证:小范围试用

成本评估:计算总体成本

决策制定:选择最优工具

团队培训:培养工具专家

持续优化:根据实际调整

五、自动化测试框架

自动化测试框架的架构:

常见框架模式:

03 部分:基于 LLM 的智能化测试

一、LLM在测试中的应用

LLM(大语言模型)的特点:

理解自然语言:能理解需求和文档

生成代码:能自动生成测试脚本

分析缺陷:能分析缺陷原因

生成报告:能生成测试报告

学习能力:能从历史数据学习

推理能力:能进行逻辑推理

LLM在测试中的应用场景:

  1. 测试用例生成

输入:需求文档、功能描述

输出:测试用例集合

优势:

快速生成大量用例

覆盖面广

减少遗漏

提高效率

挑战:

用例质量参差不齐

需要人工审查

可能重复

需要微调

二、智能化测试框架

智能化测试的关键技术:

三、智能化测试的挑战与机遇

04 部分:精选习题与详解

📝 习题1:自动化测试脚本设计

题目:为"用户登录"功能设计自动化测试脚本(使用Selenium WebDriver)。

需求:

登录功能需求:

  • 输入用户名和密码
  • 点击登录按钮
  • 验证登录成功
  • 验证错误提示
  • 支持记住密码

参考答案:

使用页面对象模式的脚本设计:

# 页面对象类
class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_input = (By.ID, "username")
        self.password_input = (By.ID, "password")
        self.login_button = (By.ID, "login_btn")
        self.remember_checkbox = (By.ID, "remember")
        self.error_message = (By.CLASS_NAME, "error-msg")
        self.success_message = (By.CLASS_NAME, "success-msg")

    def enter_username(self, username):
        """输入用户名"""
        self.driver.find_element(*self.username_input).send_keys(username)

    def enter_password(self, password):
        """输入密码"""
        self.driver.find_element(*self.password_input).send_keys(password)

    def click_login(self):
        """点击登录按钮"""
        self.driver.find_element(*self.login_button).click()

    def check_remember(self):
        """勾选记住密码"""
        self.driver.find_element(*self.remember_checkbox).click()

    def get_error_message(self):
        """获取错误信息"""
        try:
            return self.driver.find_element(*self.error_message).text
        except:
            return None

    def is_login_success(self):
        """判断登录是否成功"""
        try:
            self.driver.find_element(*self.success_message)
            return True
        except:
            return False

    def login(self, username, password, remember=False):
        """完整登录流程"""
        self.enter_username(username)
        self.enter_password(password)
        if remember:
            self.check_remember()
        self.click_login()

# 测试用例类
class TestLogin:
    def setup_method(self):
        """测试前准备"""
        self.driver = webdriver.Chrome()
        self.driver.get("http://example.com/login")
        self.login_page = LoginPage(self.driver)

    def teardown_method(self):
        """测试后清理"""
        self.driver.quit()

    def test_login_success(self):
        """测试登录成功"""
        self.login_page.login("user001", "password123")
        assert self.login_page.is_login_success()

    def test_login_with_wrong_password(self):
        """测试密码错误"""
        self.login_page.login("user001", "wrongpass")
        error_msg = self.login_page.get_error_message()
        assert "密码错误" in error_msg

    def test_login_with_nonexistent_user(self):
        """测试用户不存在"""
        self.login_page.login("nonexistent", "password123")
        error_msg = self.login_page.get_error_message()
        assert "用户不存在" in error_msg

    def test_login_with_remember(self):
        """测试记住密码"""
        self.login_page.login("user001", "password123", remember=True)
        assert self.login_page.is_login_success()
        # 验证cookie是否保存
        cookies = self.driver.get_cookies()
        assert any(c['name'] == 'remember_token' for c in cookies)

📝 习题2:LLM生成测试用例

题目:使用LLM为"购物车"功能生成测试用例。

需求:

购物车功能需求:

  • 添加商品到购物车
  • 删除购物车中的商品
  • 修改商品数量
  • 计算购物车总价
  • 清空购物车
  • 支持优惠券

参考答案:

LLM生成的测试用例:

输入提示词:为购物车功能生成全面的测试用例,包括正常场景、边界场景和异常场景。

LLM生成的测试用例:

【正常场景】

TC001:添加单个商品

前置条件:用户已登录,商品库存充足

步骤:1. 选择商品 2. 点击加入购物车 3. 确认

预期:商品成功添加到购物车

TC002:添加多个商品

前置条件:用户已登录

步骤:1. 添加商品A 2. 添加商品B 3. 查看购物车

预期:购物车中有两个商品

TC003:修改商品数量

前置条件:购物车中有商品

步骤:1. 打开购物车 2. 修改商品数量为5 3. 确认

预期:数量更新,总价重新计算

TC004:删除商品

前置条件:购物车中有商品

步骤:1. 打开购物车 2. 点击删除 3. 确认

预期:商品从购物车删除 TC005:应用优惠券

前置条件:购物车中有商品,有有效优惠券

步骤:1. 输入优惠券码 2. 点击应用 3. 查看总价

预期:优惠券生效,总价降低

【边界场景】

TC006:添加最大数量商品

前置条件:库存充足

步骤:1. 添加999个商品

预期:成功添加或提示最大限制

TC007:清空购物车

前置条件:购物车中有多个商品

步骤:1. 点击清空购物车 2. 确认

预期:购物车为空

TC008:购物车为空时结算

前置条件:购物车为空

步骤:1. 点击结算按钮

预期:提示"购物车为空"

【异常场景】

TC009:库存不足

前置条件:商品库存为1

步骤:1. 尝试添加5个商品

预期:提示库存不足

TC010:无效优惠券

前置条件:购物车中有商品

步骤:1. 输入无效优惠券码 2. 点击应用

预期:提示优惠券无效 TC011:优惠券已过期

前置条件:购物车中有商品

步骤:1. 输入已过期优惠券码 2. 点击应用

预期:提示优惠券已过期

TC012:网络中断

前置条件:正在添加商品

步骤:1. 中断网络 2. 点击加入购物车

预期:提示网络错误,可重试

📝 习题3:自动化测试框架设计

题目:设计一个数据驱动的自动化测试框架。

参考答案:

框架设计:

# 配置文件(config.yaml)
test_config:
  base_url: "http://example.com"
  browser: "chrome"
  timeout: 10
  headless: false

# 测试数据文件(test_data.csv)
test_case_id,username,password,expected_result
TC001,user001,password123,success
TC002,user001,wrongpass,error
TC003,nonexistent,password123,error
TC004,user002,password456,success

# 框架核心类
class DataDrivenTestFramework:
    def __init__(self, config_file, data_file):
        self.config = self.load_config(config_file)
        self.test_data = self.load_test_data(data_file)
        self.driver = None

    def load_config(self, config_file):
        """加载配置文件"""
        with open(config_file, 'r') as f:
            return yaml.safe_load(f)

    def load_test_data(self, data_file):
        """加载测试数据"""
        data = []
        with open(data_file, 'r') as f:
            reader = csv.DictReader(f)
            for row in reader:
                data.append(row)
        return data

    def setup(self):
        """初始化测试环境"""
        options = Options()
        if self.config['test_config']['headless']:
            options.add_argument('--headless')
        self.driver = webdriver.Chrome(options=options)
        self.driver.implicitly_wait(self.config['test_config']['timeout'])

    def teardown(self):
        """清理测试环境"""
        if self.driver:
            self.driver.quit()

    def run_tests(self):
        """执行所有测试"""
        results = []
        for test_data in self.test_data:
            result = self.execute_test(test_data)
            results.append(result)
        return results

    def execute_test(self, test_data):
        """执行单个测试"""
        try:
            self.driver.get(self.config['test_config']['base_url'])
            # 执行测试逻辑
            username = test_data['username']
            password = test_data['password']
            expected = test_data['expected_result']
            # 输入用户名和密码
            self.driver.find_element(By.ID, "username").send_keys(username)
            self.driver.find_element(By.ID, "password").send_keys(password)
            self.driver.find_element(By.ID, "login_btn").click()
            # 验证结果
            if expected == "success":
                success = self.driver.find_element(By.CLASS_NAME, "success-msg")
                return {"test_id": test_data['test_case_id'], "status": "PASS"}
            else:
                error = self.driver.find_element(By.CLASS_NAME, "error-msg")
                return {"test_id": test_data['test_case_id'], "status": "PASS"}
        except Exception as e:
            return {"test_id": test_data['test_case_id'], "status": "FAIL", "error": str(e)}

    def generate_report(self, results):
        """生成测试报告"""
        total = len(results)
        passed = len([r for r in results if r['status'] == 'PASS'])
        failed = total - passed
        report = f"""
测试执行报告
============
总用例数:{total}
通过:{passed}
失败:{failed}
通过率:{passed/total*100:.2f}%
详细结果:
        """
        for result in results:
            report += f"\n{result['test_id']}: {result['status']}"
        return report

# 使用示例
if __name__ == "__main__":
    framework = DataDrivenTestFramework('config.yaml', 'test_data.csv')
    framework.setup()
    results = framework.run_tests()
    report = framework.generate_report(results)
    print(report)
    framework.teardown()

📝 习题4:LLM缺陷分析

题目:使用LLM分析以下错误日志,诊断缺陷原因。

错误日志:

[ERROR] 2026-05-06 14:30:45 - NullPointerException at LoginService.java:42
[STACK TRACE]
at com.example.LoginService.validateUser(LoginService.java:42)
at com.example.LoginController.login(LoginController.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[CONTEXT]
user_input: "user001"
password_input: "password123"
database_status: "connected"
cache_status: "null"
   
7   次浏览       
相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践

最新活动计划
UAF架构体系与实践 7-23[北京]
SysML和EA系统设计与建模 7-16[深圳]
Spec 驱动开发(SDD)实战 7-28[北京]
AI辅助软件测试方法与实践 7-31[在线]
AI智能体开发技术实践 8-6[上海]
基于UML和EA系统分析设计 8-20[上海]
 
 
最新文章
大数据平台测试
微服务架构下的测试之道
从零开始掌握微服务软件测试
如何进行测试需求分析:从接收需求到用例设计
python_selenium自动化测试框架
最新课程
测试需求分析与测试用例设计
性能测试方法与技术
自动化测试框架设计高级实践
接口自动化测试方法与工具
软件测试方法与实践(贯穿案例)
更多...   
成功案例
某支付企业 单元测试与重构培训
北京 用户体验、可用性测试与评估
某军工研究单位 自动化测试方法、案例与工具
知名消费金融公司 探索性测试与测试分析
北京 航天科工某子公司 软件测试架构师
更多...