需要安装,卸载,操作麻烦;占用手机空间
需要注册登录系统
开发周期长,消耗大,成本高10倍+
支持的平台(android、iOS)需要单独开发
宣发方面需要自己推流,成本高,效果差
无需安装,用完即走
使用微信的账号,无需注册登录
周期短,开发快,成本是APP的1/10
一个版本兼容各种手机平台
天然拥有超过10亿的微信用户流量
查看下面 第二模块
查看下面第 六 模块有详情
主流应用形态:
1、原生APP,包括 Android . ios
2、小程序
3、H5
原因:
为了节约时间,在效率和效果之间不断权衡,衍生出小程序这种应用形态
小程序的应用形态越多,测试也要覆盖小程序这种应用的测试
在功能测试、性能测试、自动化测试 都会涉及到
“小程序是一种不需要下载安装即可使用的应用,它实现了应用「触手可及」的梦想,用户扫一扫或者搜一下即可打开应用。也体现了「用完即走」的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装。”
概念:
小程序就是,依附于微信而不需下载和安装的移动端应用程序!
不需要考虑安装、卸载等测试点
界面里的操作更多的是点击或者滑动,不是输入,操作性更强
依附微信,用户体量大的天然优势
View 层用来渲染页面结构。视图层和逻辑层通过系统层的 JSBridage 进行通信
wxss(多了rpx单位)控制样式 -> css
wxml xml 语言控制渲染层展示 -> html

需要安装,卸载,操作麻烦;占用手机空间
需要注册登录系统
开发周期长,消耗大,成本高10倍+
支持的平台(android、iOS)需要单独开发
宣发方面需要自己推流,成本高,效果差
无需安装,用完即走
使用微信的账号,无需注册登录
周期短,开发快,成本是APP的1/10
一个版本兼容各种手机平台
天然拥有超过10亿的微信用户流量

功能方面的测试点
非功能方面的测试点
界面测试(UI)、兼容性测试、易用性测试、性能测试、安全测试

分析产品需求文档,提炼测试点
使用的方法和步骤跟 web、APP测试一样(等价类、边界值、场景法、错误推测法等)
小程序的常用入口

问题:这些入口都需要覆盖测试么?
支付 -- 微信支付
卡包、钱包 -----优惠券用来抵扣
来微信消息 ----- 是否可以继续支付
来微信视频通话 ----- 是否可以继续支付
来微信语言通话 ----- 是否可以继续支付

注意:同一微信号在不同手机端授权是同步一致的!

小程序(苏宁小程序)、第三方服务器(苏宁服务器)


分享可以成功
分享后可以点击正常打开
添加成功,正常显示
可以点击打开该小程序

电话中断
闹钟中断
低电量中断
耳机插拔中断
网络中断
网络类型:3G/4G/5G/wifi/热点
网络切换
离线/无网
弱网测试
点击 单击、双击
跳转 当前页、上一级、下一级
滑动 下拉刷新、上拉触底、左右翻页、双指滑动
输入 手动输入、下拉框选择、文件/图片上传
输出 加载响应、输出准确
分享 分享载体、分享权限

原则:
原型图、UI切图 --- 需求文档
站在用户角度考虑,美观和友好、易用性
参考成熟产品,符合大部分用户的使用习惯
小程序更加轻量级,更加便利
导航的操作区,一般不超过5个
UI更多的是点击操作,输入比较少
所以,有如下原则:
1、页面层级数为10层
2、开发源程序大小不超过 8M 源文件(包加载,单个分包不超过2M)因为,过于复杂的逻辑存在不可控的异常问题
原则:
手机型号 -- 微信能兼容基本没有问题
系统版本 -- 微信能兼容基本没有问题
屏幕大小 -- 小程序订一个新的像素单位-rpx
微信版本 -- 小程序要特别注意的
微信上其他小程序的兼容 --- 公用声卡话筒这种
接口性能测试-APP web 小程序
客户端性能测试--小程序前端
页面白屏时间不宜太久
页面首屏时间不宜太久
手机资源占用(cpu,内存,流量,电量)
页面渲染(UI呈现效果)
稳定性测试
问题:是否可以使用 monkey 工具测试小程序的稳定性测试呢?
可以的,加微信的包名,小程序在微信前端打开就可以
业务漏洞
数据加密传输
工具和脚本测试
渗透测试
小程序加固测试
小程序安全检测
安全扫描:burpsuite,appsca,AWVs,dirsearch,nessus
微信提供检测工具:wetest
1)小程序开发比原生App更简单,开发周期更短。小程序提供框架和API,基于HTML5进行开发,对接开发者现有的App后台的用户数据,其开发难度相对App较低。
2)小程序开发成本比原生App更低。原生App开发需要的人力、物力和时间成本都比较高。
3)小程序可以满足一些简单的基础应用,低频次及偏向于线下和场景生活服务类的轻应用,餐饮、快递等行业其受欢迎程度高。而对于一些需要大量计算的功能类应用,如图片处理或文档编辑,小程序是无法满足的,只能用原生或者WebApp去实现。
4)原生App的UI、UE可以设计得更加人性化,更绚丼,功能的完善完全取决于开发者的想象力和技术实力。对系统接口的调用更为简单,一些功能比如AR(增强现实技术)、语音识别等功能,App能够在交互、视觉等用户体验上满足用户高要求。对于更丰富、更细化、更个性化的功能,是需要更大容量实现,这就需要在App上去承载,而小程序作为轻量级应用是无法满足的。
5)原生App应用可以在AppStore、Android市场、360手机助手、百度应用、安全管家等应用市场进行下载安装。微信小程序,只能通过二维码或搜索小程序的名称,以及微信群或好友分享获取应用;另外微信公众号关联了小程序,那么在公众号的介绍页面,才会出现一个相关小程序的模块。只要点击相应的图标,就能轻松打开。
6)安装流程,小程序更简单。打开微信扫描二维码即可进入小程序。App需要扫码或者搜索进行下载并安装后才可以使用。
7)原生App安装在手机上会占用一定的空间,且随着功能的不断完善和更新其占用的资源也会更多。而微信小程序无须下载,其内容和功能都不占用手机内存;但微信本身比较臃肿,好友会话、群消息、朋友圈等功能堆积会占用大量的手机内存容量。
8)功能扩展性,App更强。
9)App的维护成本较高,需要针对不同操作系统做兼容性的开发,且需要用户自行升级。小程序运行于微信平台,大部分的维护工作由腾讯完成,其维护成本、周期和流程简单,更新也主要在微信后端完成,不存在操作系统和浏览器兼容方面的问题。
10)App用户忠诚度更高,因为App内容全面,用户主动选择,App获取门槛高,二次消费门槛很低。小程序的内容碎片化,用户被动接受,用完就退出程序,虽然首次消费门槛低,但后续消费门槛无法降低,用户由于难以找到小程序而选择放弃。
11)小程序只是简化版的App,并不能涵盖App的全部内容。微信对小程序的内存大小限制在2MB,只能保存最基础的功能。App更适合高频场景的服务,天然具备独立发展成生态的潜力,可以自成一套生态体系。即使小程序在用户体验上大大增强,这些也只是增量,App还是主要的阵地。
12)小程序由于微信本身的传播能力和获客能力,可以让互联网创业公司减少试错成本,提高产品的成功率。但微信缺少小程序的展示位,小程序难以获得好的位置资源,对于刜创品牉来说如何让用户搜索到并引导用户点击前往是一大难题。WebAppWebApp也就是我们说的HTML5App,是一种框架型App开发模式。具有跨平台的优势,该开发模式通常由“HTML5云网站+App应用客户端”两部分构成,App应用客户端只需安装应用的框架部分,应用所有界面都是通过HTML5去实现,每次打开App的时候,都是去云端获取数据呈现给手机用户。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element