求各位大神回答:淘宝促销图片A,B两件产品,同一个账号只能买一个产品,如何设计测试用例?

拒绝访问 | www.yingjiesheng.com | 百度云加速
请打开cookies.
此网站 (www.yingjiesheng.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(4370-ua98).
重新安装浏览器,或使用别的浏览器测试 | 人人都是产品经理——iamsujie一个模块怎么写测试方案 比如P2P借贷平台的一个提现这个模块怎么写测试方案?
全部答案(共1个回答)
项目管理者、软件工程师、系统维护工程师、测试工程师提供关于XX系统整体系统功能和性能的测试指导。]
1.2
读者对象
[本测试方案可能的合法读者对象为软件开发项目管理者、软件工程师、测试组、系统维护工程师。]
1.3
项目背景
[可以如下那样简单说明,根据项目的具体情况,方案编写者也可以进行详细说明
...
[说明编写本测试方案的目的是为软件开发项目管理者、软件工程师、系统维护工程师、测试工程师提供关于XX系统整体系统功能和性能的测试指导。]
[本测试方案可能的合法读者对象为软件开发项目管理者、软件工程师、测试组、系统维护工程师。]
[可以如下那样简单说明,根据项目的具体情况,方案编写者也可以进行详细说明
项目名称:XXX。
项目代号:PoweXXX X.0.0。
委托单位:XXX。
开发单位:XX公司
主管部门:XXX。]
[说明进行项目测试的目标或所要达到的目的]
[列出编写本测试方案时参考的资料和文献。]
2 测试配置要求
[在此说明应用系统的网络环境,如果应用系统是网络版的,必须具有本节内容。]
[此处给出网络硬件的拓扑图、名称、规格、数量、配置等信息。]
[此处给出网络软件的名称、协议、通讯和连接方式等信息。]
服务器环境
服务器硬件
[此处给出服务器硬件的名称、规格、数量、配置等信息。]
服务器软件
[此处给出服务器软件的名称、协议和版本等信息。]
工作站环境
工作站硬件
[此处给出工作站硬件的拓扑图、名称、规格、数量、配置等信息。]
工作站软件
[此处给出工作站软件的名称、协议和版本等信息。]
[在此参照《测试计划》说明测试方法和工具,注明执行测试时,必须同时填写《测试记录表》。]
[在此简要说明测试数据的形成,如以客户单位具体的业务规则和《XX系统需求分析说明书》,参考《XX系统概要设计说明书》、《XX系统详细设计说明书》和《数据规格说明书》中规定的运行限制,设计测试用例,作为整个XX系统的测试数据。]
[在此说明测试策略,可以如下这样说明
测试过程按三个步骤进行,即单元测试、组装、系统测试,根据不同阶段测试的测重点不同,分别介绍测试策略:
A) 单元测试
首先按照系统、子系统和模块进行划分,但最终的单元必须是功能模块,或面向对象过程中的若干个类。单元测试是对功能模块进行正确性检验的测试工作,也是后续测试的基础。目的是在于发现各模块内部可能存在的各种差错,因此需要从程序的内部结构出发设计测试用例,着重考虑以下五个方面:
模块接口:对所测模块的数据流进行测试。
局部数据结构:检查不正确或不一致的数据类型说明、使用尚未赋值或尚未初始化的变量、错误的初始值或缺省值。
路径:虽然不可能做到穷举测试,但要设计测试用例查找由于不正确的计算(包括算法错、表达式的符号表示不正确、运算精度不够等)、不正确的比较或不正常的控制流(包括不同数据类型量的相互比较、不适当地修改了循环变量、错误的或不可能的循环终止条件等)而导致的错误。
错误处理:检查模块有没有对预见错误的条件设计比较完善的错误处理功能,保证其逻辑上的正确性。
边界:注意设计数据流、控制流中刚好等于、大于或小于确定的比较值的用例。
B)集成测试
集成测试也叫组装测试或联合测试。通常,在单元测试的基础上需要将所有的模块按照设计要求组装成系统,这时需要考虑的问题:
在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失。
一个模块的功能是否会对另一个模块的功能产生不利的影响。
各个子功能组合起来,能否达到预期要求的父功能。
全局数据结构是否有问题。
单元模块的误差累积起来,是否会放大,从而达到不能接受的程度。
我们在组装时可参考采用一次性组装方式或增殖式组装方式。
C)系统测试
系统测试目的是在于验证软件的功能和性能及其他特性是否与用户的要求一致,主要是下列类型的测试:
1) 用户界面测试:测试用户界面是否具有导航性、美观性、行业或公司的规范性、是否满足设计中要求的执行功能。
2) 性能测试:测试相应时间、事务处理效率和其他时间敏感的问题。
3) 强度测试:测试资源(内存、硬盘)敏感的问题。
4) 容量测试:测试大量数据对系统的影响。
5) 容错测试:测试软件系统克服软件、硬件故障的能力。
6) 安全性测试:测试软件系统对非法侵入的防范能力。
7) 配置测试:测试在不同网络、服务器、工作站的不同软硬件配置条件下,软件系统的质量。
8) 安装测试:确保软件系统在所有可能情况下的安装效果和一旦安装之后必须保证正确运行的质量。]
测试通过准则
[在此规定本系统通过测试的准则,即当依据测试用例执行者测试结果与预期结果相符,或测试结果与预期结果虽有不符但不可归咎于应用程序时为测试通过,反之则为测试失败。]
软件测试定义是:为了发现程序中的错误而执行程序的过程
它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 、完...
软件测试周期分为如下的阶段:
Planning 计划阶段
Analysis 分析阶段
Construction 书写阶段
这个问题我也说不清楚,推荐你一个群,里面有很多it人士,我在里面就学到不少东西。
1、软件开发属于什么行业,
(1)以计算机软件开发为主的软件企业属于工业。
(2)以计算机软件销售为主的软件企业属于商业。
2、涉及的税金:增值税、城建税、教育...
嗯。。如果是按照题目所说不用添加修改密码的设置的话我个人比较习惯用宏来做。
1.新建窗体,添加文本框和命令按钮(如果需要可以打开文本框的属性,在“数据”栏的“输...
答: 花呗是可以提前还款的哦!
你直接去支付宝客户端,选择花呗,选择我的账单!
下面就会有提前还款的选项!
答: Globus网络计算协议建立在网际协议之上,以网际协议中的通信、路由、名字解析等功能为基础
答: 重新安装网卡驱动程序,然后重新设置网络连接。
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区淘宝测试框架
您的位置: →
淘宝测试框架
第一篇:淘宝测试框架Android 自动化框架在淘宝项目过程中使用情况(一)原来发布阶段 2 周,每天手工回归 4h,到现在自动化执行查看结果。效率 提升,10*4h/每客户端每迭代 ,缩短开发测试周期。(二)在规范流程方面:原来开发手工打包,旺旺发给测试发给运营,到现在平 台自助打包,每日构建。效率提升,手工打包每个 2 分钟,沟通成本更高。杜 绝可能出错的风险 . IOS 自动化框架发展历程(一)注入式框架:从无到有,首开先河,通过直接修改开发代码,让测试运行 起来,升级日志系统,方便查看运行结果 (二)instrument js 工具包:增加稳定性,增加校验功能。增加批量执行。效 率提升,从需要注入改代码,到可以直接运行 app.运行稳定性提升,增加易用 性。主要在以下方面进行了扩展操作扩展:主要是稳定性上面的,如 tap 操作增加轮询元素查找。还包括便利性 的扩展,如 UIAPicker 的选取与展示。校验扩展 :提供更加丰富的校验功能,及校验出错提示 Log 转 Hudson:将 UIAutomation 执行后的 plist 结果文件,转换为 hudson 认识 的格式。方便持续集成里展现。(三)InstrumentDriver :纯 Java 环境编写用例,更好的接入现有测试系统。效率提升,语法出错排查时间从原来的平均 30 分钟,减为 0. 效率提升,智能感应让编写用例时间缩短 30%,学习成本大幅降低。效率提升,调试功能让出错排查时间缩短 50%. 在这里先简单介绍下 Instrument uiautomation,Instrumentuiautomation 是苹 果官方提供的 iPhone 手机应用的自动化测试工具。控件元素的识别准确,属性 获取, 元素操作的 API 丰富。可以很方便的录制测试脚本、 回放和查看运行结果。基于 instrument,扩展了该框架,对其元素操作的稳定性进行了增强,统一了错 误异常的处理及详细的运行日志,提供了方便的校验机制。结合具体项目,还实 现了脚本的运行调度、 日志的处理以及与 Hudson 集成的日常回归。框架图如下:
Athrun 相关 API 介绍:
第一篇:淘宝测试框架淘宝网-测试架构白皮书
淘宝测试架构白皮书
? 2010 淘宝-技术研发部-市场产品技术-测试-系统测试-测试架构
淘宝网-测试架构白皮书
淘宝测试架构产生的原因 .................................................................................................................. 3 测试架构.............................................................................................................................................. 3 测试架构流程综述 .............................................................................................................................. 5 测试架构师工作职能 .......................................................................................................................... 6 测试架构师的角色 .............................................................................................................................. 8 测试架构师的招聘要求 ...................................................................................................................... 9 编后注.................................................................................................................................................. 9 感谢.................................................................................................................................................... 10 作者.................................................................................................................................................... 10 版本.................................................................................................................................................... 10
淘宝网-测试架构白皮书
淘宝测试架构产生的原因
在软件的生产环节中, 会产生许多和测试相关的问题, 相应的也会出现很多的解决方法, 在一个肩负 102 年使命的公司中做测试工作, 102 年宏大的软件生命周期中, 在 测试问 题解决方法也会以爆炸性的速度增加, 结果会导致解决方法的数量是惊人的, 方式却又 是多样的,行为时分散的。一种声音会出现, 停止解决不断出现的问题, 我们需要一种 系统的解决方案使测试更加 专业,更加适应一个长期发展,不断创新的软件环境。这种 系统的解决方案就是测试架 构产生的雏形。测试架构提供了在技术上结构化指导测试的方法,它的出现? 为测试管理者和测试人员找到技术上的解决方案 ? ? ? ? ? ? ?
优化测试流程 标准化测试工作,探索新的测试技术 团队中测试技术信息的对称 更好的保证各个测试团队的沟通工作 对测试技术及工具的开源提供框架和方法 找出有效,高效的测试方法 分析,指出并控制产品潜在风险
在淘宝,测试架构被定义为工具箱:一个测试管理人员,PTM,测试工程师的工具箱。它将为我们实现更为专业的测试提供技术意见。具体体现在以下几个方面 1. 测试策略 a) 前瞻性的提出未来测试的方向 b) 指导测试人员怎样测试 c) 建议测试管理者应该进行哪些方面的测试 d) 帮助分析测试范围 e) 针对每个不同的项目,在技术上分析测试进度并跟踪控制测试进度 2. 测试管理者的工具箱 a) 提供一切管理者所需要的? Test goal ? Test Scope ? Test Focus ? Risk ? Master test plan ? Planning guidelines ? Estimation guidelines ? Planning tools ? ....... 3. 测试工程师的工具箱 a) 提供一切测试工程师所需要的? Test documentation ? Test tools and infrastructure ? Test design guidelines
淘宝网-测试架构白皮书
Test methods …………….
图 1-1 形象的说明了测试架构,测试架构师和团队成员的关系
Test Architect
架构师指导如何测试
Test Standard
Test Scope
Test Tool Design
Test Focus
High level test strategy
Test Technology Reseach
哪些需要测试
测试管理人员 工具箱
测试工程师 工具箱
如何进行测试
Test Manager
规划测试 测试范围 测试重点 人员类型 技术结构 技术实践 产品跟进 人员分配 。。。。测试活动
具体执行测试 测试计划 测试用例 测试准备 测试总结 测试跟进 。。。。
淘宝网-测试架构白皮书
Test Goal:指我们的测试目标是什么,如今年的测试目标是技术上的突破,形成技术的核心 竞争力。Test Scope指测试的范围(不做解释了这里) Test Focus指测试的重点(不做解释了这里) Test Standard测试的标准,如淘宝测试的标准是什么,怎样去衡量 Test Tool Design自动化工具设计;整个测试部门测试工具的设计,如自主研发的一些大型 测试工具。High Level Test Strategy高层面测试策略,这里并不是指具体写哪些东西,更侧重的是如测 试计划怎样做,测试用例怎样规划,测试模板怎样,怎样组织测试技术。Risk理解产品流程, 熟悉淘宝业务, 在产品生命周期中从测试的角度提出产品的潜在风险, 并提出解决方案。Test Technology Research测试架构组还要担负起测试技术的研究工作,掌握测试领域内先 进理念,不断研究实践,探索前沿测试技术,最终转化成商业化成果。这一阶段可能 3 年, 可能 5 年,也可能 10 年或更久,但要向着拥有自主知识产权不断迈进。
测试架构流程综述
图 2-1 1. 图 2-1 分析看出测试架构? 天生的迭代性 测试架构是不断变化的,迭代的目的是受益和可控,受益应该是立刻就会看见的, 快速的成果, 综合一起会积累成长时期的跨越。测试架构不能只建立在一次性的大 跨越上,这是困难且不现实的,测试架构应该 focus 在短期目标上或者细节上,以 润物细无声的方式去促成小的成果,从而实现大的飞跃,进而完成突破。测试架构的内容需要业务和技术的支撑 测试架构是基于一个产品生命周期内却又凌驾于产品之上的过程, 来源于业务和技 术,没有支撑,测试架构是在空谈。
业务&技术的变化
淘宝网-测试架构白皮书
2. 搭建测试架构的四个步骤? 探索 和团队一起了解产品,指明测试方向,指出短期目标,分析测试架构的范围, 回答团队 成员问题 ? 视野 阐明测试架构做什么,这个阶段属于测试架构理 念部分。这个阶段的目的是形成 high level 的测试策略。这个阶段是指明并且开发出适合产品的 测试架构 ? 指导 为测试架构设计出如何做,这个阶段属于测试架 构逻辑层 这个阶段的目的是产出现实中测试人员应该如何去测试的详细设计 ? 实现 实现和物理化,这个阶段属于测试架构的物理层 包括如何将测试工作转化成 更专业的方式(更标准化,可控性更好)。这个阶段的目的是使一线测试人员能够工作并 且用知识和工具去标准化, 可控化地去进 行测试工作。3. 测试架构的结果? 测试面向业务,面向技术 每一个产品都有它自己的业务逻辑,不同的业务逻辑里 有不同的优先级, ,每个产 品的开发流程也不尽相同, 不能用统一的测试方法去指导不同的产品, 我们需要的 是正确的测试方法用在正确的产品上。这里既要着眼业务,又要重视技术,两者结 合,相得益彰。测试覆盖整个产品的生命周期 测试架构不仅仅是产品的开发阶段, 是指从立项, 需 求, 开发, 测试, 部署, 运营, 维护等等,各个阶段测试都要参与进来 测试架构不限制于某一个项目 测试架构并不是只针对某一个产品或者一系列产品, 而是要面向整个测试团队在做 的工作。自适应性 不能够仅仅是为了完成测试, 测试架构要做到的是给出为什么要这样完成测 试任务, 如果产品发生变化,测试架构也会相应变化,并且做到风险预估,最终帮助产品按 时,保质的交付上线。
测试架构师工作职能
如何为现有的测试团队设计一个合适,合理的测试架构,能够有效提升测试效率,指导 测试,是所有团队测试架构师一直探索和要解决的问题。淘宝的测试架构师工作职能 包括(图 3-1)1. 测试架构流程(目标) 理清,阐明一条通向适合本公司的测试架构之路。2. 测试架构指南(基础) 对测试中的问题给予回答并找到解决方案。
淘宝网-测试架构白皮书
分析并确认测试是否充分 3. 知识理论(手段) 利用测试理论做出抽象,积累成淘宝测试的知识基础 4. 实践(应用) 引领各 team 基于理论的实践以及尝试最佳实践。5. 人员培养(效应) 一批精于业务,专于技术,善于沟通的测试架构师团队;提高 整个测试团队的 技术能力和技术氛围。
Test Architect
架构师指导如何测试 目标 测试架构流程
测试架构指南
淘宝网-测试架构白皮书
淘宝测试架构以迭代的方式,为淘宝的测试提供技术解决方案(图 3-2)。
要不要进行测试架构/ 重新进行测试架构
测试架构需要做什么
测试架构 测试策略&测试方法等 团队发展&产品变化 业务&技术&沟通
达到测试架构目标
怎样进行测试架构
图 3-2 图 3-2,是淘宝测试架构开发过程,在淘宝测试理念和测试架构准则的基础上,测试架 构师为每个项目组制定不同的测试策略,测试方法,测试范围,测试重点。测试架构师会细化测试经理和测试人员的工具箱, 技术上建议测试经理和测试人员如何 测试并且根据他们的需要开发测试需要的测试工具。想象一下真实生活中建筑, 测试架构指导了在整个软件生命周期中的测试工作, 测试架 构应该是产品发布一部分, 告知业务成员和开发团队测试是否足够充分, 这种方式要求我们 的测试架构成员必须和真实的测试工作保持密切的联系(如深入产品线中去),以此获得更多 的业务知识,想出度量的标准,把复杂的测试以简笔画的方式带给整个团队成员。测试架构在宏观上指导测试架构师为不同产品线去开发测试架构, 测试架构不仅仅是测 试架构师的培训材料,更应该指导测试架构师要做什么,哪些问题需要解决,最终需要获得 一个适合产品线的测试架构。值得注意的是, 无论产品是多么的容易理解或者产品规模多么小, 我们都需要一个资深 并且有良好 Sense 的测试架构师去开发测试架构,就像一盘菜无论多么简单,真正做得出美 味的一定是一位深谙厨师的高人。
测试架构师的角色
测试架构师的角色包括1. 生成测试架构框架,目的是成为测试人员和测试管理人员贴心的工具箱。包括? 测试架构流程,模型 ? 测试架构指南 ? 测试架构知识库 ? 测试策略 2. 收集信息,这些信息的来源可以是客户,团队成员(PD, PM, Dev, Test, SCM..), 测试 管理人员,目的是根据这些信息进行抽象,在技术上找到测试的解决方案。3. 团队协作 测试架构师是测试的专家,但不一定在每项技术上都是专家,测试架构师 要能够对
淘宝网-测试架构白皮书
问题定位,分析,通过和不同专家的合作,解决测试问题。4. 培养测试技术专家,营造技术氛围 一个架构师或者一个测试专家的作用是小的, 测试架构师要通过自己的努力,打造 出更多的测试专家,并在整个团队营造出技 术氛围。5. 跟进产品的质量 测试架构师要能够对产品的进度,风险,测试范围,测试重点,测 试周期进行全面 把握,从测试理论和技术上对产品进行评估,使整个团队成员在测 试方面做到信息 对称。
测试架构师的招聘要求
淘宝测试架构师需要具备的素质1. 2. 3. 4. 分析问题的能力 分解复杂问题并且定位 到问题根源。前瞻性 领导公司测试技术的发展和测试策略的方向;纵横全局的考虑产品的功能 及非 功能需求,设计适合淘宝(乃至互联网)的测试系统。着眼客户的创新性 客户角度看问题,追求完 美的客户体验。卓越的技术能力 不仅仅是 coding; 更重要的是优化(优化代码,优化流程等);研发适合淘宝(乃 至互联网)的测试理论,测试技术,测试方法。项目管理能力 能够处理项目中较多的依赖并且善于计划,跟进项目,关注产品的 测试过程。对质量的热情 无需 多余笔墨。内在的向前动力 对技术,业务能够向前探索,通过自己的不断努力达到 自己的目标。信心
5. 6. 7. 8.
质量至上的观念,必要时要 Push back. 9. 影响 知道如何去改变,如何去影响改 变。10. 跨团队的合作 只关心自己的事情测试是不 会成功的。
淘宝网测试架构组成立于 2010-03,这篇白皮书的目的是1. 宏观上定位测试架构的总体思路,并未在细节上一一明确。2. 作为测试架构组的重要组成:测试架构师,阐明了测试架构师的角色和招聘要求。3. 后续会进一步改进与升级。
淘宝网-测试架构白皮书
1. 郭芙 提出测试架构师招聘要求 意见 2. 丘虚 提出测试架构背景 意见 3. 淘宝测试技术委员会 评审并提出改进意见
) 编写测试架构白皮书
第一篇:淘宝测试框架用户手册
1 AutoMan 简介
AutoMan 是淘宝自动化测试组自行研发的一套界面自动化测试框架。框架的核心是基 于界面模型的设计, “元素查找” “控件操作” 将 和 分开。元素查找的方式定义在 PageModel 的 Web 服务器上,在脚本中只说明使用控件的名称和对该控件的操作方式。因此用该框架 编写脚本具有上手快、易维护的特点。
1.2 项目中的应用
目前大部分的 web 自动化测试都是应用与回归测试,鲜少有在项目中开展 web 自动化 的,其原因就在与选择自动化测试时,我们会考虑:1.页面设计变化频繁;2.项目周期足够 长; 自动化测试脚本可重复使用。而现实世界中尤其是像淘宝这类一直追求敏捷开发 3. 为主的公司,其软件项目往往不满足上面的几个点。因此,大多数已有的 web 自动化框 架都不能在项目中适用。因此,基于这种现实,淘宝自动化组根据淘宝的项目实际研发 的 AutoMan 框架就很好的解决了这个问题。AutoMan 核心思想是将“元素查找”和“控件操作”分开,即通过 web 化的方式对 页面控件的查找进行管理,在编写脚本时选择事前定义好的控件进行操作即可,因此该 策略允许在项目的不同阶段分步进行“元素查找”和“控件操作” 。下面给出一个项目 自动化的测试流程图 1-1,方便用户理解:
自动化可测性 分析 P2P3 PRT 结束
自动化范 围确定
自动化页 面元素约 定
页面元素 评审
建立页面 对象 (控件查 找)
脚本编写 (控件操作)
debug、execute
execute (debug)
Page Model
图 1-1 项目自动化的测试流程 通过上面的流程图,我们发现在项目的冒烟测试之前,可以根据开发提供的页面 DEMO 先将页面元素定义在 PageModel 上,实现初步的元素查找,然后将定义好的控件根据测试 用例流程编写测试代码,及完成控件操作。当开发提供真正的页面之后,再完善元素查找, 之后就可以将脚本执行起来。由此,1. 当遇到页面设计变化频繁时,我们只需要修改
PageModel 上定义的控件类型或者查找方式即可,通常不需要修改具体的脚本流程。2.由于 是元素查找和控件操作是分步进行, 并且在开发提供正式页面之前就进行, 可以将整个测试 时间大大提前, 不需等到开发提供测试页面再进行脚本编写。因此很好的适应了项目周期短 的问题。3.项目中一般会进行几轮测试,如果能将冒烟阶段或者第一轮测试阶段完成的脚本 在后面几轮测试甚至是后面的回归测试中执行起来,那是自动化测试的价值体现。综上所述,AutoMan 框架让项目自动化测试由不现实变成现实。
1.3 企业级的应用
企业级应用最大的特点是共享, 将有限的资源共享给更多的用户, 降低维护成本是页面 自动化企业级应用的一大特点。AutoMan 框架很好的体现了共享这一点。主要体现在两方 面的共享:1.PageModel 的共享,及页面元素查找的共享;2.脚本公用方法,公用流程的共 享。上文已经介绍 AutoMan 的核心是将元素查找和元素操作分离,即将相关的页面控件定 义在 web 化的 PageModel 上。其目的一方面是为了降低脚本的元素查找维护,另一方面是 实现页面元素的共享。举例子,淘宝的业务非常负责,流程繁多,但是无论卖家操作、买家 操作还是交易管理都会先进行登陆操作。因此登陆是很多测试用例的前置条件。试想如果每 条产品线都需要去对登陆页面进行查找操作显然是非常浪费的。正式由于 web 化的 PageModel 解决了这一问题,我们的方法是,只要有一条产品线对该页面进行建模,并创建 好登陆共用方法, 其他产品线都直接调用该定义好的页面或者方法即可, 一旦页面发生变化, 也只要由一条产品线同学进行维护, 其他同学只管使用。类似这样的页面或者这样的共用方 法都可以采用该操作, 让不同产品线之间或者不同测试之间进行共享。因此通过共享大大降 低了整个脚本的维护成本,实现企业级的应用。
1.4 AutoMan 的两大组件
AutoMan 通过将查找元素和控件操作分离的策略降低了脚本的维护成本、页面共享。因此作为 web 化管理对象库控件及查找配置的 PageModel 是 AutoMan 的一个重要组件。此 外为了方便解决脚本调试,AutoMan 还提供了一个轻巧、便捷的调试小工具:AutoMan console。该工具支持用户脱离 IDE,在 CMD 命令行下进行元素控件的查找校验与代码调试 等功能,下文会有具体介绍。只是基于 AutoMan 框架具有的上手简单、脚本编写快捷、调 试方便才使得其框架在淘宝内部的日常回归和项目自动化测试中得到广泛推广和使用。
2 从这里开始
2.1Automan-server 环境搭建
在试用的时候,可以连接 http://automan.heroku.com/直接体验。标准方式下,用户使用自己搭建的环境。环境的搭建,参见 /automan 下 automan-server 包的 readme 文件。
2.2 示例代码
参见 /automan 下 automan-client 包的 example 文件夹。
3 PageModel
PageModel 是我们 AutoMan 的三大组件之一,用于将页面元素结构化的抽离出来,进行 统一的页面对象库管理,它的最大优势是灵活应对页面变化。QTP 也有自己的对象库,但是 它的对象库是在客户端的、并且是平铺式存放管理页面上控件。与 QTP 不同,PageModel 主要有三方面的优势:首先,允许用户根据使用的需要将页面控件有组织的、有结构的进行 管理,方便对页面控件的组织;其次,允许用户在还不确定页面控件具体属性的时候,先在 对象库创建控件结构, 方便用户在项目中开发未提供具体页面时候就可以开始编写代码, 提 高效率;最后,采用 web 化的方式进行管理,实现对象库控件的共享,适合企业级的应用。这里主要给大家介绍:用于查找和定位控件的 Selector;页面 PageModel 的两种组织方 式 element 和 submodel;及对象控件的数组模式处理 collection。
3.1 Selector
selector 是用于查找、定位控件的查找器。支持 JQuery 语法。表 3-1 罗列了目前支持的 所有 JQuery 方法。表 3-1 Selector_JQuery 语法表 Selector #id 解释 用“#”表示目标元 素的 Id 目标元素的 class, 用“.”表示 当 class 或 id 里面 包含当属性里出 现 #;&,.+*~':&!^$[]()=& /|或空格时,应 该加转义字符\\ 目标元素的 tag 名 称,不区分大小写 (一般不单独使 用) 示例 &INPUT id=on1 onclick=changeStuffStatus(5) value=5 type=radio& 查找 selector = ”#on1” &INPUT id=TPL_password class=login-text tabIndex=2 value=&& type=password name=TPL_password& 查找 selector = “.login-text” (只是个例子,当然这里也 可以用 id 来找的) &INPUT class=&red login&& 查找 selector = “.red\\ login”
目标元素应当同 时满足多个查询
&IFRAME style=&PADDING-BOTTOM0 PADDING-LEFT0 WIDTH628 PADDING-RIGHT0 HEIGHT350 PADDING-TOP0px& id=_editor class=rtb marginHeight=1 frameBorder=1 marginWidth=1&&/IFRAME& 查找 selector=”iframe” 或见下面的多重条件 &IFRAME style=&PADDING-BOTTOM0 PADDING-LEFT0 WIDTH628 PADDING-RIGHT0 HEIGHT:
350 PADDING-TOP0px& id=_editor class=rtb marginHeight=1 frameBorder=1 marginWidth=1&&/IFRAME& 查找 selector=”iframe#_editor.rtb” 或 selector=”iframe.rtb#_editor” 也可以少写点条件的, 能 唯一确定了就好了,如 selector = ”#_editor”
parent&child
目标元素是一个 容易确定的元素 的直接儿子 找&a&查找 selector = ”#logo&a” 目标元素是另一 个容易确定的元 素的后代(子孙) , 使用空格
ancestor descendant
找&span class=”login-type”使用查找 selector=”#J_LoginTabs .login-type” 层级查找 :eq() 目标元素可以通 过逐层查找得到 目标元素不能唯 一确定时,可以指 定是第几个。从 0 开始 找&img&使用查找 selector = “#register-form&p.register-btn img”
找第一个 li 下的第二个 a,使用查找 selector = “.login-notice&li:eq(0)&a:eq(1)” * 可代表任意 tag 不经常使用
[name=value]
目标元素不能唯 一确定时,可用他 的属性做过滤。当属性里出现 #;&,.+*~':&!^$[]()=& /|或空格时,应 该加转义字符\
找 ul 下的两个 li 使用查找 selector = “#J_LoginTabs&*”, 这时 ul 下所有的儿子都会返回。当然, 也可以用 selector = “#J_LoginTabs&li”。多个元素的返回,参见 Collection 填写说明 &INPUT name=names[] value=5& 查找 selector = “input*name=names\\[\\++”
层级+ 匹配所有跟在 label 后面的 input 元素 &form& &label&Name:&/label& &input name=&name& /& &fieldset& &label&Newsletter:&/label& &input name=&newsletter& /& &/fieldset& &/form& &input name=&none& /& 使用:“label+input” 结果:[ &input name=&name& /&, &input name=&newsletter& /& ] ~ 找到所有与表单 同辈的 input 元 素 &form& &label&Name:&/label& &input name=&name& /& &fieldset& &label&Newsletter:&/label& &input name=&newsletter& /& &/fieldset& &/form& &input name=&none& /& 使用:&form ~ input& 结果:[ &input name=&none& /& ] &div&div&/div& &p class=&myClass&&p class=&myClass&&/p& &span&span&/span& &p class=&notMyClass&&p class=&notMyClass&&/p& 使用:&div,span,p.myClass& 结果:[ &div&div&/div&, &p class=&myClass&&p class=&myClass&&/p&, &span&span&/span& ] 如 input[id]返回所有存在 id 的 input 元素
基本, 你可以指定任意 多个选择器,并将 匹配到的元素合 并到一个结果内。相当于“或”
属性[name] [name^=value] [name!=value] [name=value] [name$=value] [name*=value] 过滤:first
存在这个属性 属性要以 value 开 始 属性不为 value 属性为 value,如 input[name=q] 属性以 value 结尾 属性包含 value 获取匹配的第一 个元素,相当
&ul& &li&list item 1&/li&
&li&list item 2&/li& &li&list item 3&/li& &li&list item 4&/li& &li&list item 5&/li& &/ul& 使用:“li:first” 结果:[ &li&list item 1&/li& ] &ul& &li&list item 1&/li& &li&list item 2&/li& &li&list item 3&/li& &li&list item 4&/li& &li&list item 5&/li& &/ul& 使用:“li:last” 结果:[ &li&list item 5&/li& ]
获取匹配的最后 个元素
查找所有不包含 id 的 input 元素
&input name=&apple& /& &input name=&flower& id=&checked& /& 使用:&input:not([id])& 结果:[ &input name=&apple& /& ]
查找表格的索引 值 0、2、4...
&table& &tr&&td&Header 1&/td&&/tr& &tr&&td&Value 1&/td&&/tr& &tr&&td&Value 2&/td&&/tr& &/table& 使用:& tr:even& 结果:[ &tr&&td&Header 1&/td&&/tr&, &tr&&td&Value 2&/td&&/tr& ] &table& &tr&&td&Header 1&/td&&/tr& &tr&&td&Value 1&/td&&/tr& &tr&&td&Value 2&/td&&/tr& &/table& 使用:& trodd& 结果:[ &tr&&td&Value 1&/td&&/tr& ]
查找表格的索引 值 1、3、5...
查找第二第三行, &table& &tr&&td&Header 1&/td&&/tr& 即索引值是 1 和 2,也就是比 0 大 &tr&&td&Value 1&/td&&/tr& &tr&&td&Value 2&/td&&/tr& &/table& 使用:& tr:gt(0)& 结果:[ &tr&&td&Value 1&/td&&/tr&, &tr&&td&Value 2&/td&&/tr& ] 查找第一第二行, &table&
即索引值是 0 和 1,也就是比 2 小
&tr&&td&Header 1&/td&&/tr& &tr&&td&Value 1&/td&&/tr& &tr&&td&Value 2&/td&&/tr& &/table& 使用:”tr:lt(2)& 结果:[ &tr&&td&Header 1&/td&&/tr&, &tr&&td&Value 1&/td&&/tr& ]
内容:contains 建设中……还没有 实现哦~ 查找所 有包含 &John& 的 div 元素 &div&John Resig&/div& &div&George Martin&/div& &div&Malcom John Sinclair&/div& 使用:&div:contains('John')& 结果:[ &div&John Resig&/div&, &div&Malcom John Sinclair&/div& ] &table& &tr&&td&Value 1&/td&&td&&/td&&/tr& &tr&&td&Value 2&/td&&td&&/td&&/tr& &/table& 使用:&td:empty& 结果:[ &td&&/td&, &td&&/td& ] &div&&p&Hello&/p&&/div& &div&Hello again!&/div& 使用:&div:has(p)& 结果:[ &div class=&test&&&p&Hello&/p&&/div& ] &table& &tr&&td&Value 1&/td&&td&&/td&&/tr& &tr&&td&Value 2&/td&&td&&/td&&/tr& &/table& 使用:&td:parent& 结果:[ &td&Value 1&/td&, &td&Value 2&/td& ] &ul& &li&John&/li& &li&Karl&/li& &li&Brandon&/li& &/ul& &ul& &li&Glen&/li& &li&Tane&/li& &li&Ralph&/li& &/ul& 使用:&ul li:first-child& 结果:[ &li&John&/li&, &li&Glen&/li& ] &ul&
查找所有不包含 子元素或者文本 的空元素
给所有包含 p 元 素的 div 元素添 加一个 text 类 查找所有含有子 元素或者文本的 td 元素
子元素:first-child
匹配第一个子元 素 :first 只匹配一个 元素,而此选择符 将为每个父元素 匹配一个子元素
:last-child
匹配最后一个子
元素 :last 只匹配一个元 素,而此选择符将 为每个父元素匹 配一个子元素
&li&John&/li& &li&Karl&/li& &li&Brandon&/li& &/ul& &ul& &li&Glen&/li& &li&Tane&/li& &li&Ralph&/li& &/ul& 使用:&ul li:last-child& 结果:[ &li&Brandon&/li&, &li&Ralph&/li& ]
匹配其父元素下 的第 N 个子或奇 偶元素
&ul& &li&John&/li& &li&Karl&/li& &li&Brandon&/li& &/ul& &ul& &li&Glen&/li& &li&Tane&/li& &li&Ralph&/li& &/ul& 使用:&ul li:nth-child(1)& 结果:[ &li&Karl&/li&, &li&Tane&/li& ] &ul& &li&John&/li& &li&Karl&/li& &li&Brandon&/li& &/ul& &ul& &li&Glen&/li& &/ul& 使用:&ul li:only-child& 结果:[ &li&Glen&/li& ]
:only-child
如果某个元素是 父元素中唯一的 子元素,那将会被 匹配 如果父元素中含 有其他元素,那将 不会被匹配。
3.2 Element & Submodel
Element 和 Submodel 是 pagemodel 的两种组织方式,前者是控件的最小操作单位,即 下面不能再有子结点;后者是一个区块,下面可以有多个子结点。submodel 下面可以有多 个 element 和 submodel。如图 3-2 所示:MyCartPage 这个页面下有一大的 submodel my_cart_records, 下面可以包含多个子 submodel, 每个子 submodel 下面会有各自的 element, 如 shop_info 下面就有两个 element,分别是:chk_choose_shop 和 shop_mjs_info。显然用 户可以通过这样的类似搭积木的方式,可以将一个平面 page 立体画起来,方便对控件的 管理。至于将怎样的一个区域定义为一个 submodel 用户可以根据自己需要定义。
图 3-2 submodel 和 element 示意图
3.2.1 Element
Element 是页面控件的最小单位,在 PageModel 上配置的 element 的时候会需要我们填 写元素类型, 因为不同的控件类型有不同的操作方法。例如textfield 的控件会有 set 方法, 而 button 类型的控件有 click 方法。另外如何判断一个页面控件是什么类型的,也是我们需 要知道的,表 3-3 列出了新增 element 类型说明及具有的方法。表 3-3 element 类型及方法 Element 类型 默认 Button 对应页面 控件 tag Any(任何 tag) Button 后台对应类型 AWatir::AElemen t AWatir::AButton 方法 click, text, get, exist? click click, text, get, exist? click, text, get, exist? click, text, get, exist? click, text, get, exist? click, 继承父 类方法 使用场景 控件点击, 取值等 对 button 框的点 击 对 CheckBox 框的 选择和取消选择 对 link 的点击
CheckBo x Link
Input(type =checkbox ) Li, A 等可 以被点击 的节点 Input,text area, text Select
AWatir::ACheckB ox AWatir::ALink
AWatir::ATextFiel d AWatir::ASelectLi
对普通输入框的 输入操作 对下拉框的选择
set,selected_
t no_wait 会导致弹 出框出现 的节点, 如 button, input 等 input(type = radio) Body
st AWatir::ANoWait Element
value, options click
text, get, exist? text, get, exist?
操作 当点击之后有系 统弹出框的控件 的点击操作
AWatir::ARadio
click, text, get, exist? click, text, get, exist?
对 Radio 框的选择 和取消选择 对富文本框的输 入操作
AWatir::AInnerTe xtSetElement
3.2.2 Submodel 与 element 的相对路径
我们需要查找一个 element 时需要填写 selector,而这个 selector 就是在一个范围内用 什么方式能找到这个控件。所以当我们直接在这个 page 下定义了 element,那你填写的 selector 就是在这个页面内查找这个控件,当我们的 element 是定义在 submodel 下 的,那 我们的 selector 只要写在这个 submodel 下的能找到这个控件即可, 这个就是相对路径查找。举例说明:如图 3-4 所示,现在需要定位到控件“秋冬打底裤”
图 3-4 定义的 submodel 和 element 这里用两种方式查找“秋冬打底裤”
方法一:在页面上直接查找该控件 list,即该控件没有定义在任何一个 submodel 下。则 该控件 list 的 selector 为 div. grow&OL&li.first a。方法二:将 list 控件定义在 list_area 这个 submodel 下面。首先定义 list_area 的 selector 为 div. grow&OL。则 list 的 selector 为 li.first a 即可。上面两个方法对比可以发现,如果一个控件是定义在一个 submodel 下的,那该控件的 selector 应该是相对 submodel 的一个相对路径,而不是一个完整的路径。
3.3 collection
collection 即集合,在我们填写对象库表单的时候会有一个是否是集合的选项就是这对 这个 collection 的操作。在我们平时操作的同一个页面上经常会遇到很多结构类似的布局, 例如上图 3-4 所示的“今日关注上升”列表和“一周关注热门”列表,几个列表的结构都一 致,都是有多条记录组成。如果按照之前 QTP 或者 Watir 方法进行控件定位的话我们需要对 每 个需 要操作 的控 件进行 定位 。为了 减少对 这类 类似 布局的 控件的 重复 定义 ,我们 pagemodel 这边引入了 collection(集合)这个概念,即将页面上一些相同结构的当作一个数 组处理。并且数组可以是针对一个 submodel 下的所有控件的集合,例如图 3-4 上“今日关 注上升”下面的所有记录当作一个数组。他也可以针对 submodel 的一个数组,例如图 3-4 的 “今日关注上升” “一周关注热门” 和 当作一个数组。下面具体介绍下 element 的 collection 和 submodel 的 collection。
3.3.1 element 的 collection
图 3-5 element 的 collection 上图是常见的一个列表形式的结构,从右图的结构上可以看出,上面的 5 条记录结构 都一致,都是 OL 下面的 li 控件。假设现在需要在 5 个记录中选择一个,以前的方式是需要 对所有的记录进行定义,而且在事前不知道要选那个记录的前提下,需要全部定义一次。那 现在我们可以将这 5 个 li 认为是一个数组集合, 只要定义一次, 就可以找到数组中的任何一
个,即设置为 collection 的方式。对象库上的设置如图 3-6:
图 3-6 在平台上定义集合 假设现在需要选择一个记录,代码如下:
bpage.list_area.list[0].click bpage.rad_address[1].click
#选择第一个记录,即“秋冬打底衫” #选择第二个记录,即“潮流机车靴”
这里需要注意在填写 selector 时,一定要确保你的 selector 是能将数组中的控件都能找 到的 selector 。即是一个通用的 selector。同时在平台上设置的时候一定选择“集合” ,如图 3-6 所示。这里也支持用关键字的方式定位到具体的数据组中的某个记录。例如, 上面的例子可能 位置会变化,所以用序号的方式指定记录会出现不稳定。所以用文字来指定会更准确,代码 如下bpage.list_area.list[“秋冬打底衫”].click bpage.rad_address*“潮流机车靴”].click #选择第一个记录,即“秋冬打底衫” #选择第二个记录,即“潮流机车靴”
3.3.2 submodel 的 collection
图 3-7 sumodel 的 collection submodel 的 collection 和 element 类似,只不过前者是一个区块的集合,后者是一个控 件的集合。图 3-7 可以看出, “今日关注上升”列表和“一周关注热门”结构一致,都是由 一个 H5 和 OL 组成,并 OL 下面是具体的记录。所以根据 collection 的思想我们可以将“关 注”信息定义为数组,数组包含了“今日关注上升”和“一周关注热门” ,这样我们可以通 过这个数组找到任何一条在这个表里面出现的订单信息。对象库上的设置如图 3-8:
图 3-8 对象库上 submodel 的 collection 定义 现在假设需要取某个关注区块的内容btext=bpage.list_area[“今日关注”].text #btext=”今日关注上升”下的所有内容
btext=bpage.list_area[“一周关注”].text
#btext=” 一周关注热门”下的所有内容
由上面代码可以看出,对与 submodel 区块我们也可以根据结构是否一致定义为数组, 方便数组取值,比之前需要一一罗列定位信息更灵活和方便。现在将 submodel 的 collection 和 element 的 collection 集合起来定位一个控件。代码如下bpage.list_area[“今日关注”].list[“秋冬打底衫”].click #选”今日关注上升”下的“秋冬打底衫” bpage.list_area[“一周关注”].list[“舒适保暖内衣”].click #选”一周关注”下的“舒适保暖内衣” 由上面的代码可以看出,通过设置 submodel 和 element 的 collection 方法,我们可以将 图中的所有记录内容都定位到, 类似二维数组位置定义具体的控件。这种方式比之前直接定 位具体控件方便和灵活很多,也简单很多。因此,掌握好 submodel、element、collection 能 帮助我们高效、精确的建立对象库,定位控件。
4 AutoMan console
Automan console 专门针对 AutoMan 框架设置的一款代码调试小工具,特点:快速,轻 巧。你可以通过这个神奇的小工具,进行控件定位,检验控件 selector 书写的正确性,以及 直接调式代码。
4.1 准备和安装
要使用 automan console,只需要安装 automan 即可,在 cmd 里运行:automan console 就能马上启动。下面就是打开你要操作的 IE 页面,使用 automan console 了。
4.2 主要功能
automan console 主要有元素查找、代码调试功能,另外还有一些辅助的小功能,例如 将定义好的控件 mark 到页面上等。下面就具体分别介绍下。
4.2.1 元素查找
元素查找是 automan console 的最大应用,就是定位在页面上要操作的元素,校验该元 素 selector 写法的正确性。对于元素的定位,工具提供三条命令1. find(url,selector, element_type) (1) 函数介绍功能:返回页面上满足条件的所有元素 参数:url,目标 IE 的链接,支持正则匹配 selector,控件的查找方法 element_type,控件类型,默认为 AElement 返回值:array,所有满足条件的元素集合 (2) 函数使用举例我们需要是在淘宝首页() ,定位搜索栏上面的“宝贝”、“淘 宝商城”、“店铺”、“拍卖”4 个连接。用 find(url,selector,element_type)查找 Selector#J_TSearchTabs li,定位“id”为“J_TSearchTabs”元素下面所有为“li”的子孙。如图 4-1 所示,在 automan console 下使用命令 find(/taobao/,” #J_TSearchTabs li”)后会显示 所有满足条件的控件内容 (即用红色框出的部分, 共四个控件, 分别对应页面上的宝贝、淘宝商城、店铺、拍卖) 。
图 4-1 find 方法演示 2. find_one(url,selector, element_type) (1) 函数介绍功能:返回页面上满足条件的第一个元素 参数:url,目标 IE 的链接,支持正则匹配 selector,控件的查找方法 element_type,控件类型,默认为 AElement 返回值:string,满足条件的第一个元素 (2) 函数使用举例:
图 4-2 find_one 方法演示
与上面的例子不同, 本方法只会返回满足 selector 条件的 4 个连接中的第一个“宝 贝”,如图 4-2 所示。3. show(element) (1) 函数介绍功能:在页面上红色边框高亮显示元素,2 秒后边框消失 参数:element,AElement 控件,支持 element 和 elements 以及 model、models。返回值:被框的元素的个数 (2) 函数使用举例:
图 4-3 show 单个控件 show 单个控件:上面的例子,我们是定位显示了 1 个元素,即在 automan console 下运行 show(ele)后马上会在页面上将该控件“宝贝”用红色框高亮出来。
4.2.2 代码调试
我们也可以将脚本中的代码语句放入 Automan console 中进行调试。步骤如下1. 我们要在 cmd 命令行, 进入本地 page 文件夹的父层目录, 加载所有的对象库 page, 然后再执行 automan console, (如果是你的对象库是下载到 C:\automan\base,需
要 cd 到 C:\automan\base)
2. 进入 automan console 后,工具会加载该项目下的所有 page,直接输入 page 路径可
以进行校验
3. 开始调试
输入需要调试的脚本中的代码:
通过命令行里面打出的日志,可以发现你的代码是否有问题。
4.2.3 其他功能
1. reload 方法
我们在上面介绍了,代码调式的时候需要进入本地的 page,然后启动 console 时会自动 将平台上的 PageModel 下载到本地。然后才能在 console 下进行调试。那假如我们在调试的 时候直接发线了平台上定义的控件有问题,直接在平台上修改了,那怎么让 console 能及时 的拿到更新的 page 呢。这里只要轻松的在 console 下使用 load,即可。如图所示:
2. PageMarker.mark_model 功能
(1) 功能简介
前提:automan console 下获得 page 的实例,或者 SubModel 的实例。用法:调用 PageMarker.mark_model p.search_area 或 PageMarker.mark_model p 作用:标明并框出该实例下面的所有页面模型,与 mark 的区别是这个方法可以只标出局部 区域。目前存在的问题页面模型元素创建了很多以后, 控件名会叠在一起; 个别元素高亮不出来。
在 automan console 下输入代码ie= IEModel.attach(/login/) p= ie.cast(Mms::LoginPage)#这里也支持对 submodel 的 mark,即支持 p=page.submodel PageMarker.mark_model(p) 则出现的效果如图,会将所有定义的控件在页面上下显示出来,帮助用户编写代码。
如果觉得上面介绍的方法需要先 attach,然后在 cast 比较麻烦,而想通过直接 url 就可 以对该页面进行 mark,也可以,这里提供一种的快捷方法,代码如下mark(/login/,Mms::Login)
效果和上面的一样,只是这里的参数不一致,第一个为页面的 url,第二个参数为该页面的 命名空间。3. HtmlModel 的实例方法 automan_methods
(1) 功能简介
前提:automan console 下获得 page 的实例,或者 SubModel 的实例。用法:调用 p.search_area.automan_methods 或 p.automan_methods 作用:列出所有用户定义的方法
(2) 举例说明
在 automan console 下输入代码ie= IEModel.attach(/login/) p= ie.cast(Mms::LoginPage) #这里也支持对 submodel 的 automan_methods,即支持 #s=page.submodel, s.automan_methods p.automan_methods
则在 console 下会列出 P 下的所有定义的对象实例,如图所示:
淘宝测试框架相关文章
《》由(一起看范文网)整理提供,版权归原作者、原出处所有。
Copyright &
All Rights Reserved.

我要回帖

更多关于 淘宝促销价格怎么设置 的文章

 

随机推荐