H5无线测试基础

H5无线测试基础


1、概述

  H5是指第五代HTML语言,也是指用H5语言制作的一切数字产品(HTML:超文本表示语言),相比较APP应用,H5有着很多优点,最为显著的是:
  首先开发周期短,仅为APP的五分之一左右,成本也比较小。
  第二是具有跨平台性的特质,不管是在ios,安卓系统中都能使用。
尤其相比较iOS较长的更新审核周期,任何时候都能快速迭代,在唯快不破的互联网时代,是很具有竞争力的;
  拉手在之前的版本上就做了尝试,在多个入口嵌入了H5界面,把团购app从Native APP往Hybird APP(Hybrid APP指的是半原生native半H5的混合类App)迁移,同时H5在微信,淘宝中的应用也非常多,因此,H5测试的需求也是非常大。根据自己多年的测试经验,做了较为系统且细致的测试技能总结,也希望能帮助到大家。

2、功能测试

2.1 关注页面请求
  • 查看页面发送的请求是否正确
  • 请求的接口是否有重复
  • 接口请求是否正确返回
    工具:chrome自带的开发工具或Charles
2.2 关注 application cache和local storage cookie中值是否正确
  • 页面是否有使用application cache, local storage存放数据
  • 清除这些数据后功能是否正确
  • 获取数据失败后是否有重试机制
    这里写图片描述
2.3 页面刷新及返回
  • h5页面中的返回
  • 浏览器自带的返回
  • 页面中的返回要考虑业务逻辑,友好返回到相应层次,不能出现死循环
  • 返回后是否需要刷新页面请求
  • 刷新时的请求链接是否正确
  • 多次刷新后的返回,不会重复显示页面
2.4 弱网测试
  • 弱网络降级:处于2G/3G网络省流量模式的一些特殊处理,比如2G网络下测试,图片多时是否要懒加载等
  • 网络切换:从wifi切换到2G/3G网络、从2G/3G网络切换到wifi等
  • 对于请求比较慢时,要有loading图案,图案在数据出来后要消失,且不能与转场动画等其它有冲突
2.5 其它
  • 对于隐私模式,不存cookie,不开javascript执行等,测试是否功能正常或给出提示
  • 接口降级,接口异常时,前端要给出友好提示
  • H5与Native切换:从native切换到H5页面、从H5切换到native(如团购APP上的活动),切换时登录信息是否记录、流程是否顺畅、是否出现中断闪退等问题
  • 图片适配,是否根据不同屏幕和分辨率做适配,高端机取双倍尺寸的图,是否对于2G网络,或低端机单独处理,不取高清图或减少一些特效动画效果
  • 对于fix bar, 转场动画等,在中低端机上显示不好。需要去掉这些复杂的处理。并对中低端机只取原图,不取高清图
  • H5中的相关资源是否经过压缩 (使用Chrome Debug抽查页面的js,css,image是否压缩 )
2.6 弱网测试工具使用

使用charles工具进行测试。

前置条件:无线端与PC端加入同一局域网络,设置无线端代理IP为PC端IP。2G网络:带宽在160kbps(实际网速可能只有80kbps)

步骤1:打开charles,找到弱网设置项(如截图)
这里写图片描述
步骤2:进入到弱网设置,找到download和upload进行设置
这里写图片描述

2.7 APP与H5登录交互
  • 团购APP已经登录,查看h5是否保持登录状态;
  • APP未登录,在H5发起需要登录的请求,则唤起APP登录,登录成功后能返回到之前H5页面;
  • 团购APP主动退出,H5随之更新为未登录状态;
  • 团购APP的session失效,查看H5是否即时捕获未登录状态;
  • 团购APP端切换账号后,查看H5是否更新到新账号登录状态;

3、适配测试

3.1 手机浏览器适配
  • 针对自带浏览器进行测试(比如:小米自;魅族自带浏览器等等)
  • 针对市场主流浏览器进行测试(比如:猎豹;谷歌;火狐;遨游等等)
3.2 手机品牌适配
  • 针对ios,如iphone 6s, iphone7, iphone 6, ipad2, ipad mini等;
  • 针对android,如三星、小米、华为,htc, lenovo,中兴,魅族,nexus 7等
3.3 手机系统适配测试
  • 针对ios, android大版本一定要覆盖,对于系统版本,先看大版本占用情况,再选择大版本中占用率较高的小版本。

4、测试工具

  • 前置条件:设置代理,以保证charles能截取到手机终端的返回数据
    • 步骤一:打开手机终端wifi设置主机IP和端口号,设置的IP地址必须和pc端保持一致
      这里写图片描述
    • 步骤二:首次设置代理时,会弹出以下提示对话框,需要对Charles授权
      这里写图片描述
  • 断点设置步骤(以charles为例)
    • 步骤一:首先找到需要打断点链接,然后点击add添加到breakpoints setting里面
      这里写图片描述
    • 步骤二:在浏览器中,刷新之前配置的链接[http://news.baidu.com],这时候就会被request断点,在被断点界面不做任何修改,点击Execute发出请求。
      这里写图片描述
    • 步骤三:服务器接受到请求后,然后返回数据(Response)时又被Charles断点,这时候就可以去Edit Response里面的test修改返回数据了,修改完后,点击Execute,就会把返回的数据返回到浏览器界面了。
      这里写图片描述
    • 步骤四:查看返回数据是否修改成功
      这里写图片描述

测试部:胡泽龙

<think>首先,用户的问题是:“我想了解如何使用H5技术实现多人实时在海报上签名的功能”。用户提到“H5实现多人实时签名功能技术方案海报”,所以核心是如何在HTML5技术下,实现多人实时在同一个海报上签名的功能。用户还参考了站内引用:引用[1]、[2]、[3]。让我回顾这些引用:-引用[1]:讨论了H5分享功能,特别是使用微信JS-SDK实现好友和朋友圈分享。这相关于微信分享的实现,不是直接针对签名功能,但可能涉及认证和分享后如何查看海报。-引用[2]:讨论了在微信浏览器中使用H5视频播放器,使用video标签和一些属性来控制播放器行为,如x5-video-player-type等。这可能对实现视频或画布相关技术有启发。-引用[3]:直接相关,因为它展示了如何使用HTML5Canvas实现电子签名功能。代码片段包括画布的初始化、鼠标事件监听(mousedown、mousemove、mouseup)来绘制线条。这是一个基本的签名功能。用户的上一个问题(从对话历史看)是关于引用这些来生成相关问题,但在这个消息中,用户直接询问了技术方案。所以,我需要基于引用的信息,结合我的知识,回答用户当前的问题。用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。”所以,我不能只看引用,而是要基于用户的真正需求:多人实时签名。关键点:-**多人**:多个用户同时在同一个海报上签名。这需要实时协作功能,比如使用WebSocket或类似技术来实现实时数据传输。-**实时**:签名动作要即时同步到所有用户的屏幕上。-**签名功能**:在画布上绘制签名,如引用[3]所示。-**海报**:用户可能有一个背景海报,在上面签名。海报可能是静态图片或一个画布的一部分。所以,技术方案应该包括:1.前端:使用HTML5Canvas实现签名功能,如引用[3]。参考那段的代码:事件监听绘制线条。2.多人实时:需要服务器端支持来处理实时通信。WebSocket是常用的技术,比如使用WebSocket库如Socket.IO。3.海报:海报可以作为画布的背景图像。用户可以在画布上绘制签名。架构概述:-前端页面:加载一个海报图像作为背景,覆盖一个Canvas用于绘制签名。-Canvas事件:监听鼠标或触摸事件,在mousedown时开始绘制路径,在mousemove时添加点到路径,在mouseup时结束路径。-实时同步:当用户绘制一个点时,通过WebSocket发送点坐标到服务器。服务器广播给其他所有用户。其他用户的Canvas上实时添加这些点。-处理多人:每个用户的Canvas绘制所有签名,包括自己的和他人的。可能需要跟踪不同用户的签名颜色或ID。步骤:1.设置Canvas:在HTML页面中设置一个Canvas元素,设置背景为海报图片。2.事件处理:类似引用[3],添加事件监听。3.实时通信:使用WebSocket(如Socket.IO)连接服务器。例如:-当用户绘制点时,发送消息(如{event:'down',x:10,y:20})。-服务器接收并广播。-其他用户接收消息后,在Canvas上绘制点。4.优化:可能需要减少数据量(如只发送点变化),处理重绘效率。5.设备兼容性:支持触摸事件(touchstart,touchmove,touchend),因为签名可能在移动端进行。参考引用:-引用[3]提供了签名的基本实现。-引用[2]提到了一些移动端适配,比如playsinline属性,可能相关于画布的触摸事件。-引用[1]涉及微信分享,可能用于分享签名后的海报。用户需求是技术方案,所以我应该结构化回答。系统级指令:-回答使用中文。-行内数学表达式用$...$,但在这个上下文中可能用不到数学表达式,如果有,我会用。-独立公式用$$...$$,但不太可能需要。-在引用的段落末尾添加引用标识。用户提供了引用[1]、[2]、[3],所以我应该在回答中引用它们,如果相关的话。-生成相关问题:指令6说“生成相关问题”,系统级指令5是“生成相关问题”,用户层指令可能也要求,因为用户上一次的互动有生成相关问题的部分。用户说“请尽可能多的参考用户上一次的问题”,上一次是关于生成相关问题,所以我的回答应结尾生成相关问题。回答结构:1.解释基本技术:使用Canvas实现单个签名,如引用[3]。2.扩展到多人实时:介绍WebSocket的使用。3.海报背景:如何设置背景。4.代码示例:提供简单示例。5.结束生成相关问题。使用中文回答。添加引用:如果提到引用中的内容,在末尾加引用标识,如[^1]。例如,当提到签名基础时,引用引用[3]。现在,草拟回答大纲:-引言:简要介绍问题和技术方案概述。-步骤1:H5签名基础-使用HTML5Canvas实现签名。基于引用[3],描述事件监听和绘制。-步骤2:添加多人实时功能-使用WebSocket(如Socket.IO)实现通信。需要服务器端设置。-步骤3:海报集成-将海报设为Canvas背景,用户在其上签名。-实现示例:提供代码片段。-结尾:生成相关问题。代码部分需要用代码块标识,如Python示例所示。确保真实可靠:基于标准Web开发实践。</think> 以下是针对您问题的详细技术方案:如何基于HTML5技术实现“多人实时在海报上签名的功能”。这个功能涉及前端画布绘制、实时通信和海报背景集成,我将结合您提供的引用[^1]、[^2]、[^3](主要用于签名基础实现),逐步解释技术方案。核心技术点包括:单个签名功能的实现(引用HTML5 Canvas)、扩展到多人实时协作(使用WebSocket)、海报背景的设置(引用画布属性优化),以及最终的整体架构。回答基于标准Web开发实践,确保可行性和可扩展性。 ### 技术方案概述 多人实时签名功能的核心是: 1. **单个签名功能**: 使用HTML5 Canvas捕获用户绘制动作,通过鼠标或触摸事件实时绘制签名线条(引用[^3])。 2. **多人实时协作**: 引入WebSocket(如Socket.IO)实现数据传输,所有用户的操作同步共享。 3. **海报背景**: 将海报作为Canvas背景,用户在其上签名。 总体流程:用户访问H5页面 → 加载海报背景 → 画布叠加 → 绘制签名 → 实时同步到其他用户 → 最终生成签名海报(可选分享功能)。 ### 详细技术步骤与实现 我分步骤解释,并提供代码示例。关键是用JavaScript实现前端,Node.js或其他语言实现服务器端。示例使用简化代码,易于理解。 #### 步骤1: 实现单个签名功能(基于引用[^3]) 单个签名是功能基础,使用HTML5 Canvas监听鼠标/触摸事件来绘制签名。参考引用[^3],它展示了基本签名机制:mousedown开始绘制、mousemove实时绘图、mouseup结束绘制。这里优化以适应移动端(如微信浏览器): - **技术点**: Canvas支持touch事件兼容移动端,并设置属性确保流畅绘制。 - **优化海报背景**: 加载海报图像作为Canvas背景图,用户签名区域在其顶部叠加。 - **代码示例**: ```html <!-- HTML部分:海报作为容器背景,Canvas用于绘制 --> <div id="poster-container" style="position: relative; width: 800px; height: 600px; background-image: url('path/to/poster.jpg'); background-size: cover;"> <canvas id="signatureCanvas" width="800" height="600" style="position: absolute; top: 0; left: 0;"></canvas> </div> <!-- JavaScript部分:签名事件逻辑 --> <script> const canvas = document.getElementById('signatureCanvas'); const ctx = canvas.getContext('2d'); let isDrawing = false; // 标记是否在绘制中 let lastX = 0; let lastY = 0; // 初始化画布(设置线条颜色、宽度等) ctx.strokeStyle = '#000000'; // 默认签名颜色 ctx.lineWidth = 3; ctx.lineJoin = 'round'; ctx.lineCap = 'round'; // 处理鼠标事件(桌面端) canvas.addEventListener('mousedown', startDrawing); canvas.addEventListener('mousemove', draw); canvas.addEventListener('mouseup', stopDrawing); canvas.addEventListener('mouseout', stopDrawing); // 处理触摸事件(移动端优化) canvas.addEventListener('touchstart', handleTouch); canvas.addEventListener('touchmove', handleTouch); canvas.addEventListener('touchend', stopDrawing); function startDrawing(e) { isDrawing = true; [lastX, lastY] = getCoordinates(e); // 获取坐标点 } function draw(e) { if (!isDrawing) return; const [x, y] = getCoordinates(e); ctx.beginPath(); ctx.moveTo(lastX, lastY); ctx.lineTo(x, y); ctx.stroke(); [lastX, lastY] = [x, y]; // 更新最后点 } function stopDrawing() { isDrawing = false; } function handleTouch(e) { e.preventDefault(); // 阻止默认行为避免触摸滚动 if (e.type === 'touchstart') { startDrawing(e); } else if (e.type === 'touchmove') { draw(e); } } function getCoordinates(e) { let x, y; if (e.type.includes('touch')) { // 触摸事件:获取第一个触点的坐标 const touch = e.touches[0] || e.changedTouches[0]; const rect = canvas.getBoundingClientRect(); x = touch.clientX - rect.left; y = touch.clientY - rect.top; } else { // 鼠标事件:直接使用offsetX/Y x = e.offsetX; y = e.offsetY; } return [x, y]; } // 清除签名按钮等可补充 </script> ``` **说明**: - 海报设置为容器背景,Canvas叠加在上方,保证签名在指定位置绘制。 - 参考引用[^2],在移动端兼容上,Canvas的优化属性如preventDefault()可以防止触摸干扰,类似于video标签的`playsinline`属性用于全屏控制[^2]。但这里通过event.preventDefault()简单处理。 - 引用[^3]提供了事件监听的原始实现基础,我将其扩展为函数封装,优化坐标获取和移动端支持。 #### 步骤2: 扩展到多人实时协作 单个签名完成扩展后,引入实时通信以实现多人同时操作。关键是用WebSocket传输绘制数据: - **技术点**: 使用Socket.IO库(基于WebSocket)简化实时数据传输。每用户绘制点坐标时,发送到服务器,服务器广播给所有用户。其他用户接收到后,在自己的Canvas上绘制相同的线。 - **架构**: - **客户端**: 监听Canvas事件,触发发送坐标消息(如{mouseDown: {x:10, y:20}, userId: 'user1'})。 - **服务器端**: 使用Node.js(或类似技术)运行Socket.IO服务器,接收消息并实时广播。 - **处理多人区分**: 每个用户分配唯一ID和颜色(如不同签名的颜色)。 - **代码示例**: - **前端代码 (扩展之前的签名脚本)**: ```javascript // 在上方代码的draw函数中添加发送数据的逻辑 function sendPointToServer(pointData) { // 假设Socket.IO已初始化 socket.emit('draw', pointData); // 'draw'是事件类型 } function draw(e) { if (!isDrawing) return; const [x, y] = getCoordinates(e); // 更新本地Canvas ctx.beginPath(); ctx.moveTo(lastX, lastY); ctx.lineTo(x, y); ctx.stroke(); [lastX, lastY] = [x, y]; // 发送坐标到服务器(优化:只发送变化点,避免频繁传输) const pointData = { type: 'move', x, y, userId: socket.id }; // socket.id由服务器分配 sendPointToServer(pointData); } ``` 在页面初始化中,添加Socket.IO客户端: ```html <script src="https://cdn.socket.io/4.5.0/socket.io.min.js"></script> <script> const socket = io('http://your-server-address:3000'); // 替换为实际服务器地址 // 接收广播消息:在其它用户Canvas上绘制 socket.on('draw', (data) => { if (data.userId !== socket.id) { // 只绘制其他用户操作 ctx.beginPath(); ctx.strokeStyle = getUserColor(data.userId); // 辅助函数设置用户颜色 ctx.moveTo(data.lastX, data.lastY); // 假设数据结构包含上次点 ctx.lineTo(data.x, data.y); ctx.stroke(); } }); socket.on('connect', () => { console.log('Connected with ID:', socket.id); }); function getUserColor(userId) { // 简单颜色映射(如哈希ID生成颜色) const colors = ['#FF5733', '#33FF57', '#3357FF', '#F333FF']; return colors[userId % 4]; } </script> ``` - **服务器端 (Node.js示例)**: 安装依赖: `npm install socket.io express`。 ```javascript const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); const io = new Server(server, { cors: { origin: '*' } }); // 允许跨域 io.on('connection', (socket) => { console.log('User connected:', socket.id); socket.emit('userJoined', socket.id); // 通知用户ID // 处理绘制消息并广播 socket.on('draw', (data) => { socket.broadcast.emit('draw', data); // 发送给其他所有用户 }); socket.on('disconnect', () => { console.log('User disconnected:', socket.id); }); }); server.listen(3000, () => { console.log('Server running on port 3000'); }); ``` **说明**: - 实时性: 用户每移动鼠标,点坐标通过Socket.IO传输,服务器广播后所有页面实时绘制。为了性能,客户端可以优化发送频率(如减少点密度)。 - 引用[^1]分享功能: 完成签名后,海报可导出图片,并利用微信JS-SDK分享(如wx.updateAppMessageShareData),但签名实时部分不与分享直接关联[^1]。 #### 步骤3: 整体功能集成与部署 - **海报与签名整合**: 在步骤1中已有海报背景。签名完成后,Canvas内容可导出为图片(`canvas.toDataURL()`),用于保存或分享。 - **优化点**: - **性能**: 多人实时时,避免传输所有点坐标。改为发送增量数据,或在服务器端处理路径逻辑减少带宽(如WebRTC为替代,但WebSocket更简单)。 - **移动端支持**: 参考引用[^2],在微信浏览器中,确保兼容touch事件和preventDefault,避免全屏问题(类似视频播放器的`playsinline`属性精神[^2])。 - **安全性**: 用户身份验证(如OAuth)可添加,防止匿名攻击。 - **部署建议**: - 测试本地后,部署服务器到云服务(如Heroku或阿里云)。 - 前端部署CDN加速,确保实时同步延迟低(<100ms)。 ### 总结与注意事项 此方案基于HTML5、Canvas和WebSocket实现多人实时签名: - **优势**: 简单、跨平台(桌面和移动),实时性高。 - **挑战**: 网络延迟可能导致绘制不流畅,可添加缓冲逻辑;移动端需测试多点触摸支持。 - **真实示例参考**: GitHub开源库如Signature-Pad和Socket.IO-Example可扩展您的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值