深圳哪个网站发布做网站建网站用的免费软件
深圳哪个网站发布做网站,建网站用的免费软件,群晖系统可以做网站吗,建一个商城型网站基于Qwen2.5-Coder-1.5B的自动化测试#xff1a;Selenium脚本生成
1. 测试工程师的日常困境
每天打开浏览器#xff0c;反复点击同一个按钮#xff0c;输入相同的测试数据#xff0c;检查页面元素是否按预期显示——这种重复性工作占据了测试团队大量时间。更让人头疼的是…基于Qwen2.5-Coder-1.5B的自动化测试Selenium脚本生成1. 测试工程师的日常困境每天打开浏览器反复点击同一个按钮输入相同的测试数据检查页面元素是否按预期显示——这种重复性工作占据了测试团队大量时间。更让人头疼的是当UI界面稍有调整原本能跑通的Selenium脚本就突然报错定位元素失败、等待超时、元素不可点击……调试过程常常比开发新功能还耗时。传统自动化测试面临三个现实问题一是编写脚本需要熟悉HTML结构、CSS选择器和Selenium API对非开发背景的测试人员门槛较高二是维护成本高前端改版一次可能要修改几十个测试用例三是异常处理逻辑复杂网络波动、加载延迟、动态元素等都需要单独处理写起来费时费力。最近试用了Qwen2.5-Coder-1.5B模型发现它在代码生成方面确实有独到之处。这个15亿参数的轻量级代码专用模型不是泛泛而谈的通用大模型而是专门在5.5万亿token的代码语料上训练出来的。它对Python语法、Web开发模式、Selenium框架的理解很扎实生成的代码结构清晰、注释到位、可读性强。更重要的是它不追求炫技式的复杂实现而是优先考虑实际工程中的可维护性和稳定性。2. 从一句话描述到可运行脚本的完整流程2.1 理解需求并生成基础脚本测试场景往往可以用一句自然语言描述清楚。比如“在电商网站登录页输入用户名和密码点击登录按钮验证跳转到用户中心页面”。把这句话喂给Qwen2.5-Coder-1.5B它会输出一个结构完整的Selenium脚本包含必要的导入、驱动初始化、显式等待设置和基础断言。关键在于提示词的设计。我习惯用“角色任务约束”的三段式写法角色你是一位有5年经验的Web自动化测试工程师任务为以下测试场景生成PythonSelenium脚本约束使用ChromeDriver添加显式等待包含异常处理输出中文日志这样写的提示词比单纯说“写个登录脚本”效果好得多。模型会自动识别出需要处理的典型问题用户名密码字段的定位策略、登录按钮的可点击性判断、跳转后页面标题的验证方式。from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException, NoSuchElementException import logging # 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) logger logging.getLogger(__name__) def test_login_flow(): 电商网站登录流程测试 driver None try: # 初始化Chrome浏览器 driver webdriver.Chrome() driver.maximize_window() wait WebDriverWait(driver, 10) # 访问登录页面 logger.info(正在访问登录页面...) driver.get(https://example-ecommerce.com/login) # 等待用户名输入框出现并输入 username_field wait.until( EC.presence_of_element_located((By.ID, username)) ) username_field.send_keys(testuser) logger.info(用户名已输入) # 等待密码输入框出现并输入 password_field wait.until( EC.presence_of_element_located((By.ID, password)) ) password_field.send_keys(testpass123) logger.info(密码已输入) # 等待登录按钮可点击并点击 login_button wait.until( EC.element_to_be_clickable((By.XPATH, //button[contains(text(), 登录)])) ) login_button.click() logger.info(登录按钮已点击) # 等待跳转到用户中心页面并验证 user_center_title wait.until( EC.title_contains(用户中心) ) logger.info(成功跳转到用户中心页面) # 验证页面中是否存在用户欢迎信息 welcome_text wait.until( EC.presence_of_element_located((By.CLASS_NAME, welcome-message)) ) assert 欢迎回来 in welcome_text.text logger.info(用户欢迎信息验证通过) except TimeoutException as e: logger.error(f页面元素加载超时: {e}) raise except NoSuchElementException as e: logger.error(f未找到指定元素: {e}) raise except AssertionError as e: logger.error(f断言失败: {e}) raise finally: if driver: driver.quit() logger.info(浏览器已关闭) if __name__ __main__: test_login_flow()2.2 元素定位策略的智能选择Qwen2.5-Coder-1.5B在元素定位上表现出色不会盲目推荐ID或Class这种容易变动的选择器。它会根据页面结构特点给出多种定位方案并说明各自的适用场景。比如面对一个动态生成的购物车图标模型会分析如果图标有稳定的aria-label属性优先推荐By.XPATH(//i[aria-label购物车])如果父容器结构稳定建议用相对路径By.CSS_SELECTOR(header .nav-icons .cart-icon)对于React/Vue项目会识别data-testid属性并推荐By.CSS_SELECTOR([data-testidcart-icon])更实用的是它能根据测试目的推荐不同精度的定位方式。功能测试侧重稳定性会推荐语义化强的选择器性能测试需要速度就会建议用更简洁的ID或Name而回归测试则强调容错性会加入多重定位尝试逻辑。2.3 异常处理的工程化思维很多自动生成的脚本只考虑正常流程遇到网络抖动或页面加载慢就直接崩溃。Qwen2.5-Coder-1.5B生成的异常处理更贴近真实工作场景。它会区分三类常见异常等待超时不是简单抛出异常而是记录当前页面URL和截图方便后续分析元素状态异常比如按钮被禁用时会先检查is_enabled()再点击避免无谓的等待业务逻辑异常登录失败时会捕获错误提示框内容而不是只检查URL变化def safe_click_element(driver, locator, description): 安全点击元素包含重试机制和状态检查 for attempt in range(3): try: element WebDriverWait(driver, 5).until( EC.element_to_be_clickable(locator) ) if element.is_enabled() and element.is_displayed(): element.click() logger.info(f成功点击{description}) return True except (TimeoutException, ElementClickInterceptedException) as e: logger.warning(f第{attempt 1}次点击{description}失败: {e}) if attempt 2: # 最后一次尝试失败保存截图用于调试 screenshot_path fscreenshots/fail_{int(time.time())}.png driver.save_screenshot(screenshot_path) logger.error(f三次点击均失败已保存截图: {screenshot_path}) raise time.sleep(0.5) return False3. 测试报告生成与结果可视化3.1 自动生成结构化测试报告单个脚本运行完我们真正需要的不是控制台的一堆print而是一份能快速定位问题的测试报告。Qwen2.5-Coder-1.5B可以生成完整的报告生成逻辑支持HTML、JSON、Excel等多种格式。我常用的是轻量级HTML报告它包含测试概览总用例数、通过率、执行时长详细步骤每个操作的时间戳、执行状态、截图链接错误分析异常类型、堆栈信息、相关截图环境信息浏览器版本、操作系统、Selenium版本import json from datetime import datetime import os class TestReportGenerator: def __init__(self, report_dirtest_reports): self.report_dir report_dir os.makedirs(report_dir, exist_okTrue) self.test_results [] def add_test_result(self, test_name, status, duration, errorNone, screenshotNone): 添加测试结果 result { test_name: test_name, status: status, duration: f{duration:.2f}s, timestamp: datetime.now().strftime(%Y-%m-%d %H:%M:%S), error: str(error) if error else None, screenshot: screenshot } self.test_results.append(result) def generate_html_report(self): 生成HTML格式测试报告 html_content f !DOCTYPE html html head title自动化测试报告/title meta charsetUTF-8 style body {{ font-family: Arial, sans-serif; margin: 40px; }} .summary {{ background: #f5f5f5; padding: 20px; border-radius: 5px; }} .passed {{ color: green; }} .failed {{ color: red; }} .step {{ margin: 10px 0; padding: 10px; border-left: 4px solid #4CAF50; }} .failed-step {{ border-left-color: #f44336; }} img {{ max-width: 100%; height: auto; }} /style /head body h1自动化测试报告/h1 div classsummary h2测试概览/h2 pstrong生成时间/strong{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}/p pstrong总用例数/strong{len(self.test_results)}/p pstrong通过率/strong {sum(1 for r in self.test_results if r[status] passed) / len(self.test_results) * 100:.1f}% /p /div h2详细结果/h2 for result in self.test_results: status_class passed if result[status] passed else failed step_class step if result[status] passed else failed-step html_content f div class{step_class} h3{result[test_name]} span class{status_class}({result[status]})/span/h3 pstrong执行时间/strong{result[timestamp]}/p pstrong耗时/strong{result[duration]}/p if result[error]: html_content fpstrong错误信息/strong{result[error]}/p if result[screenshot] and os.path.exists(result[screenshot]): html_content fpstrong截图/strongbrimg src{result[screenshot]} alt截图/p html_content /div html_content /body /html report_path os.path.join(self.report_dir, freport_{int(time.time())}.html) with open(report_path, w, encodingutf-8) as f: f.write(html_content) logger.info(fHTML测试报告已生成: {report_path}) return report_path3.2 测试数据驱动的灵活扩展实际项目中我们很少只测一组数据。Qwen2.5-Coder-1.5B能轻松生成数据驱动的测试框架支持从CSV、Excel或JSON文件读取测试数据。它会自动处理数据文件路径的跨平台兼容性Windows/Linux/Mac特殊字符的编码处理中文、emoji、特殊符号空值和异常数据的默认处理策略执行失败时的数据行标记和跳过机制import csv import json def load_test_data_from_csv(file_path): 从CSV文件加载测试数据自动处理编码问题 try: # 尝试多种编码格式 encodings [utf-8, gbk, utf-8-sig] for encoding in encodings: try: with open(file_path, r, encodingencoding) as f: reader csv.DictReader(f) return list(reader) except UnicodeDecodeError: continue raise ValueError(无法用支持的编码格式读取CSV文件) except FileNotFoundError: logger.error(f测试数据文件未找到: {file_path}) return [] def create_data_driven_test(test_function, data_file): 创建数据驱动测试函数 test_data load_test_data_from_csv(data_file) def wrapper(): for i, data_row in enumerate(test_data, 1): try: logger.info(f执行第{i}组数据: {json.dumps(data_row, ensure_asciiFalse)}) test_function(**data_row) logger.info(f第{i}组数据执行成功) except Exception as e: logger.error(f第{i}组数据执行失败: {e}) # 可以选择继续执行下一条或中断整个测试 continue return wrapper # 使用示例 def test_search_functionality(keyword, expected_results): 搜索功能测试 driver webdriver.Chrome() try: driver.get(https://example.com/search) search_box WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, q)) ) search_box.send_keys(keyword) search_box.submit() results WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, search-result)) ) assert len(results) int(expected_results) finally: driver.quit() # 生成数据驱动测试 data_driven_test create_data_driven_test( test_search_functionality, test_data/search_cases.csv )4. 实际项目中的落地效果4.1 电商后台管理系统的测试实践在最近一个电商后台系统中我们用Qwen2.5-Coder-1.5B重构了商品管理模块的自动化测试。原有32个手工测试用例全部转换为自动化脚本整个过程只花了两天时间。最明显的变化是维护效率。前端团队上周调整了商品列表页的分页组件以前需要手动修改8个相关脚本这次只需要更新Qwen2.5-Coder-1.5B的提示词模板重新生成所有脚本15分钟就完成了全部更新。生成的脚本质量也很稳定。对比人工编写的版本Qwen2.5-Coder-1.5B生成的代码在以下方面表现更好等待策略92%的元素定位都使用了显式等待而不是危险的time.sleep()异常覆盖平均每个脚本包含3.7个针对性的异常处理分支日志粒度每一步操作都有对应日志便于CI/CD流水线排查4.2 团队协作模式的改变以前测试脚本是测试工程师的个人作品其他人很难理解和修改。现在我们建立了标准化的提示词库每个测试场景都有对应的模板login_template.txt包含各种登录场景的提示词变体form_validation_template.txt表单验证的通用结构api_integration_template.txt前后端联调的测试脚本生成新成员入职第一天就能用这些模板生成可用的测试脚本。资深工程师则专注于优化提示词和审查生成结果把精力从编码转移到更有价值的测试设计上。4.3 性能与资源消耗的真实体验Qwen2.5-Coder-1.5B的15亿参数规模在本地部署上很友好。我在一台16GB内存、RTX 3060的开发机上用Ollama运行这个模型响应时间基本保持在800ms以内。生成一个中等复杂度的Selenium脚本约120行平均耗时1.2秒。相比更大的32B版本1.5B在代码生成质量上并没有明显下降反而因为模型更专注在Selenium特定场景上表现更稳定。它的上下文窗口支持32K tokens足够处理复杂的页面结构描述和多步骤测试流程。5. 走出舒适区超越基础生成的进阶用法5.1 测试脚本的智能重构Qwen2.5-Coder-1.5B不仅能从零生成还能理解现有代码并进行重构。比如把一段冗长的、硬编码的测试脚本转换成Page Object ModelPOM架构自动识别页面元素和操作方法提取公共方法到Page类生成对应的测试用例类添加必要的构造函数和初始化逻辑这个能力特别适合改造遗留项目。我们有个老系统有200多个散落在各处的Selenium脚本用Qwen2.5-Coder-1.5B批量重构后代码复用率提升了65%维护成本显著降低。5.2 跨框架的脚本转换团队里有时需要在Selenium、Playwright、Cypress之间切换。Qwen2.5-Coder-1.5B能准确理解不同框架的API差异完成高质量的转换Selenium的find_element(By.ID, xxx)→ Playwright的page.locator(#xxx)显式等待的转换WebDriverWait→page.waitForSelector()截图和录屏的API适配这种转换不是简单的字符串替换而是理解操作意图后的语义转换。比如Selenium中等待元素可见在Playwright中可能对应waitForElementState(visible)或waitForSelector()模型会根据上下文选择最合适的API。5.3 测试策略的智能建议最有价值的不是生成代码而是生成思考。Qwen2.5-Coder-1.5B能根据产品需求文档或用户故事给出测试策略建议哪些场景必须覆盖端到端测试哪些接口适合用契约测试替代UI测试哪些边界条件需要重点验证性能测试的关键指标建议这已经超出了代码生成的范畴进入了测试架构师的思考层面。虽然不能完全替代人类专家但确实提供了很有价值的参考视角。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。