【10w字】超详细【百分百拿offer】的面试教程,集合5000多家软件测试公司面试题。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、引言

1.1 文档目的

【百分百解决在面试中遇到的些问题】

1.2 背景

此文档历经1年的时间基本概括了深圳与广州上干家公司的面试问题并结合基本盖了95%以上的面试问题文章内容比较多耐心看完必能拿下心仪的offer。在这里祝每一个面试人顺利拿下面试。

二、职业规划

2.1 简单的自我介绍下

面试宫您好我叫XXX来自于XXXX目前从事软件测试工作已经三年工作经验个人性格比较开朗跟人关系比较好做事也比较细心三年测试工作经验中过了不少项目积累不少项目经验前面1-2年主要是功能测试后面这一年主要做接口测试app自动化测试能够独立完成软件产品测试工作能够独立编写测试文档包括用例计划报告等熟悉lnux跟数据库熟悉 jmeter与 python + request进行接口测试也可以使用 pytest框架进行接口自动化测试 python + selenium + pytest框架进行自动化测试python + appnium + pytest移动app自动化测试框架熟悉使用Jenkins持续集成熟悉app专项测试与小程序测试熟悉抓包工具。

我个人平常喜欢…看书…

我个人觉得测试这一块主要是对需求了解需求理解到位工作当中一定细心耐心技术这块不断学习能力

如果面试没有说话 这个是我的一个简单自我介绍看面试官还有什么需要了解的

2.2 为什么离职

①、尽量谈化敏感答案比如人际关系不好处理与上司相处不好、工作压力大等。

人际关系复杂现代企业讲求团队精神要求所有成员都能有与别人合作的能力你对人际关系的胆怯和避讳可能会被认为是心理状况不佳处于忧郁焦躁孤独的心境之中从而妨碍了你的从业取向。

收入太低这样回答会使对方认为你是单纯为了收入取向很计较个人得失并且会把“如有更高的收入会毫不犹豫地跳槽而去的”这种观念形成对你的思维定势。

分配不公平。现在企业中实行效益薪金、浮动工资制度是很普遍的旨在用物质刺激手段提高业绩和效率同时很多单位都开始了员工收入保密的措施如果你在面试时将此作为离开原单位的借口则一方面你将失去竟争优势另一方面你会有爱打探别人收入乃至隐私的嫌疑。

工作压力太大。现代企业生存状况是快节奏的企业中的各色人等皆处于高强度的工作生存状态下有的单位在招聘启事上干脆直言相告要求应聘者能在压力下完成工作这是越来越明显的趋向

②、尽量采用与工作能力关系不大、能为人所理解的离职原因。

寻求更大的发展现有的企业岗位设置难以满足自身职业进一步发展的要求

换一个更好的平台来挑战自我。

原公司发生了重大客观变化公司重组或部内部变动导致工作内容发生重大变化

无法再继续履行劳动合同或者直接被裁员等

与公司文化无法融合每一家企业其实都有自己特有的“文化”如果你在这家公司里工作

却无法认可这家公司提倡的一些文化这就会对企业的发展以及对自己的发展都非常的不利。

所以你想要走出企业的束缚找到一家跟你更契合的公司工作也是可以的。

个人原因上班太远影响工作、家中有事、充电、休假、生病等等。注意避免敏感答案

并不意味着欺骗如招聘人员问及细节问题应如实回答。否则求职者的诚信度可能大打折扣

成功可能性更小。

③、不要诋毁你的老东家

相信很少会有人犯这样的错误这的确是一个不可取的方式你应该把你的离职原因集中表述

在“寻找新机会或新的平台”以及尝试在新的岗位上提升自己。职场虽然没有战争那么血腥

但也有很多委屈、不被理解或被无故受伤这些都很正常的。我们要用一颗阳光的心去面对

用一颗阳光的心去照耀。

在离职后永远要用赞美的词语来评价你的老东家哪怕他在公开场合去骂你你都要用最美的词语去评价他。别忘记你赞美他是你素养高;他骂你是他素质的问题。你永远改变不了别人但你有能力改变自己。

④、体现你的忠诚度

如果你轻描淡写地就离开了之前的团队那么面试官会觉得你在新公司也可能会轻易走人

所以在体现忠诚度的时候你可以试着谈谈你离开上一家公司时有多么痛苦依依不舍即使并没有)聊聊如果有办法使你能在原来的岗位上持续得到提升或者如果不是因为股东之间的权利斗争可适当显得痛心疾首些你肯定不会离开。

而在体现责任感时你需要表达两层意思

首先你从上家公司离职时已经为继任者做了充分的交接。你需要清楚地表明你在上家公司也很认真尽职并且同事之间一直保持互助互利的工作氛围。也许你可以说说你也想过要早些辞职但是考虑某个未完成的重要项目、或是继任者短期内还不能胜任角色所以晚了一些。

其次就是你很期望承担新的职责并表现出你的热枕这种热枕除了对工作的热忱之外

也可以适当的通过向你的面试官不仅是HR提问表现出来对面试官的兴趣、对他们技能的

认可以及共鸣例如“那么你是如何做到现任职位的?”或“如果我有幸担任这个职位

你会给我哪些建议?”

通用说法家人在这边或者想到大城市发展。

2.3  加班的看法

1、(将问题抛给HR)在回答您的问题之前我想了解一下贵公司的加班制度是怎样的。

(这种回答其实是把问题抛回给HR让HR表明公司对于加班的态度其实很多大公司

对于加班都有明确的规定什么情况该加班加班会有什么福利等等问题都是确定的

而小公司就随意很多往往是老板要求加班员工就得无条件加斑。因此如果公司的加班制度明确

那么HR就能够明确地向你介绍你在了解过后再给出回应也不迟。面试本就是双向选择的过程

你也没必要为了通过面试满口答应自己愿意加斑。)

2、在IT行业里加班是比较正常的首先我会了解加班的原因如果公司近段时间需要赶

项目进度或者是站在重要的关键节点上需要加班我会站守自己的岗位把自己手上的事做好

和团队一起加班让公司按预期的进度推进项目这在我看来是必要的加班

如果是其他的原因比如个人原因我会努力不加班在保证工作质量的前提下

我会提高自己的工作效率避免加班。

如果说公司基本上天天都要加班加班的频车较高我希望可以减少不必要的加班让员工

得到充分的休息有休息才会把工作效率提升上来工作才会更有效率另外有些工作上的

能力炼可以在其它地方而不在工作的本身比如对生活的理解和感悟等之类

是从工作中学习不到的正所谓功夫在诗外嘛。

还有我之前在上一个公司上班住的地方离公司较远作为一个女生出于个人人身安全考虑

我更希望不加班毕竟生命健康是从事一切活动的前提嘛。

通用说法如果项目组比较忙加班是没有问题的。

2.4 你还有什么问题要问?

少问一些福利相关的问题

1.公司现在做什么项目 2.公司目前做哪方面测试 3.公司这边测试人员分配比例

4.进入公司我这边大概的工作安排 5公司这么后续发展机会还有培养

6有没有培训 7面试没有回答上的问题再去请教

2.5 你的职业发展规划和职业目标

根据公司况个人原因来说看公司的岗位要求招岗位就是攻能

公司只做功能测过

接下来一年时间内更加完善自己的功能测试2-3年内熟自动化或者性能

3-5年内系统成为自动化或者性能成为资深技术人员

公司做自动化与性能测试

1-2年内熟恐自动化或者性能3-5系统成为自动化或者性能成为资深技术人员性能与自动测试

找一个比较稳定平台跟公司长期发展后期走管理或者产品路线

2.6 你最近测试的论坛和网站是什么?

工作中积累查看网站论坛(51 testing)CSDN书籍《性能测试专家》《性能之巅》

偏开发 python自动化 selenium自动化

2.7 对于一个新的工具你有什么看法

1.自己先去研究 2找会的去请教 3百度去找资料 4工具原始文档

2.8 你做了3年测试收获你的测试心得

3年的测试经验对我来说也是3年的工作经验在这3年的工作经验当中我觉得态度比能力要重要做好一个测试最主要是性格信心耐心细心还需要良好的沟通能力。不断学习的能力产品质量测试流程这块很关键好的计划加好的执行才能成就好的产品。

2.9 怎么转行的毕业之后一直从事软件测试吗

非专业

1、培训不要说刚培训出来

2、自学不断一直学习

3、家里有关系带你入行后面学习过程很勤奋

计算机相关专业

1实习开始公司分配到做测试做测试过程比较喜欢测试一直做下来

2.10 以前在哪里上班公司地址测试多少人开发多少人个人编写

根据你简历上面写的公司详细地址

产品1、项目1个、架构师1个、前端3个、后端 5个、0os 1个、Android 1个

测试3个(测试主管核心测试人员)、运维1个、ui 1个

2.11 你的期望薪资是多少?

1期望薪资不要说区间比如说10-12那肯定是10

2如果原来公司在二线城市原有薪资不要说太高

3深圳那边薪资比广州高10% - 15%

2.12 多久能入职?

1公司比较满意直接随时过去。

2不是很满意下周一个人有点事情比如说回家一趟等等。

2.13 是怎么考虑做软件测试呢?

1、个人性格合适  2、前景还可以  3、个人技能也匹配

2.14 是否有考虑往开发方面测试?

我觉得IT行业没有具体的界限后期开发也要懂测试测试也要懂开发

如果公司有机会愿意去尝试

2.15 计算机专业课程有哪些?

公共课程数学(高等数学、线性代数、概率论与数理统计、离散数学、数值分析)

政治(马克思主义思想概论、毛泽东思想概论与中国特色社会主义思想、

思想道德修养与法律基础、中国近现代史纲要)、大学英语、体育。

专业基础课程电路原理、模拟电子技术、数字逻辑、微机原理、汇编语言、操作系统原理、

编译原理、算法与数据结构、面向对象方法、C语言/C++语言等。

专业方向课程计算机数据库原理、python语言、图形学、人工智能多媒体技术、

网络安全、人机交互、无线互联网技术、软件开发方法、高性能技术系统仿真和虚拟现实等。

大专3年、本科4年

本科四级、大学英语四级及格425分、总分710

2.16 说一下上一个公司背景?

了解公司主要是什么项目百度查下

如果公司主营产品跟你项目不匹配

比如原来公司做医疗设备那就说我们是项目外包的部门专门接项目

2.17 超过26岁女孩子目前有没有打算结婚  【无歧视女性】

暂时没有结婚的计划与打算如果已经有小孩说暂时不考虑二胎

有小孩可以说小孩在老家(原来有朋友因为这个问题被公司pas过)

三、测试理论

3.1 你们原来项目的测试流程是怎么样的?

我们的测试流程主要有三个阶段需求了解分析、测试准备、测试执行。

1、需求了解分析阶段

我们的SE会把需求文档给我们自己先去了解一到两天这样之后我们会有一个需求澄清会议

我们会把不明白不理解的需求在会议上说出来包含需求的合理性还有需求的可测性等

产品这边解答目的是让我们测试这边和开发对需求的理解达到一致。

2、测试准备阶段

会议结束之后我们开始准备测试工作我们测试这边会写一个测试计划分配每个人负责的模块

然后我们就根据自己负责的模块用 xmind(思维导图)进行测试需求分析分析测试点

以及编写测试用例之后我们会在自己的组内先进行评审评审修改之后还会在我们的项目组评审

评审完后进行修改测试用例。

3、测试执行阶段

开发人员编写好代码之后我们会把代码包通过 Jelkins部署到测试环境提测进行SIT测试

在正式测试之前我们会先做一个冒烟测试冒烟测试通过之后我们才转测在执行测试的过程中

我们如果发现bug就会用tapd(或者禅道)记录并且提交bug也会进行bug复测以及回归测试

每一轮测试结束之后我们都会写一个测试报告一般情况下测试4-5轮之后会达到上线要求

当达到上线的标准后测试报告会认为测试通过上线前我们会做预发布测试预发布通过后

由项目组与产品决定时间上线上线完成一周左右我们会写一个项目总结测试报告

总结我们在上一个版本中遇到的问题以及今后有哪些地方需要改进在产品选代过程中

我们会跑自动化用例来进行回归测试。

3.2 如果需求不明确的话你怎么办?

需求不明确的话我会在需求澄清会议上面提出来问清楚这个需求只有明确需求

才能更好的完成工作后续工作中还是不清楚可以找产品再去确认这个需求。

3.3 有哪些需要评审哪些人在

1、 xmind思维导图评审主要是测试人员

2、测试用例需要评审测试人员开发人员产品人员

3、需求文档项目组所有的人员都会到场

阶段总结
现阶段很多人都在说软件测试太内卷了工作太难找了竞争太激烈了。那么如何在这样的现状下使得自己更具有竞争力呢笔者认为大家需要迅速学习软件测试的硬技能提升自己的业务能力早日摆脱初中级测试的Title虽然测试人员众多但是高级的软件测试人员还是很稀缺有很多人挂着高级测试的头衔却还在干着初中级测试的活。在掌握这些硬技能的同时软技能的培养同样重要沟通能力、自主学习能力越来越被企业看重。

如果不想被这个时代淘汰就要做好持续学习的准备。下方给大家准备了全套的软件测试自动化测试全套教程。

【需要的可以点击文章末尾官方推广小卡片扫码备注000免费领取】

 


 
 

3.4 有没有写过测试计划具体包括哪些内容?

参考答案1

测试计划内容

(1)目的和范围 (2)规程 (3)测试方案和方法 (4)测试的准入和准出

(5)测试计划(流程、时间安排、对应人员)  (6)测试的环境配置和人员安排 (7)交付件

参考答案2

我们公司之前按照考核要求写过测试计划不过后面老大觉得太耽误工作进度

后面一般都不再写测试计划而是写版本计划这个在版本计划每个人的任务列出来

负责人列出来自己根据自己的情况分配时间然后汇总大家一起开个小会评审就可以了。

3.5 用例包含哪些部分哪些用例设计方法你一般常用哪些方法?

原来我们用例包含

测试项目用例编号、测试标题、优先级、预置条件、操作步骤、测试数据、预期结果

黑盒测试用例设计方法主要是等价类、边界值、错误推测法、判定表、因果图、正交表、

流程分析法、状态迁移法、异常分析法。

常用的等价类、边界值、判定表、流程分析法、错误推测法。

等价类是指某个输入域的子集合在该子集合中

各个输入数据对于揭露程序中的错误都是等效的

并合理地假定测试某等价类的代表值就等于对这一类其它值的测试因此可以把全部

输入数据合理划分为若干等价类在每一个等价类中取一个数据作为测试的输入条件

就可以用少量代表性的测试数据取得较好的测试结果

等价类划分可有两种不同的情况有效等价类和无效等价类。

边界值的话就是对等价类划分方法的补充。测试工作经验告诉我大量的错误往往是发生在输入或输出范围的边界上而不是发生在输入输出范围的内部因此的话针对各种边界情况来设计测试用例可以查出更多的错误使用边界值分析方法设计测试用例的话首先应该确定边界情况通常输入和输出等价类的边界就是应着重测试的边界情况应当选取正好等于刚刚大于或刚刚小于边界的值作为测试数据而不是选取等价类中的典型值或任意值作为测试数据。

对于错误推断法这个是基于经验和直觉推测程序中所有可能存在的各种错误

从而有针对性的去设计测试用例的方法的主要就是列举出程序中所有可能有的错误和容易发生错误的特殊情况去根据这些情况来选择测试用例例如在单元测试时曾列出的许多在模块中常见的错误以前产品测试中曾经发现的错误等这些就是经验的总结。还有输入数据和输出数据为0的情况。

输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况可选择这些情况下的例子作为测试用例。

前面介绍的等价类划分方法和边界值分析方法都是着重考虑输入条件但都没有考虑输入条件之间的联系相互组合等等的情况。考虑输入条件之间的相互组合可能会产生一些新的情况

但是要检查输入条件的组合并不是一件容易的事情即使把所有输入条件划分成等价类

他们之间的组合情况也相当多因此的话可以考虑采用一种适合于描述对于多种条件的组合

相应产生多个动作的形式来考虑设计测试用例这就需要用到因果图(逻辑模型)。

因果图方法最终生成的就是判定表它适合检查程序输入条件的各种组合情况。

3.6  TestLink工具使用?

(1)创建用户并给新创建的用户指定权限。

(2)创建测试用例对测试用例进行增、删、改、查

(3)把测试用例关联到对应的测试计划中。

(4)把测试用例指派给对应的测试人员。

(5)对应的测试人员查看被指派的测试用例并执行测试用例。

3.7 如何提交一个好的BUG

对BUG有一个清晰明了的描述 详细描述BUG重现的步骤

对于产生BUG的环境进行描述 提交BUG相关的图片和日志;

定位好BUG的等级 将预期结果与实际结果进行对比。

3.8 提bug需要注意哪些问题?

  1. 不要急着提交先跟开发说明bug的情况定位分析下bug。

是前端问题还是后端问题再去提交bug。

  1. 简单明了的概括bug标题清晰的描述bug重现步骤分析bug和预期正确结果附加bug的截图或者日志。描述bug的时候。
  2. 在不能确认该情况是否为bug的时候可以请教其他人。
  3. 提交完bug以后后面还要跟踪bug修复情况。

3.9   bug怎么管理的bug的生命周期或者是bug的状态

原来bug是用禅道来管理的

原来我们公司bug提交bug直接给对应的开发人员对应开发人员修复完成交给测试复测

复测通过关闭bug不通过打回给对应开发。

提交-开发人员(已激活未确认)-开发进行确认状态变成已激活已确认开发修复完成

标注状态是已修复测试人员复测通过已关闭打回给对应开发已经激活。

3.10 提交bug包含哪些内容

所属产品、所属模块、所属项目、影响版本、指派人员

截止日期、严重程度、优先级、bug类型、bug环境

Bug标题、重现步骤、附件

3.11 你提交的bug开发不认可怎么办?

首先我会再看需求文档是不是我的理解有误如果是我对需求理解错的话我就去关闭bug。

如果是bug再去让其他测试人员看看听下他们的意见然后自己先再三去复测并目保存好截图和日志确定这是一个bug之后我就去跟开发说明白并且给他看bug重现的截图以及日志如果开发还是不认可的话我就跟产品或项目经理说明白情况。

3.12 对应无法重现bug应该怎么处理?

首先我会多测几次测了好多次都无法重现的话我就先把bug挂起并且留意一下看看往后的测试中如果在后面的测试中重现bug就激活如果经过几个版本都还没发现的话就关闭bug。

3.13 界面中的乱码可以是哪里导致的?

(1)数据库中的编码设置 (2)前端页面编码 (3)后台代码也会编码

3.14  bug的级别有哪些级别如何判断

1、致命对业务有至关重要的影响业务系统完全丧失业务功能无法再继续进行

或业务系统丢失了业务数据且无法恢复影响公司运营的重要业务数据出错。

2、严重对业务有严重的影响业务系统已经丧失可部分的重要的业务功能或业务系统

丢失了业务数据且可以恢复一般业务数据出错。

  1. 一般对业务有较小的影响业务系统丧失了较少的业务功能

例如界面错误打印或显示格式错误。

  1. 提示对业务没有影响不影响业务过程正常进行

例如辅助说明描述不清楚提示不明确的错误提示。

3.15 测试中如何判断是前端的bug还是后端的bug呢?

通常可以利用抓包工具来进行分析。可以从三个方面进行分析请求接口、传参数、响应。

1请求接口un是否正确如果请求的接口ur错误为前端的bug

2传参是否正确如果传参不正确为前端的bug

3请求接口u和传参都正确查看响应是否正确如果响应内容不正确为后端bug

4也可以在浏览器控制台输入js代码调试进行分析

3.16 项目上线后发现bug测试人员应该怎么办

看严重级别严重还是不严重

严重的紧急变更上线

不严重修复好后跟下个版本一起上线

用户会通过运维反馈到项目组这边项目经理会根据功能模块的负责人分给对应的开发与测试。

测试人员编写对应的测试用例、测试环境中重现bug、提交bug、

交给开发进行修复、修复完成bug、进行bug的复测。

如果测试环境无法重现可以导入生产环境的包到测试环境中测试

还是不能复现查看生产环境的日志去定位问题。

3.17 如何保证质量

(1)需求要吃透多问多去了解。

(2)严格按照测试流程去执行多考虑用户测试场景使用测试用例设计方法多评审。

(3)要有良好的测试执行要求用例执行率达到100%多轮测试进行探索性测试

需要测试之间交叉测试用工具来管理我们的测试工作(禅道 testlink exceltapd)

(4)不断的反思与提升。

3.18 产品是怎么上线的?

一般我们会选择晚上上线开发测试还有产品全部到场进行上线测试。

首先开发将代码打包到生产环境的服务器中如果数据表有变化就会运行sql文件

对表的一些操作接着我们测试就开始先测试主体业务功能以及新增的功能模块;

测试通过之后我们会在界面上把上线测试的数据删除正常上线。

如果发现bug开发人员当场修复bug修复成功之后我们测试再复测通过就可以正常上线

如果发现了bug开发人员在上线规定时间之前都还没有修复好的话就看问题的严重性

如果严重就延期上线如果我们是迭代版本的话我们还需要版本回滚。

如果不严重产品跟客户觉得可以上线就正常上线。

3.19 你测试数据是从哪里获得?怎么获得的假如不告诉你你怎么处理?

  1. 一般都是我们测试人员在测试过程自己造的测试数据如果大量数据我们可以用到存储过程。
  2. 也可以让运维人员帮忙从生产环境导出相关的测试数据如果测试数据中涉及安全性的数据

直接是不能导出。

3.20 如何测试万分之一概率问题

  1. 用 Jmeter或者其他自动化测试工具造大量数据
  2. 让开发修改概率的比例

3.21 为什么要写测试用例?

1)提高测试效率 2)提高测试覆盖率 3)监控测试进度情况 4)也是质量的标准指标

CMM质量体系(用例数也是一个度量标准QA岗位)

3.22 那你们测试用例是怎么编写的

原来我们主要是用exce编写的当然也用过用禅道 testlink去编写禅道都是excel表格编写完成导入禅道系统 testlink也可以Exce表格编写编写测试导入 testlink

3.23 有没有写过测试报告具体包括哪些内容?

参考答案1

1)项目背景和目的 2)测试用例设计 3)测试环境 4)测试过程用到的工具

5)测试范围 6)测试用例执行情况 7)测试缺陷分析和总结 8)测试结果

参考答案2

这个是写过的测试报告其实就是把我们测试的整个过程情况数据统计做成报告包括用例执行情况测试了哪些模块多少用例会哪里模块自动化通过率自动化跑了多少是否全部通过发现了多少bugbug的情况是否遗漏bug测试结论等等这些基本就这些。

3.24 测试报告中测试的结论是什么?

测试报告里面有个测试结论

  1. bug的情况、bug级别、bug分布情况(分布哪些模块)、

bug产生原因(设计问题需求问题代码问题)

2测试是否通过

3.25 如何写好一个测试用例

能够发现bug的用例就是一个好的测试用例

当然我们在编写测试用例的时候一定要步骤、场景清晰、尽量去覆盖所有的测试场景

3.26 什么是冒烟测试? 在什么时候进行冒烟测试?

冒烟测试一般我们是在系统测试之前对所有主体的业务功能测试看是否存在严重bug

如果存在严重bug表示冒烟测试不通过

3.27 回归测试策略

1功能的回归

优先测试用例级别比较高的功能模块可以进行自动化测试

如果时间够进行全量测试

2bug回归

复测这个bug并且相关联的模块与功能也会测试一遍以免由于修改bug导致其他问题产生

3.28 和开发沟通。是怎么沟通的

一般我在提bug的时候跟开发沟通最多比如有一些不清晰的内容会去问开发还有提完bug后会跟踪bug的进度提醒开发尽快修复bug还有测接口的时候去找开发拿接口文档其实我们的工作跟开发都是息息相关的所以都经常都会有沟通的。

3.29 测试中有哪些风险

1测试需求理解上面有偏差

2测试人员水平不够测试人员覆盖点不全

3测试人员时间不够导致测试不完全

4)测试环境上面不足导致测试点不能完全测试完成

3.30 怎么保证测试质量或者你怎么保证你100%覆盖了需求

把需求了解通透引用用例评审机制然后编写测试用例的时候用边界值用等价类补充一些用例根据过往经验用错误推断法来追加一些用例如果存在组合情况的话我会用因果图或者判断表来编写如果业务场景清晰的情况下我会用流程分析法如果状态有发生改变的话我就会用状态迁移法。编写用例一个极其考验耐心的事情要考虑到各种场景全面覆盖到会出现的场景。

3.31 一个需求7天要上线你怎么做

先跟面试官确定产品什么是转测

1如果转测时间在最近1-2天直接了解需求开始测试。

2如果三天后转测一天半时间了解需求一天写测试点和写测试用例一天进行评审和修改测试用例2天执行试用例与理交bug最后一天半进行回归测试与编写测试报告。

3如果4-5天后进行转测试边开发边测试一天半时间了解需求一天写测试点和写测试用例一天进行评审和修改测试用例开始执行测试开发一部分我们就测试一部分。

3.32 产品上线评判的标准?

1测试用例执行率100%通过率95%

21-2级bug修复率达到100%3-4级bug修复率达到95%

3.33 测试过程中发现很多用例重复的有的人认为没必要再测你怎么看?

如果是同一个横块重复用例我们可以考虑不再进行重复测试如果不同模块引用相同的测试用例我们还是需要重复测试

3.34上线后有没有另外的测试用例在生产环境里测试

有我们会去单独去编写测试用例只是主体流程用例新增功能的用例

没有我们会挑选原来测试用例中级别比较高的用例去执行或者我们建立一个 checklist列表去检查功能是否正常使用。

3.35 什么是多分支开发和单分支开发?

git工具相当于svn工具分支开发每个版本或者模块开发不同模块分支合并把所有的功能全部整合起来其实就划分功能模块去开发。

3.36 兼容性测试你们是怎么测的? app与web

Web

不同的浏览器E谷歌火狐浏览器显示比例浏览器前进后退刷新按钮。

App

不同手机厂商型号系统版本内存大小分辨率屏幕的大小高端机与低端机考虑平板

3.37 功能测试重复测试比较高怎么看待这个问题?

1对于测试来说还是良好耐心问题无法避免事情重复的事情还是要去执行

2重复事情我们用自动化测试来进行替代

3.38 项目同时发布你怎么处理?

1确定下我们几个项目是否可以同步发布完成

2如果确定项目不是同时发布(时间问题人员问题)

确定下项目的优先级跟客户这边商量优先级低一些项目推迟发布(产品跟客户)

3.39 你们开发转测试怎么转的

1开发人员发邮件告知对应的测试人员新的代码地址、最新的sql文件、需求开发完成的情况。

2测试人员把最新的代码和sql脚本更新到测试环境中并进行冒烟测试

要是冒烟测试不通过则转测失败。

3.40 你们的开发语言是什么

java后台开发

SSM spring + springy + mybaits数据的封装

SSH sprint + springmvc + hibernate

springboot

fianl极速开发框架

maven项目 pom.xml文件 ...中央仓库

python后台开发框架

Django flask

前端开发语言

JavaScript + css+ html bootstrap框架 常用库 jquery简称JQ Es6/E57

php ThinkPHP框架

四、项目

4.1 简单介绍下最近做过的项目

根据自己的项目整理完成要点

1项目背景、业务、需求、核心业务的流程

2项目架构B/S还是C/5数据库用的什么? 中间件用的什么后台什么语言开发的

是否有做App端是否有H5是否开发小程序等等。

3项目前端有哪些功能模块后台有哪些功能模块

4.2 拿一个你所负责的模块讲下具体怎么测的?

根据自己的项目整理完成核心要点

1拿一个你负责过的模块核心业务模块讲解

2业务流程是怎样的需求怎么样有什么规则没规则简单介绍

3你是如何分析的讲明分析思路测试点主要怎么考虑测试的主要核心测试重点在哪里

用了什么测试方法等等。

4.3 你在这个项目里面主要做了些什么工作

  1. 在这个项目中主要是以功能测试跟后台接口测试为主主要参加了需求评审会议用例的编写

参与用例的评审执行测试。

  1. 协助开发定位问题解决发现的bug编写测试报告协助上线。
  2. 另外就是做了APP的一些相关项测试像兼容性测试、稳定性测试、安装卸载版本覆盖测试和app性能都是有做过的例外后期有做过接口自动化等。主要就是做了这些工作。

[这个具体根据你自己的简历上写的来说]

4.4 你们项目组有多少人、开发多少个、测试多少个?

[公司具体人数可以不太清楚项目组多少一定清楚]

[这个一定要根据自己的简历项目大小来说不能乱说]

产品1、项目1个、架构师1个、前端3个、后端5个、ios1个、Android 1个、

测试3个(测试主管核心测试人员)、运维1个、UI一个

4.5 测试人员怎么分工的?

1我们测试组3人1个测试组长2个测试一般都是根据需求的复杂程度大小来

尽量是自己熟悉哪个版块的就继续做那个版块。

  1. 比如我这边主要是负责前端大部分的功能模块还有接口测试跟ui自动化测试另一个同事主要是功能测试这边组长这边也负责一些功能测试包括一些性能跟安全测试。
  2. 其实测试工作也划分的没有那么细后期我们也会做交叉测试相互测试功能性能跟安全测试我也会参与一下。

4.6 项目的送代周期? 多久一选代? 一个版本你们发现多少bug

[切记工具自己所选择的项目来回答]

我们公司是这样的迭代还是蛮快的一般是两个星期一个迭代迭代测试两轮。Bug的话不一定哦关键还得看开发哈哈开发的版本质量好的话BUG就会少些整个版本比较好的情况下大概也就二十来个BUG当然如果遇到开发是个新手那么找到60-70个也是很常见的比如之前的那个金融项目足足发现了72个BUG这样的情况下追踪BUG的工作量都比较的大如果是版本选代的话那么基本就不会出现多少BUG了。

参考答案2

因为我们项目的用户活动和三方合作平台比较多一般半个月或者1个月肯定会有一个迭代版本

假如用户或者合作方突然有很紧急的需求那一般老大他们会向上发邮件和OA呈批给(产品经理项目经理)如果通过了就会马上加急处理这个需求测试完成直接上线。

现在都是维护为主但新需求也不断有一般一个版本上百个bug是有的。

4.7 你们整个项目写了多少用例你负责的模块大概写了多少用例?

[切记己根据自己的项目及负责的模块来]

答这个得根据项目的复杂程度我们最近做的这个也还好整个项目写了大概2干3百多条(有点多了)我负责的模块就写了一千多条(你要思考你负责了哪些模块大概评估下不要乱喊)。

总结注意点没有标准答案先说你的前置条件再说数据只要你前置条件和数据匹配即可。

4.8 最近的版本写了多少用例?

(总结注意点没有标准答案先说你的前置条件再说数据只要你前置条件和数据匹配即可

特别注意你如果是半个月的版本一般给你两天写用例你自己评估下写多少。

半个月的版本1-2天需求分析1-2天写用例1天评审用例其余的时间就是执行回归bug编写测试报告)

最近的版本因为没有特别的用户活动产品那边也没有给特别大的改动需求我负责的

有5个模块吧大概有180多条用例。

4.9 你的需求分析一般几天用例大概写了多长时间?执行了多长时间?

如果按照2周一个版本来算的话我们需求分析一般是由产品SE先组织我们开会讲清新版本需求然后我们再花1天到1天半时间去详细分析需求另外有2天左右时间来写用例写完用例会进行用例评审后面的时间基本就是在执行用例提bug并跟进bug修复问题。

4.10 在uat测试的时候突然客户临时要大量的数据

备注说明uat测试人员提供用例uat环境已搭建好他就开始来执行如果发现问题

需要协助谁负责这个需求就找对应的人发现bug提交到uat版本里面修复完了

客户需要回归验证的我们公司只是辅助他去执行测试。

答案

看他需要的数据能不能从上个版本或者生产环境导入数据进来测试如果没有我们看能不能 批量修改数据去测试如果不行我们只能通过存储过程造数据了。

4.11 发现哪些映像比较深刻bug/经典bug?

根据自己的项目来准备核心要点

1有哪些经典或者说影响比较深刻的Bug最好是与业务相关的Bug不要举例说前端的Bug

2具体怎么分析讲明你的分析过程。如何定位的......

比如:业务逻辑漏洞

支付功能:

1商品选择支付的时候实际已扣款成功但是用户后台显示该商品没有付款

导致不能使用该商品提供的服务。

2商品所显示的价格是x元但是实际支付的时候显示和扣款的价格是y元(x≠y)

找密码流程

按照常规操作会直接跳跃了某个必须的流程(流程缺失)但是通过url修改参数又可以访问到 该流程存在安全和逻辑漏洞。

安全漏洞

1登录账户退出or注销之后浏览器返回键回退之后又可以回到已登录的页面继续操作识 别用户身份的信息并没有失效用登录后才能访问的url直接访问也可以登录安全漏洞。

2搜索功能前端页面的搜索输入框中输入特殊敏感符号

(如script> alert(document.cookie)</script)直接搜索后有可能把当前登录账户的

  cookie信息直接以弹框的形式暴露出来。

3新增功能一开始没有限制字符的类型和数量当输入特殊符号、超长的字符

提交后直接抛出包含有 INSERT INTO的完整SQL语句。

4前端搜索以敏感字符直接搜索后客户端和服务端都没有任何字符过滤or转义处理

直接把数据库和网站服务器的名称、版本暴露。

数据调用/加载异常:

1翻页功能有时候会出现前面几页翻页和数据显示都是正常的往后再翻页就会

出现翻页不了or加载的数据异常。

  1. 前端页面有几级菜单的情况下程序都已经调用过第一级是正常展示的但是第二级、

三级有可能被折叠而没有显示在浏览器显示。

3定位到某个导航主题调用的数据并不是该主题分类的数据而是调用成了其他分类的数据。

不可逆操作导致流程受阻

1APP测试orH5页面测试触发某个操作比如手机触屏下滑刷新页面不能恢复到操作前 的正常页面。

2输入某个异常值提交之后程序没有相关的处理机制导致页面保存没法继续进行其他操 作。

3登录方式切换登录时有几种不同的方式如密码登录&短信验证码登录但同一时刻默认 只能显示一种登录方式当从密码登录界面点击短信登录切换到短信验证码登录界面之后 没有切换返回密码登录界面的功能。

4删除异常正常情况下可以从列表中删除记录但是若先对列表记录执行了搜索功能之后 再次删除的时候可能出现删除无响应而删除不了数据。

5弹框阻止当触发某个操作如“保存”、提交”or某个开关按钮界面中弹单出一个提示框 此提示框不管怎么操作都无法关闭直接阻碍了页面上其他功能的操作。

附件上传时未控制格式尺寸和容量大小系统处理出现异常

1文件上传功能没有限制上传的文件格式、尺寸和大小当上传非常规文件(如js文件)、大 容量文件(如图片大小>20M)较大分辨率(如1600×1200)服务器没有相应的异常处理 机制导致网站出现持续长时间的卡顿影响后续操作。

2上传的是非常规的文件如js格式文件程序无相关控制直接将js文件上传到数据库 前端页面访问时若不能解析则出现异常页面。

缺少非空判断服务器报500错误

1编辑包含多个字段的页面时有一些字段在程序中控制是必填的(事先未知)但是没有任何 说明提示当不填写这些字段直接保存时会出现服务器异常页面报500状态错误。(特别 是在管理后台容易出现此场景)

2在形如以下结构的if函数中关系表达式的条件没有对某个变量(该变量因代码疏漏未作初 始化赋值)进行非空判断就直接执行语句体程序已空值null进行参与运算而出现异常 如500错误if(关系表达式)样式导致异常。

3某个功能(如金额输入和统计)在A页面程序限制只能输入正整数而在B页面却没有相应 控制若不小心在B页面输入了非正整数比方小数A和B的数据分别传递到到同一个C 页面时数据处理会出现异常。

4文章上传/图片上传超长字符的文章内容or较大尺寸的图片上传程序没有进行相关的压 缩和截取直接完全调取到前端页面导致浏览样式异常

App测试过程中常Bug: https/www.cnblogs.com/123456ww/12198075.html

[经典bug前端申请借款中用户没有信用额度或者借款金额超过了用户信用额度但是却能成功提交审核]

[发现途径我是在模拟借款人借款金额提示我的可用额度为0但是我输入5000的借款金额点击提交审核提示我提交成功等待审核]

[解决首先我去数据库查找到对应的表比对我的信用额度跟界面显示的数据是否一样一样我就把数据库的记录填写的借款信息和我借款成功的界面显示截图都保存好。之后提交这个bug开发人员通过修改代码我再复测有没有重现bug]

[还有一个就是在借款流程中我们通过修改数据库中的数据把借款时间修改了制造出一个逾期未还款的数据结果显示还款的金额比借款金额还少而且管理要收得特别高存在不合理性]

[还有一个是在产品上线后运维人员在统计数据时发现少了一条数据我们去数据库检查发现0分0秒的数据没有统计后来开发人员修改了代码之后就解决了]

1服务费计算错误计算公式开发这边写错本来是利息0.3写成003开发修复bug。

2退出用户后退还可以进入到原来的登录完成操作后的界面原始退出用户没有删除用 户对应的 session导致后退完成后用户用户 cookie可以进行操作。

3重新选择下拉框输入信息全部清空原因修改类型重新刷新界面输入数据并没有 保存缓存里面导致一刷新原来信息没有解决开发选择不同借款类型不再进行刷新。

4借款标题输入xss攻击代码导致接口所有的数据不存在显示因为xss脚本当然代码 处理开发这边进行转义字符串。

5谷歌浏览器登录不成功显示验证码。

4.12 每个阶段测试开发在干嘛比如你写用例的时候开发在干嘛

1需求阶段大家都在了解需求

2测试准备

测试编写用例开发做概要设计详细设计然后就是编写代码编写接口文档设计文档。

  1. 测试执行阶段

测试人员执行用例发现bug、提交bug、开发修复bug(开发还有可能在开发未完成的功能)

4.13 你们公司是否敏捷开发

可以说是也可以说不是。[具体看你了不了解敏捷开发模式]

[问了我有没有做过敏捷测试]

扩展知识储备

1、什么是敏捷开发

敏捷开发以用户的需求进化为核心采用达代、循序渐进的方法进行软件开发。

在敏捷开发中软件项目在构建初期被切分成多个子项目各个子项目的成果都经过测试

具语可视、可集成和可运行使用的特征换言之就是把一个大项目分为多个相互联系

但也可独立运行的小项目并分别完成在此过程中软件一直处于可使用状态。

2、敏捷开发优缺点

特点

  1. 能适应快速的客户需求变化快速的交付注重与客户的沟通。最优先要做的是通过尽早的、

持续的交付有价值的软件把项目拆分成各个小的子项目快速开发快速交付有问题及时调整 适合高风睑项目。

  1. 交付周期短交付的时间间隔越短越好一周一个迭送代甚至有时候一周多个选代

不过每个选代版本的需求不会太多注重项目持续选代开发交付。

  1. 整个项目开发期间业务人员和开发人员必须天天都在一起工作团队规模不能太大

团队间强调面对面的交谈。

4、更关注可交付可以使用的软件而非文档。

5、对团队技术要求高能快速适应客户对需求的变化。

6、敏捷团队只专注于开发项目中当前最需要的、最具价值的部分。这样能很快地投入开发另外 较短的迭代周期使团队成员能迅速进入开发状态。

优点

1、敏捷开发的高适应性以人为本的特性适应客户的更快需求变化更快的交付成果。

2.更加的灵活并且更加充分的利用了每个开发者的优势调动了每个人的工作热情。

缺点

1、由于其项目周期很长所以很难保证开发的人员不更换而没有文档就会造成在交

接的过程中出现很大的困难。

2.特别项目存在新手比较多时老员工比较累.(对开发团队人员的技木要求高)

3、敏捷开发流程图

4.14 你这个项目做了多久? 你这个项目现在的用户里有多少? 活跃量多少?

时间根据简历来

比如一年时间金融项目100W用户2W活跃用户

五、测试思维

5.1 打电话功能怎么去测

我们会从几个方面去测试界面、功能、兼容性、易用性、安全、性能、异常。

1界面我们会测试下是否跟界面原型图一致考虑浏览器不同显示比例屏幕分辨率。

2功能给不同人员打电话不同号码打电话不同运营商测试每个按钮是否正常使用拨打号 码是输入还是复制过程还是其他地方跳转过来多次拨打电话双卡选择不同电话卡。

3兼容性不同手机型号厂商不同系统版本屏幕大小分辨率内存大小

4易用性操作是否说的越多越好

5.2 给你一个杯子怎么测

功能测试

主要关注水杯基本功能

1、水杯是否可以正常装水

2、水杯是否可以正常喝水

3、水杯是否有盖子盖子是否可以正常盖住

4、水杯是否有保温功能保温功能是否正常保温

5、水杯是否会漏水盖住盖子拧紧后是否会漏水

界面测试

主要关注水杯外观、颜色、设计等方面

1、外观是否完整

2、外观是否舒适

3、颜色搭配及使用是否让人感到舒适

4、杯子外观大小是否适中

5、杯子是否有图案图案是否易磨损

易用性测试

主要关注水杯使用是否方便

1、水杯喝水时否方便

2、水杯拿起放下是否方便这里会行注到水杯形状的测试

3、水杯装水是否方便

4、水杯携带是否方方便

5、水杯是否有防清功能

6、水杯装有低温或者高温水时是否会让手感到不适

性能测试

1、水杯装满水时是否会露出来

2、水杯最大使用次数

3、水杯的保温性是否达到要求

4、水杯的耐寒性是否达到要求

5、水杯的耐热性是否达到要求

6、水杯掉落时时是否可以正常使用

7、水杯长时间放置时是否会发生泄露

兼容性测试

主要关注水杯是否可以装其他液体如果汁、汽油、酒精等

可移植性测试

主要关注水杯放置环境等

1、将水杯放在常温环境中使用是否正常

2、将水杯放在零下的环境中使用是否正常

3、将水杯放在高于正常温度的环境中使用是否正常

安全性测试

主要关注水杯外观和各种异常条件下是否释放有毒物质等

1、当水杯装满热水时水杯是否会烫手

2、当水杯装上水后是否会产生有毒物质

3、把水杯放在零下环境时是否会产生有毒物质

4、把水杯放在高温环境时是否会产生有毒物质

5.3 图像上传功能的测试点

1.检查图片上传路径

2.检查图像上传和修改功能

3.检查各种扩展图像文件的上传例如JPEG、PNG、BMP等

4.检查文件名中含有空格或其他可用特殊字符的图片的上传

5.检查重复名称图片上传

6.图片尺寸大于最大允许值上传时应该显示适当的错误消息

7.检查上传的图片文件类型外的其它文件时(例如txt、doc、pdf、exe等等)

应该显示适当的错误消息。

8.检查如果上传的图片满足指定的高度和宽度(如果有定义的话)则可以成功上传否则不能上传。

9.上传大尺寸图片时应显示上传进度条

10.检查上传过程中的取消按钮是否有效

11.检查文件选择对话框中的文件列表是否只显示支持文件类型

12.检查上传多个图像的功能

13.上传后检查图像质量图像质量不应该改变

14.检查用户是否能够使用/查看上传的图像

5.4 搜索框的测试

1)搜索按钮功能是否能够实现验证搜索框的功能是否与需求一致

2)点搜索后原先的搜索条件是否清空。

3)直看比较长的名称是否能查到输入过长查询数据看其有没判断报错系统是否会截

取允许的长度来检索结果。

4)是否有忽略空格的功能需要有忽略前置空格和后置空格的功能但不能把中间空格忽略

5)不输入任何内容点击搜索看查询的结果

6)查看搜索框内的默认内容是否与设置的一致焦点放置搜索框中搜索框默认内容是否自动被清空

7)输入系统中存在的与之匹配的条件看其的查询后数据的完整性显示记录条数正确、文字折行显示正 确页面布局美观列标题项、列显示内容、排序方式符合需求定义。

8)组合中文和各种特殊符号输入查看能否正确搜索到合的内容

9)输入系统中不存在的与之匹配的条件是否搜索出信息或者给予提示信息

10)使用复制粘贴测试搜索框是否能执行

11)注意在光标停留的地方输入信息时光标和所输入的信息会否跳到别的地方

12)反复输入相同的数据(5次以上)看是否报错

13)敏感词汇提示用户为敏感词汇

{

语句提1

}else{

语句提2

}

3.某个被调用的方法中缺少某些参数的定义在不知情的情况下直接调用时传递了未定义过的参数or类型不匹配的参数到该方法如果对应网站是处理批量的业务则可能会导致大面积的500异常页面对网站正常业务和SEO排名损失风险比较大。

4.新增、编辑->保存对所提交的字段有的末作非空限制可以直接保存成功保存后以空内容展示可能存在不确定性比如操作已保存成功的空记录时是否会影响其他正常添加的记录是相互独立的还是会牵连到其他所有的类型。

服务器配置错误(漏配or错配)更新后出现500 or 404

1.服务器配置文件如 web.config中把前端访问的url地址写错直接发布更新之后前端页 面访问可能会出现404错误。

2.程序代码中的某些逻辑错误和服务器配置相冲突时前端页面触发某些特定按钮or页面可能 会出现500错误。

数据传递过程无控制导致数据输出到界面功能异常or样式变形

  1. 搜索功能有的页面本身有回显所搜索关键词的功能搜索输入框填写的keywords字符较长

(如100字符)直接搜索后这些长字符显示在页面中使得页面原来的样式变形

甚至有的功能按钮被挤到页面之外而不能使用。

2.新增功能对于新增字段的长度没有任何限制超长字符新增可以保存成功回到列表页也没有对 显示的字符长度进行控制所有字符长度都展示在列表挤压其他字段的

14)不同搜所的条件之间来回选择查看是否出现页面错误

15)测试多个搜所条件时要注意搜所条件的组合测试可能不同组合的测试会报错

16)点击搜索框看能否在搜索栏下方显示提供设置好的最近热门搜索词点击任一可以

直达搜索结果页

17)点击搜索框时到有搜所历史时能显示历史搜所内容历史搜所内容应从上到下按

时间排序点击清空历史清空所有搜索记录

18)直看搜索框最大输入字符数

5.5 给你一个电梯你怎么测

功能测试

1)测试电梯能否实现正常的上升和下降功能

2)电梯的按钮是否都可以使用

电梯内分楼层键是否正常

电梯内开关门键是否正常

电梯内的报鳘键是否正常使用

电梯外的上下键是否正常

3)电梯门的打开关闭是否正常

4)报警装置是否可用

5)与其他电梯之间是否协作良好

6)通风状况如何

7)突然停电时的情况。

8)关注显示屏电梯内外的显示屏显示的电梯层数、运行方向是否正常

9)有障碍物时电梯门的感应系统是否有效

10)上升途中的响应

电梯本来在1楼如果有人按18楼那么电梯在上升到5楼的时候有人按了10楼

这时候是否会在10楼先停下来;

电梯下降到10层时显示满员此时若8层有人等待电梯是否在8层停

11)是否有手机信号

可靠性测试

1)门关上的一刹那出现障碍物。

2)同时按关门和开门按钮。

3)点击当前楼层号码

4)多次点击同一楼层号码

5)同时按上键和下键

易用性测试

1)电梯的按钮的设计符合般人的习惯吗

2)楼层按键高度(小孩和一些身高矮的用户会按键不方便)

3)电梯是否有地毯、夏天是否有空调、通风条件、照明条件、手机信号是否通畅

4)电梯是否有扶手是否有专针对残疾人的扶手等等

压力测试

1)看电梯的最大承重量在负载过重时报警装置是否有提醒

2)在一定时间内不断让电梯上升、下降

稳定性测试

1)看电梯在最大负载下平稳运行的最长时间

安全性测试:

1)下坠时是否有制动装置

2)暴力破坏电梯时是否报警超重是否报警

3)停电情况下电梯是否有应急电源装置

性能测试

1)测试电梯负载单人时的运行情况(基准测试)

2)多人时的运行情况(负载测试)

3)一定人数下较长时间的运作(稳定性测试)

4)更长时间运作时的运行情况(疲劳测试)

5)不断增加人数导致电梯报警(拐点压力测试)

5.6 更换头像的测试点站在app的角度来分析

功能测试

1点击头像可以放大观看

2查看头像是否支持放大缩小

3刚创建账号时是否显示默认头像

4查看头像之后点击其它区域自动退出

5头像支持的图片格式图片大小

6支持相机拍摄的图片和从网上下载的图片

7选择完图片后是否有一个定框

8选择相片方式从手机相册获取

9选择相片方式用手机照相机拍照

10头像显示的是方形还是圆形

11选择图片范围时图片是否支持放大/缩小

12选择好图片区域后保存头像是否居中显示还是只显示选择图片区域的某个角落

13保存完图片后是否会有提示更换头像成功

14修改头像后去app其它模块时是否马上刷新显示最新的头像

15进入更换头像界面时可以取消更换头像

16选择从相册选取图片还是从照相机时都能取消返回到修改头像界面

17头像是否支持本地缓存断开网络之后是否还能显示头像

18网络异常时修改头像失败是否会有提示

弱网测试

双卡的情况下切换到另一张卡

连接到一个假热点

用 fiddler模拟2G、3G、4G情况下的弱网情况

从手机流量切换到wifi

性能测试

上传的时间

上传过程中

手机死机? 手机没电? 手机卡停机?

上传成功以后去数据库查看有没有

上传成功后退出登录在登录看是否是更新后的头像

上传成功后删除头像切换到其他页面再切换回来看头像的展示情况

兼容性测试

更换成功后在不同手机屏幕不同分辨率不同手机型号不同系统版本的情况下头像的展示

5.7  qq登陆界面怎么测试分析

主要考察测试者是否熟悉各种测试方法是否有丰富的 App/eb测试经验以及相关开发经验以及设计 Test case的能力

功能测试( Function test)

1)输入正确的用户名和密码点击提交按钮验证是否能正确登录

2)输入错误的用户名或者密码验证登录会失败是否有相应的错误提示信息

3)登录成功后是否跳转到正确的页面

4)用户名和密码如果太短或者太长应该怎么处理

5)用户名和密码中有特殊字符和其他非英文的情况

6)记住用户名和密码的功能

7)登陆失败后不能记录密码的功能

8)用户名和密码输入时前后有空格的处理

9)密码是否可见是否用星号标识

界面测试(U|Test)

1)布局是否合理2个 Testbox和个按钮是否对齐

2) Textbox和按钮的长度、高度是否复合要求

3)界面是否美观

4)图片颜色字体超链接是否都显示正确

性能测试( performance test)

1)打开登录页面需要几秒

2)输入正确的用户名和密码后登录成功跳转到新页面不超过5秒

3)能支持多少个用户同时登陆

安全性测试( Security test)

1)登录成功后生成的Cookie是否是httponly(否则容易被脚本盗取)

2)用户名和密码是否通过加密的方式发送给Web服务器

3)用户名和密码的验证应该是用服务器端验证而不能单单是在客户端用 javascript验证

4)用户名和密码的输入框应该屏蔽SQL注入攻击

5)用户名和密码的的输入框应该禁止输入脚本(防止XSS攻击

6)错误登陆的次数限制(防止暴力破解)

兼容性测试( Compatibility Test)

1)不同的平台是否能正常工作比如 WindowsMac

2)移动设备上是否正常工作比如 iPhone Andriod

3)不同的分辨率

4)不同的浏览器大小(浏览器最大化和非最大化)

5.8 微信点赞

功能测试

1)给某个好友点赞点赞数+1点赞栏显示具体点赞人的名字该用户手动点赞回馈

2)点完赞后共同好友在点赞区能看到该人是不是点赞了非共同好友看不到

3)两个头像一样的人点赞能否正确显示

4)点完赞后在点击点变成点赞取消

5)取消点赞-不通知用户

6)点赞后通知用户取消在点赞此时不通知用户

7)多个用户同时对其点赞点赞数正常

8)最多能点多少个赞-边界值测试

9)可以从点击点赞区头像进入相应人的主页查看

10)点赞是否按照时间顺序排序

11)点赞后是否能够正常评论

app端测试

1)弱网情况下点赞能否实时更新

2)点赞时有短信或者电话进来能否显示点赞情况

3)耗电量耗流量关注

性能测试

1)大量用户并发点赞时该接口的响应时间最大承受的qps

2)大量用户并发点赞时此时界面进行点赞点赞功能是否正常

兼容性测试

1)不同手机型号点功能显示功能是否正常

5.9 微信发红包测试点

1、功能测试

1)发给单个好友

①正确的金额+无留言+无表情

②错误的金额+无留言+无表情

③正确的金额+有留言+无表情

④错误的金额+有留言+无表情

⑤正确的金额+无留言+有表情

⑥错误的金额+无留言+有表情

⑦正确的金额+有留言+有表情

⑧错误的金额+有留言+有表情

其中金额(001-200)可以测试以下数据

数字测试0.0.009、0.01、0.011、01、199.99、200、200.01这些边界值

中文、英文、特殊字符或者这几种的组合

是否支持复制黏贴

为空/包含空格

金额的增删查改

留言可以测试以下数据

数字、中文、英文、特殊字符、表情或者他们的组合

输入超长文本时是否会给出相应的限制或提示

包含空格

是否支持复制黏贴

留言的增删查改

表情可以测试以下数据

选择收藏的表情测试(动图/静图)

选择下载的表情测试(动图/静图)

录制表情并添加进行测试

表情的增删查改

⑨点击塞钱进红包选择零钱付款此时需要考虑金额>零钱金额<零钱金额=零钱三种情况。

⑩点击塞钱进红包选择已添加的银行卡付款此时同样需要考虑金额>银行卡余额金额<银行卡余额金额=银行卡余额三种情况

11、点击塞钱进红包选择使用新卡付款按照流程添加新卡此时同样需要考虑金额>新卡余额金额<新卡余额金额=新卡余额三种情况

12、使用指纹确认付款(正确的/不正确的指纹)

13、使用密码确认付款(正确的/不正确的密码)

14、发送成功之后对应的途径会减少相应的金额

15、发送者接受者可以点击红包查看到红包的具体信息且金额留言表情均能正确显

16、好友点击红包之后零钱中将增加相应的金额再次点击之后只能查看到红包的信息

17、24小时之内没有领取的红包将退回原账户此时原账户的零钱将增加相应金额的金钱24小时后好友点击红包显示红包已过期无法查看到红包的余额

18、右上角的红包记录中可以查看刚刚发出的红包的金额

19、检测帮助中心中链接是否均可以正常跳转查看

20、当红包超过24小时之后则无法查看红包被每个人领取的详细信息

2)发送群红包(与发给好友的测试点相似以下仅写出不同的部分)

①选择为拼手气红包时群中每个人收到的金额随机(但加起来为红包的总金额)为普通红包时群中每个人收到的金额相同

②红包个数(1-100)012大于群成员人数小于群成员人数等于群成员人数99.100101小数中文、英文、特殊字符、表情或者他们的组合

③但红包没有被抢完时此时首次点击该红包的人可以抢到一定金额的红包不是首次点击该红包的人只能查看该红包的信息;当红包抢完时所有人只能查看该红包的信息

④在24小时之内红包的金额被完全抢完且此时为拼手气红包时金额最多的人会显示为最佳手气(若有两个人取得红包的最大值时则只有一个人会显示为最佳手气);若没有被完全抢完则没有最佳手气且余额会退还到原账户

⑤群中所有人均可以抢红包(包括自己)每个人最多只有一次抢该红包的机会

⑥测试当红包个数使得每个红包分到钱小于0.01即总金额为0.02而红包个数为3时的情况

2、兼容性测试

1)苹果手机和安卓手机

2)苹果手机的不同版本

3)安卓手机不同的机型

4)不同分辨率

3、性能测试

1)打开红包的响应时间不能超过三秒高并发场量下不能超过5秒

2)耗电量

3)消耗流量的多少

4)所占内存

4、ui测试&易用性测试

1)界面的设计风格是否统

2)界面中文字是否简洁没有错别字

3)是否易操作易学习易理解

5、中断测试前后台切换网络异常低电量断电来电短信等

6、网络测试

1)网络兼容性2G/3G/4GWIFI热点移动/联通/电信

2)无网测试

3)弱网延时&丢包

5.10 微信聊天功能测试用例

消息发送(单聊群聊语音文字图片表情链接字符及长度)

成员管理(加人被加退出被动退出编辑删除)

群组管理(创建群消息设置申请入群扫二维码入群退群通知提醒头像编辑名称编辑简介编辑权限编辑成员编辑)

消息管理(发布通知接收通知发文件消息提醒通知提醒声音震动好友请求请求处理)隐私管理(黑名单允许好友查看动态允许陌生人查看动态允许通过手机号查找允许真实姓名查找)

权限管理(开放群(任何人入群)、半开放群(验证入群)验证加好友不需验证加好友)

登录退出(忘记密码更换账号)

好友管理(扫二维码加人加好友查好友好友推荐群组推荐联系人导入拉黑名单解除好友备注名)

动态管理(发动态发投票点赞表情评论增加删除分享隐藏编辑

消息推送(在线离线收发时序)

文件管理(接收离线接收预览删除分享转存文件格式大小)

5.11 给你一个界面怎么测

这个具体看什么界面了首先要搞清楚界面上有哪些功能点一定要弄清楚哪些是展示性的信息哪些可操作性的东西。然后从上到下根据界面上的一些功能进行逐一测试。具体的话

1)首先肯定是做界面ui测试主要检查看界面布局是否合理是否美观图片颜色字体超链接是否都显示正确界面数据是否展示正常等等。

2)然后根据界面上的各个功能点需求逐一检查各个功能是否有问题。

3)考虑到时界面所以得考虑兼容性问题对于Web端要不同的浏览器展示问题浏览器缩放比例问题不同屏幕大小问题看是否都能正常展示对于App端当然要考虑不同的手机屏幕大小分辨率等等。

5.12 你说原来充值功能你是怎么测试的?

一、首先我们先测试充值的主体功能看看能否充值成功;(等价类边界值判定表流程分析法状态迁移法错误推测法异常处理法来测试)

用边界值的方法测试充值限定的额度能否充值成功

用特殊字符在充值输入框输入是否有提示语提醒

充值输入框为空时点击充值是否有提示

在输入框里输入金额再后退网页再进入充值页面是否还保存着输入的金额数

多次往返充值界面是否还可以正常充值

选择多个充值支付方式能否充值成功

选择各银行网银能否充值成功

充值成功时有没有相关的提示和页面是否正确跳转

充值成功后相关联的金额是否正确显示

充值成功后查看数据库的相关数据是否有存在和正确

点击第三方支付(如支付宝微信)是否有相关的连接页面跳转

能否同时选择多个支付方式来充值

交叉选择支付方式后再选择其中一个支付方式能否充值成功

充值输入框多次修改充值金额能否充值正确

二、我们再测试充值的性能用 jmeter模拟大量用户同时充值看看能否充值成功;

三、我们再对充值的安全性进行测试

(1)绑定银行卡充值和未绑定银行卡能否充值成功;

(2)绑定多张同名的银行卡以及一个用户绑定多张不同名的银行了能否绑定充值成功

(3)实名认证和未实名认证能否充值成功

(4)用边界值的方法测试每天充值限额次数

(5)测试一天之内最多可以输入密码错误次数是多少次数达到多少次锁卡是否需要到银行解锁方能再进行充值

(6)输入充值金额后需要输入多少次密码是否有加密不输入密码能否充值成功;

(7)使用其他的支付方式支付能否充值成功

(8)测试充值金额的类型

(9)充值之后所充值的账户以及平台的余额额度是否有增加;

(10)单次点击多次点击会不会充值成功;以及多次点击会不会多次充值;

(11)同时打开多个充值界面能否充值成功;

(12)不登陆用户的情况下是否充值成功;

(13)不选择银行卡或其他方式支付是否能充值成功;

(14)跨站攻击数据泄密;

四、我们还要对兼容性进行测试看看不同的版本、分辨率不同的浏览器能否正常充值

五、对易用性进行测试测试充值的整个流程是否易用遇到一些不懂的有没有相应的温馨提示

六、我们还会考虑测试异常的情况(网络异常和设备异常)

比如说

(1)充值的过程中突然没网或者网络中断或弱网情况下是否充值成功;

(2)充值过程中突然断电了能否充值成功;

(3)充值过程中设备卡顿能否充值成功;

(4)银行卡挂失被注销卡内余额不足卡里金额被冻结额度超过限额的情况能否充值成功

七、我们再对界面进行测试

(1)界面是否美观格式是否正确中文是否有错别字

(2)在其他浏器能否打开我们这个充值界面能否正常显示并且正常充值

(3)界面上的按钮是否符合用户的使用习惯主要关键的功能按钮是否容易找到操作是否便捷;

(4)在不同的浏览器里界面缩放后界面排版是否正常显示

5.13 电商的库存逻辑怎么测。

比如客户下订单库存减少规定时间内未支付定单就取消库存又加回来

我会先测一下界面比如界面的排版是否美观有没有错别字颜色适不适合等。然后再测试一下功能提交订单页面我会测试购买商品数量自己输入的边界值和点击加就加或者减少修改数量不选择数量会不会有默认数量不选择商品类型以及选择多个商品类型然后测试正确提交订单后看库存是否有减少相应的数量。再测试规定时间的边界值比如规定时间是1个小时那1个小时内完成支付库存有没有变化61分钟还是否能去支付订单有没有关闭接着会测试一下1个小时内取消订单单库存有没有增加相应的数量以及1小时内没有去支付系统自动取消订单库存有没有加上相应的数量。再测安全性涉及到支付用fiddler工具抓包拦截数据看能否修改参数再发送请求支付成功测逻辑的话大概就这些。

六、 Linux

6.1  Linux系统你是怎么用的?

[在测试1、执行的过程中我们发现的bug有时候需要定位bug协助开发修复bug时需要在linux里通过命令tail-200或tail-500查看当天的日志的后面多少行或者前面多少行定位bug或者通过tail -f来查看日志里的关键字 exception(异常) error(错误)。

[后台程序运行久了会对系统造成卡顿等诸多隐患或我们做性能测试的时候我们都会通过linux的命令Ps -ef显示所有进程)、top(监控程序执行状况)、free -m显示内存使用情况)

来查看系统资源如果服务器出现故障时我们也会用service httpd status看下服务器是否启动用ps -ef|grep httpd查看apache进程是否启动用ps -ef|grepjava查看jdk进程是否启动如果服务器起不来常见的问题有端口可能被占用用 netstat- an|grep 8080查看端口是否已被占用。]

[搭建测试环境的时候我们在是在linux下进行的搭建LAMP时在线用命令 yum install

安装 apachephp以及mysql;或通过 xshell来导入需要的环境包来搭建LTMJ(Tomcat、Mysql、jdk)

6.2  Linux是什么工具连接的 Linux版本是多少

Xshell、CRT、SSH用的ssh协议连接端口是22

传输文件用xftp工具占用的端口是21

Linux版本 centos6.5版本64位

6.3 日志具体是怎么看的

1、我们根据日志目录找到对应的日志文件用tail -200或者tail-500查看文件内容

也可以重定向导出来查看。

如果是系统出现了异常导致的错误我们跟去查找关键字比如说error或者 exception等

如果是逻辑错误会把操作对应时间的日志跟对应开发一起去定位bug

6.4 监控资源命令用到哪些

查着进程ps -ef过滤添加grep来着

杀掉进程 kill 强制杀掉 -9

监控资源top  vmstat

磁盘 df -h

内存 free -m

6.5  nmon工具是如何使用的

1、下载安装包()

2、安装(不需要安装-解压即可) nmon_linux_14i.tar.gz

1把文件传输到 linux服务器

2解压xftp

tar -zxvf nmon_linux 14i.tar.gz

3解压文件中找到你系统版本对应的运行文件

比如你们的操作系统 centos6.5  64位系统 ./nmon_x86_64_centos6文件

4运行对应的监控资源的文件

./nmon_x86_64_centos6

按字母c查看cpum查看内存n查看网络q退出

3、运行命令把数据保存到文档中

./nmon_x86_64_sles11 -s1 -c350 -f -m /home/

-s1每1秒采集一次数据

-c350采集350次即为采集十分钟的数据。

-f生成的数据文件名中包含文件创建的时间

-m生成的数据文件的存放目录

这样就会生成一个nmon文件并每十秒更新一次直到分钟后。

生成的文件名如_090824_1306nmon,””是这台主机的主机名 nmon -h查看更多帮助信息。

4、把生成nmon工具导出到 windows

5、用 office运行分析工具

6、生成一个xlsx文件

6.6 测试环境是如何搭建的(弱项)

前提条件租服务器或者买服务器-仅搭建一次

1、搭建环境 linux+ apache+php+ mysql linux+ tomcat+java+ mysql

2、每一次选代每一次测试( apache)html目录下

1替换代码包(覆盖代码包)-配置文件已经编辑好-压缩包

2运行sql文件

3重启服务

tomcat(java语言) ---代码在 webapps目录下

1替换代码包(覆盖代码包)·配置文件已经编辑好-压缩包war包(重启 tomcat服务自动化解压)

2运行SQL文件

3重启服务

6.7  linux常见命令有哪些说出10条左右

查看实时日志tall  、 head -20 查看前20行 、 tail -20 查看前20行

查看进程ps -ef 、查看当前系统端口netstat -an 、查看哪些端口被打开netstat -anp

重启数据库服务systemctl restart mysql service

重启网卡service network restart

解压包.zip包  unzip 包名    .tar  tar -xzf  包名

在线安装用 yun

6.8 如何查看端口是否被占用

Netstat -anolgrep 8080

6.9  data目录下找到所有txt的文件的命令

Find /data -name “*.txt”

6.10 怎么把lnux服务器的文件拷贝到另外一台 linux服务器

scp要拷贝的文件目标主机ip/目录/

scp startup.sh 192.168.1.157 /home/

root@192.168.1.157's password:

startup.sh

七、数据库

7.1 你们数据库怎么用

[原来我们数据库用的比较多的就是数据结果检查测试一些数据准备性能测试造大量数据。]

[测试执行到的结果我们需要通过sql语句 select来查找数据库对应的表看看数据库信息跟我们执行的结果是否一致比如生成申请借款后我们会去数据库里面去检查下,数据库中数据是否跟申请订单数据一致。]

[我们在测试执行时需要做一些测试数据准备我们就用 insert into输入数据或(者update set修改数据)我们需要到数据库查看有没有相关记录保存保存的数据跟我们输入或者修改的记录是否一致;比如原来我们一个初审功能里面有个分页功能测试分页功能需要100条数据我们就通过数据库操作添加100可以用 insert into。也可以用脚本实现或者存储过程]

[还有在做性能测试时模拟用户场景时需要用到大量的数据这时就需要我们到数据库中制造大量的数据出来。比如说测试充值需要大量用户数据充值表中大量数据比如10W条数据我们就用存储过程去造。]

7.2 存储过程是怎么编写的

delimiter∥

create procedure存储过程名(n int)

BEGIN

declare i int default 0;

while i <= n do

Insert into表名 values(值1值2...)

set i=i+1;

end while;

end∥

delimiter;

cal存储过程名(数据量(n));

7.3 常见的关系型数据库有哪些

mysql、SQL Server、Oracle、Sybase、DB2等

MySQL是开源免费的;

SQL Server是由微软公司开发的关系型数据库管理系统一般用于Web上存储数据;

Oracle数据的大量性数据的保存的持久性;

7.4 你们用的什么数据库连接工具

Navicat数据库版本 mysql 5.6端口默认是3306

7.5 左连接与右连接有什么区别

左连接以左边的表(employ)为主显示左边表列的全部数据如果右边表没有对应的数据

则为NULL

右连接以右边的表(student)为主显示右边表列的全部数据如果左边表没有对应的数据

则为NULL

7.6 索引有哪些如何建立索引素引的优缺点

MySQL索引的建立对手 MySQL的高效行是很重要的索引可以大大提高MySQL的检素速度

缺点虽然索引大大提高了查询速度同时却会降低更新表的速度如对表进行 INSERT、

UPDATE和 DELETE因为更新表时MySQL不仅要保存数据还要保存一下索引文件建立索引会占用磁盘空间的索引文件。

索引份分单列索引和组合索引单列索引即一个索引只包含单个列一个表可以有多个单列素引但这不是组合素引组合索引即一个索引包含多个列。

主键索引 PRIMARY KEY唯一索引 UNIQUE普通素引 INDEX

组合索引INDEX全文索引 FULLTEXT

7.7  having是干嘛的?

是一个条件查询一般是跟着分组以后比如

select title count(title) as t from titles group by title having t>=2;

7.8  where与 having的区别?

having是在分组对数据进行过滤

where是在分组对数据进行过滤

having后面可以使用聚合函数

where后面不可以使用聚合

7.9 查询数据库的前100行数据你sq怎么写

Select * from user limit 0,100

7.10 如何进行多表查询

Select * from A,b where a,id=b,id

7.11  in与 exist的区别

1.in()适合B表比A表数据的情况

2.exists()适合B表比A表数据的情况

7.12 数据库测试有没有发现什么问题

原来我们做的一个功能生成订单在数据库中没有添加创建时间导致后续根据时间点,去查询订单的时候找到对应的数据

八、抓包与网络协议

8.1 抓包工具怎么用

我原来的公司对于抓包这块在App的测试用得比较多。我们会使用fiddler抓取数据检查结果定位问题测试安全制造弱网环境;

如抓取数据通过查看请求数据请求行请求报头请求正文信息是否正确去检查结果,

如果是以4开头的话就有可能是前端问题一般我会到前端排查以5开头就有可能是后端

问题我就会到后端排查;如果是200的话就需要检查请求行请求报头请求正文是否正确

如果请求错误就是前端问题如果请求没有问题那就是后端问题看后端问题服务器运行日志

是否包含 exceptionerror或根据时间点去看日志。

测试安全抓取数据查看用户的感敏信息有没有进行加密显示还有就是把发送请求的数据篡改是否成功。

弱网环境诵过 fiddler工具选择 Customize Ruels...(Ctr+R)调出定义脚本编辑器找到

“if (m_SimulateModem)”设置上行下行网速然后把

Rules-> Performance-> Simulate Modem Speeds选中生效

常用抓包工具有浏览器中F12 fiddler Charles(青花瓷) wireshark

8.2  如何抓取https的包

1、设置 Tools=> Option=>勾选 Decrypt Https traffic=>勾选 lgnore server

certificate errors(unsafe)

2、打开https网页就可以成功抓取了

3、还可以 Fiddler添加过滤器(Filters)只抓取指定iP的数据

8.3 如何抓取手机的包

1、开启 Fiddler的远程连接

Fiddler主菜单Toos- Options-> Connections>勾选 Allow remote computers to

2、重启 Fiddler更新刚开启的远程配置

3、然后手机和电脑需要在同一个局域网抓取http手机设置代理就可以要抓取https包手机需要安装一个fiddler证书

1、fder工具生成一个证书发送手机上面安装

2、通过手机浏览器打开安装证书界面192.168.3.1978888

ip地址是用 fiddler工具的电脑的ip地址fiddler工具端口号的8888

3、点击下载证书会提示输入手机锁屏密码

4、给证书命名名字随意其他默认就ok

5、点击确定安装成功然后就可以抓取https的包了

8.4 网络协议了解多少?

原来我们用得比较多的协议是http和https以及tcp协议

http和https都是超文本协议浏览器发送数据请求基本用的都是他们不同的是https

在http的基础上增加了ssl加密协议,http的默认端口是80http的默认端口是443

https收费http免费。

tcp协议的话作用在传输层在发送请求前会有三次握手是面向连接的协议传输过程比较可靠

udp协议的话作用在传输层面向非连接协议传输过程相对tcp不可靠传输大量数据

8.5 请求方式有哪些?

常用get、post

不常用delete、put、head、option

8.6  get跟post请求的区别

1)get请求的参数有长度限制post没有

2)get请求参数在url上传输post的参数在请求正文中传输。post比get传输更安全

3)get只能接收ascall码参数而post没有限制

4)get请求的时候只请求一次而post请求两次第一发送请求头相关信息第二次

再发送请求正文(只有部分浏览器2次请求)

8.7  http跟https的区别

1.https协议需要到ca申请证书一般免费证书较少因而需要一定费用

2.http是超文本传输协议信息是明文传输https则是具有安全性的ssl加密传输协议

3.http和https使用的是完全不同的连接方式用的端口也不一样前者是80后者是443

4.http的连接很简单是无状态的;Https协议是由SSL + HTTP协议构建的可进行加密传输、身份认证的网络协议比http协议安全。

8.8  为什么要使用cookie和sessionhttp是无状态协议

第一次登录发送用户信息给到服务器服务器把用户信息保存在session中服务器响应数据给客户端响应数据中有包含session的先关用户信息

客户端接收到服务器session信息把session中相关的用户信息保存在cookie中

第二次登录客户端发送请求并携带cookie服务端可以直接验证cookie值如果用户已经登录过可以免登录

8.9  cookie跟 session的区别

在网站中http请求是无状态的也就是说即使第一次和服务器连接后并且登录成功后

第二次请求服务器依然不能知道当前请求是哪个用户cookie的出现就是为了解决这个问题

第一次登录后服务器返回一些数据(cookie)给浏览器然后浏览器保存在本地当该用户发送第二次请求的时候就会自动的把上次请求存储的 cookie数据自动的携带给服务器服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限不同的浏览器有不同的存储大小但一般不超过4KB因此使用 cookie只能存储一些小量的数据。

session和 cookie的作用有点类似都是为了存储用户相关的信息不同的是cookie是存储在本地浏览器而session存储在服务器.存储在服务器的数据会更加的安全不容易被窃取。但存储在服务器也有一定的弊端就是会占用服务器的资源但现在服务器已经发展至今一些session信息还是绰绰有余的

8.10  OSI七层网络模型 

(1)参考模型只是提供给生产商或者软件开发商参考的模型

(2)开发系统互联

(3)有七层

8.11  TCP模型

有四层:

应用层 (telnet.stp.htp)传输层( CP UDP)、网络层中数据链路层

8.12   TCP和UDP的区别?

(1)TCP面向连接、而UDP面向非连接

(2)TCP相对UDP更可靠

(3)TCP应用场景用于传输少量数据而UDP用于传输大量数据

(4)TCP传输的数据相对UDP慢

8.13  tcp的三次握手是怎么实现的?

(1)客户端给服务器发送报文syn=1和序列号Seq=x

(2)服务器接收到客户端的请求服务器响应syn=1ack=x+1,seq=y

(3)客户端接收到服务器的响应返回给服务器ack=y+1seq=z

8.14  http协议包含哪些内容

(1)请求信息

1请求行请求方式、请求地址http版本1.1

2请求头

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头

Cache- Controlno- cache 缓存

Connectionclose/keep-aive 是否关闭或者保持连接

Accept-Charsetios-859-1 字符集

Accept-Encodinggzip.deflate 编码格式

Accept-Languagezh-cn 语言

Authorization服务器授权验证

Host主机

User-Agent

Location重定向

Server服务器版本信息

Content-Encoding实体报头的编码格式

请求正文

data

(2)响应信息

1状态行http版本、状态码、状态信息

2响应头跟请求头一样

3响应正文

8.15  http状态码有哪些

1xx需要继续发送请求

2xx成功

3xx需要重定向

4xx客户端请求数据有误

5xx服务器响应错误

6xx服务器响应错误

常见状态码400、404、200、500、302、501、504

101服务器根据客户端的请求切换协议只能切换到更高级的协议

例如切换到HTTP的新版本协议

102(代表处理将被继续执行)由 WebDAV(RFC 2518)扩展的状态码代表处理将被继续执行

2开头这一类型的状态码代表请求已成功被服务器接收、理解、并接受。

200(成功)服务器已成功处理了请求通常这表示服务器提供了请求的网页

201(已创建)请求成功并且服务器创建了新的资源

202(已接受)服务器已接受请求但尚未处理

203(非授权信息)服务器已成功处理了请求但返回的信息可能来自另一来源

204(无内容)服务器成功处理了请求但没有返回任何内容

205(重置内容)服务器成功处理了请求但没有返回任何内容

206(部分内容)服务器成功处理了部分GET请求

207(代表之后的消息体将是一个XML消息)并且可能依照之前子请求数量的不同包含

系列独立的响应代码

3开头(请求被重定向)表示要完成请求需要进一步操作。通常这些状态代码用来重定向。

300(多种选择)针对请求服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作或提供操作列表供请求者选择。

301(永久移动)请求的网页已永久移动到新位置.服务器返回此响应(对GET或HEAD请求的响应)时会自动将请求者转到新位置

302(临时移动)服务器目前从不同位置的网页响应请求

但请求者应继续使用原有位置来进行以后的请求

303(查看其他位置)请求者应当对不同的位置使用单独的GET请求来检索响应时服务器返回此代码。

304(未修改)自从上次请求后请求的网页未修改过。服务器返回此响应时不会返回网页内容

305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应

还表示请求者应使用代理。

307(临时重定向)服务器目前从不同位置的网页响应请求但请求者应继续使用原有位置来进行以后的请求

4开头(请求错误)这些状态代码表示请求可能出错妨碍了服务器的处理。

400(错误请求)服务器不理解请求的语法

401(未授权)请求要求身份验证对于需要登录的网页服务器可能返回此响应

403(禁止)服务器拒绝请求

404(未找到)服务器找不到请求的网页

405(方法禁用)禁用请求中指定的方法

406(不接受)无法使用请求的内容特性响应请求的网页

407(需要代理授权)此状态代码与401(未授权)类似但指定请求者应当授权使用代理

408(请求超时)服务器等候请求时发生超时

409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息

410(已删除)如果请求的资源已永久删除服务器就会返回此响应。

411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求

412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件

413(请求实体过大)服务器无法处理请求因为请求实体过大超出服务器的处理能力

414(请求的URL过长)请求的URL(通常为网址)过长服务器无法处理

415(不支持的媒体类型)请求的格式不受请求页面的支持

416(请求范围不符合要求)如果页面无法提供请求的范围则服务器会返回此状态代码

417(未满足期望值)服务器未满足期望请求标头字段的要求

5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误

这些错误可能是服务器本身的错误而不是请求出错

500(服务器内部错误)服务器遇到错误无法完成请求

501(尚未实施)服务器不具备完成请求的功能例如服务器无法识别请求方法时可能会返回此代码。

502(错误网关)服务器作为网关或代理从上游服务器收到无效响应(比如nginx里

设置了反向代理自己代理给自己形成了死循环造成大量的访问日志每秒上万)

503(服务不可用)服务器目前无法使用(由于超载或停机维护)通常这只是暂时状态。

504(网关超时)服务器作为网关或代理但是没有及时从上游服务器收到请求

505(HTTP版本不受支持)服务器不支持请求中所用的HTTP协议版本

8.16  post申请方式用get会报什么错误。

404 Not Found

请求失败请求所希望得到的资源未被在服务器上发现没有信息能够告诉用户这个状况到底是暂时的还是永久的假如服务器知道情况的话应当使用410状态码来告知旧资源因为某些内部的配置机制问题已经永久的不可用而且没有任何可以跳转的地址404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下出现这个错误的最有可能的原因是服务器端没有这个页面。

8.17  http协议提交请求头内容

Accept-Charset浏览器能够显示的字符集

Accept- Encoding浏览器能够处理的压缩编码

Accept-Language浏览器当前设置的语言

Connection浏览器与服务器之间连接的类型

Cookie当前页面设置的任何 Cookie

Host发出请求的页面所在的域

Referer发出请求的页面的URL

User-Agent浏览器的用户代理字符串

Content-Type请求数据的格式或者是类型

九、接口测试

9.1 接口测试怎么测

jmeter版本

首先开发会给我们一个接口文档我们根据开发给的接口文档进行测试点的分析主要是考虑正常场景与异常场景正常场景条件的组合参数的格式校验等价边界值;异常场景多一个参数少个必填参数参数为空;接着编写测试用例用的 Jmeter工具去运行创建线程组建立http请求输入测试用例请求参数建立察看结果树运行看返回的结果是否跟接口文档里面要求的返回结果一致其他用例值需要修改里面的参数请求地址这些信息。

举例说明(不要登录跟注册)

比如说原来我们做一个申请借款的接口对接口进行测试分析考虑正常场景与异常场景正常场景考虑不同参数组合比如说不同借款方式还款期限还款曰期借款的利率等参数组合;也要测试每个参数格式校验异常场景多一个参数少一个必填参数比如没有借款的利率参数为空的比如借款标题为空编写测试用例

在 jmeter中执行填写参数更地址就ok发送请求

python + request

原来我们接口主要是用的 python + requests去运行的

首先开发会给我们一个接口文档拿到接口文档后我们就进行测试点的分析

考虑正确场景条件的组合

异常场景多一个参数少一个参数参数为空的情况

比如原来我们做一个生成订单的接口考虑正常场景异常场景

正常场景就是不同的订单类型订单金额能不能申请订单每个参数的格式类型的校验

异常场景多一个参数少一个必填参数的时候还有参数为空的情况

原来我们是用 python + request去做的接口

首先导入 request包

建立一个 headers保存请求头的信息因为订单请求方式是post类型数据格式是form表单格式我们把数据保存到data的字典里面

这个时候我们还需求登录的 cookie值跟登录后产生的 token值

我们会去通过动态关联去获取登录的 token跟 cookies

cookies值的话我们是直接调用登录返回的 cookies、token值的时候我能是通过导入re模块通过正则表达式去提取

当参数 headers、cookies输入完成以后我们就发送请求打印返回结果检返回结果是否跟我们测试用例一致

当运行其他测试用例时我们去修改data里面的参数就行在发送请求

有的请求时htps协议的时候我们发送请求的时候还会very= false去忽略掉证书验

证对应多个接口调用 cookies我们会用到 session去保存接口发现比较多的问题就是格式校验这块

比如说我们提交订单订单数据没有显示订单格式也没有显示输入字母汉字都可以

订单类型为空也会生成订单成功

我觉得接口可以发现接口更多的bug还可以提早进行测试提高测试的质量

9.2  两个接口有关联 jmeter具体怎么做

另外两种问法上个接口的返回值是下个接口的请求参数这种如何处理?动态关联有没有了解过?

这个涉及到动态关联首先要搞清楚后一个接口需要用到上一个接口的什么数据例外要看数据是在哪里取的是在head还是在body里然后如果要取的数据是json格式我会在发请求用json提取器去取这个数据如果是其他格式的就用边界提取器或正则表达式去取数据

就拿我当时做的那个下单接口来说吧因为下单接口需要先登录需要用到登录接口的

cookies来做鉴权首先就是把登录接口调试通过然后在登录接口的http请求中添加一

个边界值提取器或者也可以用正则表示式提取器去提取登录接口的响应头中的 cookies值

然后在下单接口中需要添加一个http cookies管理器在http cookies管理器中引用登录

接口提取出来的 cookies这样就可以了

如果是不同的线程组的话那在登录接口中还得添加一个 Beanshell取样器在

Beanshell取样器中利用函数助手中的 SetProperty()函数把提取出来的 cookies设置为全局变量然后在下单接口的http cookies管理器中利用函数助手中的Property()函数引用登录接口中设置的全局变量这样就可以了。

9.3 接口测试主要目的是什么?

例外两种问法接口测试的价值意义?为什么要做接口测试?

主要就是验证后台服务端的业务逻有没有问题提高测试的效率

①越底层发现bug它的修复成本是越低的

②前端页面修改频繁情况下接口测试不受页面元素改变而影响

③检查系统的安全性前端传参不可信比如京东购物前端价格不可能传入-1元但是

通过接口可以传入-1元

④如今的系统复杂度不断上升传统的测试方法成本急剧增加且测试效率大幅下降接口自动化测试可以提高测试效率

⑤接口测试相对容易实现自动化持续集成且相对U自动化也比较稳定可以减少人工回归测试人力成本与时间缩短测试周期

9.4  接口测试的流程

1首先分析开发给到的接口文档

2接口文档分析完成编写测试用例

3然后借助接口测试工具去测试执行测试用例

4发现bug提交bug并跟进bug修复

9.5  接口测试和平常的Ul测试有什么区别?

其实这两者测试的侧重点是不同的接口因为没有界面更多考虑后台服务器对请求的处理逻辑问题业务交互检测的是后台“容错机制”是否完整

而ui更多会去关注页面展示数据转换界面排序这些功能当然也会后台数据处理的问题ui测试其实已经包含了接口测试。系统功能的用例更全面不仅有界面的也有业务功能用例还有其他用户场景的用例功能入口用例流程用例而接口测试主要根据各种入参场景来设置用例。

9.6  给你一个新的接口你怎么去设计用例?

首先要对于每个要测的接口都要先搞清楚这个接口的功能它的作用是什么熟悉这个业务功能需要用到什么协议请求方式是什么接口有哪些参数。对于每个参数的作用都要搞清楚像数的类型是否有约束限制是否为必填的长度其他的限制等等如果两个参数之间有关联我们还要考虑参数的组合场景对于参数不理解的一般都会跟开发沟通下然后考虑返回数据的类型返回数据中的返回码和返回信息是什么通过以上几个点去提炼测试点设计用例。

参数约束——长度、必选项、格式、数据类型

业务场最——正确的业务场景;错误的业务场景异常场景服务器空间不足

组合场景——相互依赖手机和验证码、用户名和验证码

相互排斥二选一当然还有边界值等价类等等

Jmeter测试流程步骤如下

创建 jmeter线程组一添加HPPT请求-输入协议-域-端口-路径-编码-请求方式-请求参数-启动

Jmeter测试流程

先需求再根据需求写测试点转换成测试用例根据测试用例编写测试脚本执行测试脚本

提交BUG跟踪BUG

9.7  接口文档主要包含哪些内容?

接口文档一般两种形式的要不就是word版本的要不就是htm的形式具体内容

1.URL(接口地址)

2.接口功能

3.请求方式post

4.请求参数以及接口中每个参数的详细说明类型是否为必填约束条件等等

5.响应数据及格式返回码返回码解释等等

9.8  你们什么时候测试接口

一般有需求就会做后台的接口开发好就可以开始测。例外如果增加了新需求也要做接口测试还有就是开发对后台的接口做了修改交互逻辑发生变化我们也要重新对接口进行测试。

9.9  你怎么去检查分析

我们主要是根据入参情况去看接口的返回值对于返回值我主要关注的几个点1.状态码

2.提示信息3.返回数据的具体内容。根据接口文档的说明去检查这个3个点是否满足接口需求文档4.有些如果要检查数据库的就连接数据库获取数据与返回的数据做对比。

如果不满足就是有问题如果满足则通过如果有Bug我们会先大概分析下是什么原因

并进行复测如果还是有问题提交Bug给开发让开发修复之后再回归测试

9.10  什么是api接口测试

接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点测试的重点

是要检查数据的交换传递和控制管理过程以及系统间的相互逻辑依赖关系等

9.11  什么情况下开展接口测试?

1、项目处于开发阶段

2、有接口需求文档开发已完成联调功能测试展开之前

3、专项测试参数约束测试业务场景测试测试接口请求响应时间性能

4、版本上线前进行整体回归测试查看接口是否有异常(如404等)

9.12  依赖于第三方的接口如何测试

1需要第三方接口的接口文档

2发送请求到第三方接口检查第三方接口返回的数据是否正确

3不正确的时候要跟第三方接口联调看是请求问题还是第三方接口返回数据有误

这个我们公司的第三方接口我们都是打通的比如电商我们通过调用微信接口等等都是打通的比如要测试下单第三支付我们自己开店收款设置我们自己的账号然后通过商品设计1分钱去测试的。

如果不打通的话基本也只能抓包主要保证我们发送出去的数据符合需求文档就行然后真正的上线之前我们会在预生产环境做一个联调测试把各自系统连在一起做一个联调测试没有问题了

我们就可以上线基本就这么做的

联调测试怎么做的

其实联调测试就是数据拉通测试两个子系统连在一起形成一个完整的系统然后从上游下数据下游接到数据看传过来的数据是否符合下游的系统要求然后下游做了操作把数据返回给上游通知上游说数据返回了上游看返回的数据是否符合要求如果没有问题就这个数据就拉通成功这个都是按照用例来执行上游和下游一起出一份用例两边都评审通过然后按照测试用例执行每条用例测试通过那么联调测就完成了。

9.13  你们接口怎么鉴权的?

(1)通过用户和密码auth鉴权

(2)通过 cookie和 session

(3)通过 token

(4)通过sign签名

现在app一般是通过 token鉴权有些是通过把 token放在请求头里面有些是通过 singn签名这个字段放在body里面去鉴权的一般的web是通过 session去鉴权的

9.14  接口传输格式有哪些

常见的媒体格式类型如下

text/htmlHTML格式

text/plain纯文本格式

text/xmXML格式

Image/gifgif图片格式

mage/jpegjpg图片格式

Image/ngpng图片格式

以 application开头的媒体格式类型

application/xhtm + xml XHTML格式

application/mlXML数据格式

application/atom + xml Atom XML聚合格式

application/jsonJsoN数据格式

application/pdfpdf格式

application/mswordWord文档格式

application/octet-stream二进制流数据(如常见的文件下载)

application/x-www-form-urlencodedencoded<form encType=””>中默认的 encType,form

表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

另外一种常见的媒体格式是上传文件之时使用的

multipart/form-data需要在表单中进行文件上传时就需要使用该格式

9.15   cookie、session、token的区别

它们都是用来做鉴权的区别的话大概是这样的

1、现在 cookie、session一般是配合使用的用户第一次登陆时服务器会创建一个 session

生成一个 sessionIDsessionID保存在 cookie中然后返回到客户端保存在浏览器中。

客户端每次发请求都会把这个值带到服务器做一个鉴权和会话的跟踪或者时效的验证

2、token和 cookie、session差不多通过算法每次验陆会产生一串很长的随机字符串一般是在放在返回的body里面或者返回的头里面他们都是服务器产生带过来是要做验证和时效的验证的。一般在app中使用token比较多一点Web端使用cookie、session的鉴权方式会多一点。

9.16  接口测试的工具有哪些?

Fiddler抓包工具也可以做接口测试

Postman接口测试工具支持接口自动化测试

wireshark支持电脑上各种协议的抓包工具主要常见有http和tcp抓包

Soapui功能强大的接口测试工具性能测试接口自动化测试

java+httpclient.jar java代码实现接口自动化测试一般需要借助单元测试框架junit和

TestNG接口自动化测试框架设计java+httpclient+TestNG

Python + requests  python代码实现接口与接口自动化测试测试框架 unittestpytest

接口测试框架设计 python+ requests+ unittest+ htmlTestRunner或者python +requests+ pytest

Loadrunner接口自动化测试接口性能测试(主要)

jmeter接口测试接口自动化测试接口性能测试(主要)

Swagger编写在线接口文档在线接口测试

9.17  jmeter环境搭建

(1)安装jdk(java运行环境)

(2)安装 jmeter

9.18  接口工具 jmeter用到哪些组件具体作用

取样器:

http请求 向服务器发htp请求

JDBC Requst 向数据库发请求

Debug Sampler 调试看执行过程

Bean Shel取样器 把某个变量设置定位全局变量

后置处理器:

正则表达式提取器

#提取接口的响应内容或请求内容中的数据具体要提什么数据根据需求来比如我们充值接口依赖登录接口需要用到登录

接口的 cookie需要提取 cookie

边界值提取器

JSON提取器

Bean Shell Post Precessor #在请求结束之后需要做的某些事情

比如转码

断言   #检验结果验证本接口是否有问题

响应断言

Json断言

配置元件:

CSV data Set Config #读取CSV文件txt文件

JDBC Connection Confiquration #连接数据库

Http Cookie管理器

HTTP信息头管理器

用户定义的变量

计数器

定时器:

同步定时器主要用来设置集合点

监听器:

查看结果数

9.19  jmeter原理是什么

jmeter做接口测试其实就是模拟前端向后台发请求它是通过线程来模拟真实用户对web服务器的访问压力。基本原理是建立一个线程池多线程运行取样器产生大量负载在运行过程中通过断言来验证结果的正确性可以通过监听来记录测试结果

9.20  上传文件的接口用 JMeter怎么做

另外一种问法有没有做过文件上传的接口具体怎么做?

要测试上传文件的接口在JMeter的http请求这个组件中传递请求参数的栏目中专门提供了一个用来文件上传的在这里面需要填写几个内容一个就是文件的路径还有一个就会参数名称还有就是MlME类型也就是指定要上传的文件的类型这样就可以了。

9.21  对于POST请求要求传递Json格式数据 JMeter怎么做

对于这个其实在 JMeter的http请求这个组件中的参数配置栏目中第二个栏目有个消息体数据我们把需要上传的参数组装成json格式然后编写到 body data里面然后需要在http信息头管理其中需要将数据格式设置为json格式这个就是设置Content-Type

为 application/jsoncharset=utf-8这样就可以了。

9.22  对于需要加密的请求参数 JMeter如何处理?

这里首先让开发给我们写一个加密解密的jar JMeter直接调用这个jar进行加密解密处理

1、首先需要将开发给到的加解密的jar包文件放到 jmeter的lib/ext目录下

2、在测试计划中中有一个 add Directory or jar to classpath在这里指定jar的路径添加需要的jar包

3、在jmeter的前置处理器中添加 Beanshell PreProcessor然后在其中添加java代码

具体就是

a.首先导入需要用到的加密包中的加密算法类

b.如果要对json格式的请求参数加密组装json格式的数据

c.调用加密类中的函数对json格式的参数数据进行加密如果只对具体某个参数加密

那就针对哪个参数加密即可。

d.然后将加密之后的数据保存到 jmeter的一个变量中就可以了

4、最后直接在消息体中引用这个变量就可以了

具体代码如下

Jmeter调用

mport com changfu EncryptAnd Decryptinterface;  #导入加密类

String json_str =

"{\"Username\":\"amycheno2\"\"password\"\"F59BD65F7EDAFB087A81D4DC

AO6c4910\",\"deviceNo\",\"35584806988942\")"; #请求的参数

调用加密类中的函数对请求参数实现加密处理。

String enpost= EncryptAndDecryptinterface.getEncryptPost(json_str);   #将请求参数加密

vars put("enpost"enpost); #将加密处理后的数据存到 jmeter变量中

9.23  如果接口返回的数据做了加密处理的如何进行断言?

这里可以采用 Beanshell断言

1、首先得让开发写一个解密的jar包然后把jar包放入到 JMeter的 JMeter的lib/ext目录下

2、然后在测试计划中有一个 add Directory or jar to classpath在这里指定jar的路径添加需要的jar包

3、在 JMeter中添加 Beanshell断言里面实现java代码具体过程就是

a.导入解密的jar包中的解密算法类

b.导入用于解释json格式数据的类(假设返回的数据是json格式的)

c.对数据进行处理器,首先获取接口的返回数据然后调用解密算法类中的函数进行解密解密出来后就是一个json格式数据

d.然后调用json库中的函数对json数据进行解释提取其中需要断言的字段判断与预期结果是否一致就可以了

具体代码

1、在http请求-→>添加-→>断言-→>bean shell断言

//导入jar包的 EncryptAndDecryptinterface类

import com changfu EncryptAnd DecryptInterface;

//导入jar包用于解释json格式数据的类

import org.json.JSONObject;

//对数据进行处理器

String json_res= prev.getResponse DataAsString();/取上个响应信息

String resb= EncryptAndDecryptlnterface.getDecrypt(json_res);∥调用解密工具解密

vars.put("resb"resb);

log.info("解密后的响应信息json="+resb);

JSONObject resbonseJson= new JSONObject(resb); //解析 json

String status_str= resbonseJson.get("status") toString();//截取status字段值

vars.put("status_str",status_str);

log.info("执行状态="+ status_str);

String result="0";

vars.put("result_str",result);

if(!status_str.equals(result))

{  //响应信息的状态值 status_str不等于0,则断言其他与实际值不一致

Failure=true;

FailureMessage="statuscode与实际值不一致;

实际值为"+status_str+"响应信息"+resb;}

9.24 下一个接口用到上一个接口的数据但返回的数据加密了如何提取?

比如一次登录后做多个接口的操作

然后登录后的uid需要关联传递给其他接口发送请求的时候使用

1、首先得让开发写一个加解密的jar包然后把jar包放入到 jmeter的 jmeter的lib/ext目录下

2、然后在测试计划中中有一个 add Directory or jar to classpath在这里指定jar的路径

添加需要的jar包

3、然后在第一个接口中添加一个 bean shell postprocessor(后置处理器)在后置处理器

中编写java代码具体就是:

a.导入解密的jar包中的解密算法类

b.导入用于解释json格式数据的类(假设返回的数据是json格式的)

c.对数据进行处理器

首先获取接口的返回数据然后调用解密算法类中的函数进行解密解密出来后就是一个json格式数据

d.然后调用json库中的函数对json数据进行解释提取截取响应信息中uid的值

e.将 uid_str数据存到变量中这里用 props.put其他线程组可调用请该变量

具体代码:

mport com.changfu.EncryptAndDecryptInterface;

import org.json.JSONArray,

import org.json.JSONObject;

string json_res = prev.getResponseDataAsString();//获取登录请求的响应信息

String resb = EncryptAndDecryptInterface.getDecrypt(json_res);//调用解密工具解密对响应信息解密

vars.put("resb",resb);

log.info("解密后的响应信息resb="+resb);

JSONObject data_obj= new JSONObject(resb); ∥解析json响应信息

String uid_str = data_obj.get("result").get("id").toString()//截取响应信息中uid的值

props.put("uid str".uid_str); ∥将uid_str数据存到变量中这里用props.put其他线

程组可调用请该变量

log.info("加密前的uid="+uid_str);

4、在下一个接口中添加一个用户参数引用上面保存的 uid_str变量

5、然后在下一个接口中添加一个 BeanShell PreProcessor(前置处理器)在其中编写

java代码

具体就是

a.导入解密的jar包中的加密算法类

b.获取登录传递的 uid_str变量

c.调用加密算法中的加密函数对登录返回的uid进行加密处理

d.然后把加密后的数据保存到一个jmeter变量中

具体代码

import com changfu.EncryptAndDecryptInte;

String uid_str= props.get("uid_str"); //获取登录传递的uid_str变量

String enuid=EncryptAndDecryptlnterface.getEncryptUID(uid_str)//加密登录返回的uid

Vars.put("enuid",enuid);

log.info("加密登录后返回的uid"+enid);

6、最后在下一个接口的参数中引用这个变量就可以了

9.25  jmeter如何去做get请求接口

1、把请求参数填入URL或者把参数填入到 parameter中

9.26  meter如何做json数据格式的接口

1、把参数编写到 body data里面用json格式编写

2、在 headers头里面定义数据格式为json格式

Content-Type application/json;charset=utf-8

9.27  jmetercookies如何添加

添加http    cookies管理器

9.28  jmeter中如何添加 header信息

添加http header管理器

9.29  jmeterwebserversoap协议xml格式数据如何测试

1数据格式编写在 body data里面用xml数据格式保存

2http header里面数据格式为xml

Content-Type application/soap+xml;charset=utf-8

9.30  jmeter 中如何去连接数据库

1测试计划中导入mysq-connecti的jar包

2配置元件中添加 jdbc-connection连接配置连接参数

3取样器中添加 jdbc-request

9.31  jmeterhttps证书如何处理

jmeter-option中-ssl证书管理器中导入证书

9.32  http如何进行代理录制接口

首先在 jmeter中有一个非测试计划添加一个http代理服务器代理服务器的端口设置为8888当然也可以选择一个没有使用过的端口就可以了然后启动http代理服务器然后对于要录制web端的接口需要在浏览器设置代理就可以录制默认ip为 localhost端口8888

对于要录制手机端的接口

1.保证手机与电脑在同一个网络

2.设置手机端代理

默认ip为pc机器的ip地址端口8888

9.33  jmeter如何做post请求格式接口

参数填入到 parameter中

9.34  如何搭建 python+ requests接口测试环境

1安装 pycharm

2安装 python运行环境

3安全 requests包

4pycharm中导入 requests包

9.35  requests如果做get请求数据保存格式哪二种

1保存在ur里面键值对方式发送请求

2保存在参数 params里面

9.36  requests如何做post请求接口

定义URL定义data数据参数用字典格式保存

#表单格式数据请求

import requests

#方维的注册接口

url = "http://47.95.118.117/fanwe/indexphp?ctl=user&act=doregister"

data={‘user name’:’cxy0o3’,

‘mobile’’18312345676’,

‘user_pwd’’cxy1234561’,

‘user_pwd confirm’'cxy123456',

‘agreement’’1’,

‘commit’’注册’}

r=requests.post(url=urldata= data)

print(r.text)

9.37  requests上传文件接口如何测试

url="http//106.12.126.197/fanwe/file.php"

data={

"upload_type""0",

"localUrl""E \\fanwe.png",

"m""File",

"a""do_upload}

#文件上传功能files参数编写

files={"imgFile"(‘fanwe.png’, open(‘E\\fanwe.png’,’rb’)image/png)}

#fes={‘文件参数的名称’(文件名 open(E\\fanwe.png读的属性)文件的类型}

r=erequests.post(url=url,data=data,cookies=login(),files=files)

print (r.text,type(r.text))

9.38 有没有做过https接口具体怎么做

https请求时在http请求中多了ssl证书对于https请求的接口

Requests可以为HTTPS请求验证SSL证书就像web浏览器一样。要想检查某个主机的

SSL证书你可以使用veiy参数

处理办法:

1、设置 verify= Falserequests请求忽略证书的校验会有警告提示

r=requests.get(https//www.baidu.com’,verify=false)

print (r.text)

2、在 verify中设置证书的路径

requests.get(https//github.com’,verify=’/path/to/证书名字’)

3、 verify默认值为true也可以指定一个本地证书用作客户端证书可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组

requests.get(‘https//kennethreitz.com'cert=(‘/path/server.crt'/path/key))

9.39  requests中如何测试json数据的接口

定义参数json

#json格式数据请求

import requests

Requests可以为 Https请求验证SSL证书就像web浏览器一样。要想检查某个主机的ssl证书你可以使用verify参数

处理办法:

1设置 verify= Falserequests请求忽略证书的校验会有警告提示

r=requests.get("https/www.baidu.com"verify=False

print(r.text)

2在verify中设置证书的路径

Requests.get(https// github.com; verify=/atho/证书名字)

3very默认值为true也可以指定一个本地证书用作客户端证书可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组

requests.get(‘https//kennethreitz.com’,cert=(‘/path/server.crt',’/path/key’))

注册接口

import requests

Url="http//localhost8000/register"

json={

"username":"Cxy002"

"Password":"12345"

}

r=requests.post(url=url,json=json)

print (r.text)

9.40  requests中如何添加 cookies

定义参数为 cookies用字典保存

在请求过程中添加 cookies值

requests.post(url=urldata=dataheaders=headerscookies=cookies)

9.41  requests中如何添加 headers信息

定义参数为 headers用字典保存

在请求过程中添加 headers值

requests.post(urlurldata= dataheaders=headerscookies=cookies)

9.42  requests中https证书如何处理

https请求时在http请求中多了ssl证书对于https请求的接口

9.43  requests中sign签名与 token如何处理

Token值

token的意思是“令牌”是服务端生成的一串字符串作为客户端进行请求的一个标识。

当用户第一次登录后服务器生成一个 token并将此 token返回给客户端以后客户端只需带上这个 token前来请求数据即可无需再次带上用户名和密码。

简单 token的组成;uid(用户唯一的身份标识、time当前时间的时间戳、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止 token泄露)

import requests

import re

url='http//loclhost8000/login'

Data={

'Username':'cxy002'

'Password':'123456'

}

r=requests.post(url=url,data= data)

print (r.text,type(r.text))

rk=re.findall("token":"(.*?)","r.text")

print(rk)

url="http://localhost:8000/recharge"

data=(

money10000

Serial_number 22222

token rk

p=requests. post(url=url data= data)

print(p.text)

sign签名也是一种安全校验

sign的处理一个案例

post请求htps://{url地址}/ index.php/Platen/Card/active

参数:

Hotel_store_id=0123456&

Pack_id=4&

phone=175861263288&

sign=5dc6331b07fc097d013410353740f8e8168c499a

签名算法:

1.将发送数据按照参数名ASCLL码从小到大排序(字典序)使用URL键值对的格式(如

key= value1&key2=vaue2...)得到str注意sign不参与签名。

2.在str后面拼接"&key= YpLdvl2L3Rc5yYX"其中 YpLdvl2L3Rc5yYX为加密密钥

3.对字符串str进行sha1运算得到签名sign

def test_xielv():

url="https://{url地址}/index.php/Platen/Card/active"

Json_v={

"Hotel_store_id""0123456"

"pack_id""4"

"phone""18319011906"

}

#字典添加新的key

Json_v["sign"]=sign_01(json_v)

# print (json_v)打印发送请求的json值

r=requests.post(url=url,json=json_v)

print (r.content.decode("unicode_escape"))

assert'{"code1002msg"ID错误或找不到

data" "")==rcontent. decodeCunicode escape")

9.44  request框架有哪些方法?

像用来发送请求的一般都是调用以下方法

reponse=requests.get()

reponse=requests.post()

获取响应数据一般都是调用以下方法

reponse.status_code

reponse.reason

reponse.text

reponse.json()

reponse.headers

reponse.cookies

十、接口自动化

10.1 接口自动化怎么测试

( Python+ requests+pytest版本)

原来我们接口自动化是用 python+ request+ pytest执行

接口自动化其实主要就是接口测试的基础上填加了断言参数化动态关联

做接口自动化之前我们也会划分模块报告公共的模块测试数据测试报告主要的目的是为了方便后期的维护

测试数据一般原来我们就是用的接口测试用例公共的模块主要是里面的一些公共的作比如说用例 excel数据的读取

数据库的连接还有我们封装的每个接口请求

断言的主要是获取访问接口的值判断用的是 assert参数化主要用的比较多是excel表格就是测试用例数据

还有需要调用登录后的 cookies跟 token的时候我们就会用到关联

比如说原来我们写的一个申请借款的接口吧

首先我们会编写测试用例把每个用例数据保存到excel中

再建立一个申请借款的模块

这个时候我们去调用申请借款的功能模块里面的参数我们是保存在 excel表格中

我们建立发送请求通过参数化去读写excel表格中的数据获取到返回的数据通过assert去对应返回的数据跟用例中异常的数据。

这个时候也会做数据库断言去连接数据库去查询数据库中时候存在查询如果是返回结果

是json数据格式我们还会转化下格式后再去断言

这个申请借款模块也会用到登录的 cookie值 token我们先建立一个登录的请求提取

返回的 cookie值 token

excel表格多个用例我们就用到循环去运行读取excel中用例总的条数去循环运行

这里要注意的是:

就是excel表格数据时是str我们要eval转化成字典格式

把每个接口封装好以后

我们就会调用 pytest框架去运行所有test文件的测试用例

如果只是执行部分用例也可以通过 pytest框架来指定

然后用 yagmail,在 pytest框架运行完test文件之后发送邮件到指定邮箱。

接口自动化我个人觉得性价比是比较高的。

实现起来简单、维护成本低容易提高覆盖率等特点

接口是稳定的最多是增加一个字段或者新增接口之类的

低成本有了相对的稳定性不需要大量重新编写脚本只需要基础维护包括用例的扩充就可以了

执行的快反馈的速度快

jmeter版本)

原来我们也做了很多接口自动化接口自动化这块其实原来我们也是用 jmeter请求去做的这个时候我们也用到一些工具http代理主要方便编写接口请求通过录制就行了我觉得接口自动化只是在接囗测试中多加了一些参数化、关联、断言参数主要是函数参数化自定义变量参数化文件参数化主要文件类型csv跟txt不过原来csv文件用的比较多还有一些数据库的参数化断言主要响应代码断言响应文档断言。

比方说原来我们一个登录接口主要是正常场异常场票这块正常场景主要是用户跟密码正确采用数据参数化把用户名用随机函数进行参数化随机长度大一些用户名不存在的情况原来是通过文件参数化设置参数值密码不正确也是通过文件参数化接口请求中host地址目录地址我们都进行数据化自定义变量去操作结果检中我们主要是用断言来检查每个请求

设置了2个断言一个响应代码断言一般是200响应文本断言登录成功返回码为1

状态提示成功检意是否成功对应异常场景也是都需要设置断言去检查结果原来做的申请借款接口需要登录接口http cookie我需要建立2个接口一个登录接口一个申请借款接口通过正则表达式去提取登录接口返回 cookie在申请借款请求接口设置http cookie时值为登录接口返回cookie还有也要考虑原来我们项目还有 token值提取登录返回 token提取当成申请借款的请求参数当测试场景的脚本编写完成执行接口测试用例我们在察看结果树中检直主要是看颜色这块红色检查哪些地方失败绿色表示通过

编写完成后我们会把脚本添加到 jenkins里面持续集成运行

原来我们持续集成是半个月运行一次当然我们也可以手动构建

1我们一般把写完的 jmeter的脚本

2通过svn把写好的脚本检入到svn服务器

3在 jenkins任务下选择定时构建或者手动构建检查svn上传最新的脚本去运行

一般我们项目在修改新的功能模块上线转测之前都会自动去运行脚本

4运行完成我们再 jenkins下查看脚本运行结果

10.2 为什么做接口自动化?

接口自动化我个人觉得性价比是比较高的

实现起来简单维护成本低容易提高覆盖率等特点

接口是稳定的最多是增加一个字段或者新增接口之类的

低成本有了相对的稳定性不需要大量重新编写脚本只需要基础维护包括用例的扩充就

可以了执行的快反馈的速度快

10.3 假如公司想要做自动化让你去做你会从那些方面考虑入手?

1.测试范围 2.时间进度 3.人员安排 4.框架确定

5.环境的搭建 6.准备好测试数据 数据驱动 7.工程的管理后期的维护

10.4 你写了多少接口自动化用例

自动化用例也没有具体数过当时我负责的所有模块的接口的自动用例都是我这边独立完成的

有模块的用例会多一点有些会少一点这具体看接口的参数有多少参数多限制条件多的

一般用例会比较多一点我负责的模块大概有100多条用例是有的!

10.5 比如说你接口的请求参数需要加密处理的你们用的是什么加密方式你加密怎么处理的?

这个是有做过的就拿当我们那个项目的登录接口来讲吧那个登录的密码是需要进行加密

加密之后再进行传输。这里需要问开发要加密算法我们会把它封装成一个函数调用这个加密函数对密码加密之后再进行传递。我们公司的加密算法大部分用的都是MD5的加密算法(base64)

10.6 你查询出来返回结果是密文密文你怎么测试

这里首先要搞清楚用的是什么加密算法问开发要解密算法对返回的数据进行解密

解密完成之后在与预期结果对比去进行断言

10.7  http如何进行代理录制接口

Web端

1浏览器设置代理就可以录制默认ip为 localhost端口8888

手机端

1手机设置代理就可以录制

默认ip为pc机器的ip地址端口8888

10.8  jmeter如何进行参数化参数化类型包含哪些

用户参数自定义变量文件参数化csv文件或者txt文件

函数助手随机函数csvread函数数据库参数化

10.9  jmeter中对于json数据如何提取信息

正则表达式提取或者 JSON Extractor提取

10.10  jmeter中如何跨线程组传输参数

正则表达式或者边界值提取器或者JSON Extractor提取的值

后置处理器- beanshell处理器

定义成全局变量

${_setProperty(newtoken,${access_token},)}

其他线程组引入变量值

${_P(newtoken,)}或者${_property(newtoken,)}

10.11  jmeter如何进行断言

1响应断言

添加响应断言添加-》断言-》响应断言

apply to:是应用范围设定匹配的范围

Main sample and sub-samples:匹配范围为当前父取样器及子取样器

Main sample only:仅当前父取样器

Sub samples only:仅子取样器

Meter Variable:变量值进行匹配

要测试的响应文字:针对响应数据不同部分进行匹配

(1)响应文本响应服务器返回的文本内容http协议排除 header部分

(2)响应代码匹配响应代码比如http请求中200代表成功

(3)响应信息匹配响应信息处理成功返回成功”或者“ok”字样

(4) Response Header匹配响应头中的信息

匹配规则:

包括响应内容包括需要匹配的内容就算成功

匹配响应内容要完全匹配内容不区分大小写

equals完全相等区分大小写

substring响应内容包括匹配内容即为成功

可以通过添加断言结果来查看断言的执行情况

执行结果

如果接口响应数据可以与断言匹配上则测试用例通过否则不通过

可以通过断言结果查看断言执行情况。

2大小断言

3持续时间断言

10.12  jmeter如间在cmd命令下运行

Jmeter -n -t文件路径\fw-zhuce.jmx -l result.jtl -e -o E:\resultreport

讲解非GUI界面压测参数讲解

-h帮助

-n非GUl模式

-t指定要运行的 JMeter测试脚本文件

-l记录结果的文件每次运行之前(要确保之前没有运行过即xxx.jtl不存在不然报错)

-r Jmter.properties文件中指定的所有远程服务器

-e脚本运行结束后生成html报告

-o用于存放html报告的目录(目录要为空不然报错)

-R表示选择执行=远程启动

XXX.XXX. XXX. XXX5174 XXX. XXX. XXX. XXX5172

官方配置文件地址http//jmeter.apache.org/usermanual/get-started.html

10.13  imeter运行完成后如何去自动发送邮件?

(1)监听器中添加-邮件观察仪

文件名-运行完成保存运行结果的位置

from邮件的发送人

isz181xiongmao@126.com

addressee邮件的接收人(多个人用逗号隔开)

success subject运行成功发送邮件标题 success limit大于运行请求成功的次数

failure subject运行失败发送邮件标题 failure limit大于运行请求失败的次数

host邮件服务器地址smtp.126cm

login邮件服务器登录用户名密码(授权码)

1、文件名只需要给出路径和保存的文件名称即可给定之后将会把测试结果的数据写入到文件中

注它不会将此文件已附件的形式在邮件中只是将测试结果写入到了定的此目录文件中

如果你运行完脚本直接在此路径下打开此文件就可以看到运行结果

2、 Success Limit与 Failure Limit当成功数与失败数为几时进行邮件的发送(注意此处是大于给定的数值不是等于)我写的1则失败2次后将发送邮件通知我

3、当测试结果100%成功时则不会发送邮件

4、写代码java编写 beanshell后置处理器

10.14  pytest如何做断言?

用 assert断言

1断言返回的结果

2进行逻辑检查检查数据库产生的数据

10.15  patent中如何去调取其他用例中返回的参数?

把返回的值定义成全局变量

global a_id #定义成一个全局变量

a_id = incharge_id

10.16  你们做接口自动化用例数据是怎么组织管理的?

用例数据这块当时公司要求使用 excel表格来进行管理其实这里主要也是为了实现数据与脚本的分离提高整个工程后期的维护与优化这里把数据封装到excel表格之后。

我们在脚本中通过调用封装好的读取 excel表格的数据函数对excel表格中的用例数据

我们是这么组织的会有以下几个字段像用例标题请求地址请求方式请求头请求参数响应结果这个几个部分对于请求头跟请求参数因为脚本中发请求都是通过组装成字典的形式来发送的所以这里我们也是通过类似于字典的形式文本格式来进行组织主要就是方便后期脚本的提取与引用其实我觉得这样去处理的好处就是后期如果用例数据有变动或者需要增加或删除部分

用例直接针对 excel表格数据进行操作就可以了不需要改动脚本这也就方便整个项目工程的管理与维护了。

10.17  requests中如何进行动态关联

1如果返回的是 cookies值可以直接返回接口的 r.cookies

2返回的是str类型数据可以导入re模块进行正则表达式提取返回数据格式是json格式

导入json把json数据格式转化 python对象

json.dumps

将 Python对象编码成JSON字符串

json.loads

将已编码的JSON字符串解码为 Python对象

10.18   你们 python接口自动化怎么去处理 cookie session的?

对于 cookiesession的处理一般有三种方式:

第一种就是先获取登录请求的 cookie值然后发送其他请求的时候在 requests提供的

两个方法get或post方法中有一个 cookies参数我们可以通过这个参数来传递 cookies值

第二种就是通过订制请求头然后把获取到的coookies放在请求头中通过请求头来进行传递

第三种就是通过创建一个 session会话对象后期所有的请求发送都通过调用这个 session会话对象来进行发请求如果是登录请求它会自动保存 cookies值然后其他需要用到cookies值的请求也通过 session对象来发送它会自动把 cookies发送出去,对于 cookies session的处理我们差不多都是通过以上三种方式来实现的

十一、 UI自动化

11.1  ui自动化怎么测试

(1)我们做U自动化测试使用 Python+ seleniun+ unittest工具

主要对自动化进行规划把数据、代码、资源、公共方法进行分离方便后续维护;

具体是通过元素定位、断言、参数化和封装来实现;

其中元素定位的方法主要是css定位也会用一些 xpath定位还有id、name、 class等

断言主要是用 Assert来判断实际结果是否与预期结果相符;

参数化可以用列表、字典、导入excel表格库(xlrd)对数据进行参数化;

对于封装一般我会对元素还有公共的模块进行封装。

比方说原来我们有一个申请借款的功能模块

首先我们先进行自动化框架分类分成测试数据、需要定位的元素、公共方法(比如说一些数据的操作、excel操作我们会封装成一个公共方法)。先采用css定位把申请借款所对应的元素定位出来里面有很多内嵌页面还有下拉框元素的定位操作,对应申请借款的数据我们都会保存在excel表中从excel表格中去获取数据。申请完成以后我们会设置一个断言还有进行数据库的检查。我们会把元素封装到资源库还有就是模块的封装,申请借款会用到登录模块我们首先会封装好登录功能。借款申请完成后会从数据库中删除相关的数据实现数据闭环再关闭界面。

运行自动化脚本我们是用 unittest 框架去运行编写测试集一般我们是编写 unittest脚本

去执行所有测试用例。

我觉得自动化中最难的在于元素的定位、内嵌界面、时间控件这些需要一些js操作去除元素属性进行操作。

自动化中发现的问题

在申请借款中开发人员写了调试代码的弹出框没有删除导致我们自动化脚本跑不通

充值过程中

添加新的支付方式开发修改了代码导致原有充值失败这些都是我们原来自动化发现的问题。原来也用了一些 Robotframework的自动化测试框架这个比较简单一些因为部分关键字、框架已经封装好了只需要调用就行但是不好的地方就是扩展性会差一些。

编写完成以后可以用 Jenkins持续集成去定时跑自动化测试用例再去查看运行日志。

总的来说RF( Robot Framework)比较简单方便上手比较快如果公司对自动化要求不高的话可以选择RF框架来做如果比较高的话就选用 unittest框架来做。

(2)原来我们自动化测试主要是用的 python+ selenium+ pytest框架做的

主要对自动化进行规划把数据、代码、资源、公共方法进行分离方便后续维护;

自动化测试其实主要通过几个方面元素定位参数化断言模块的封装数据闭环等来实现的

其中元素定位主要是cs定位也会用一些 xpathidnameclassname,ink等等定位还有js定位和 jQuery定位都会用到;

参数化主要是用列表、字典、以及导入excel表格库(xlrd)对数据进行参数化;

断言主要是用 assert断言来判断实际结果是否与预期结果相符;

对于封装我主要会对界面上的元素一些公共方法(数据库操作读取excel数据公共方法等)还有测试数据(变量字典列表exce表等)和一些元素操作测试用例等等进行封装;

最后闭环的话就是都要把新增的数据删除打开的界面都要关闭,就比如原来我们做的自动化测试有一个申请借款的功能模块,

首先我们先进行自动化框架模块的分类划分,分成需要定位的元素 page_element公共模块 common(比如说数据库操作读取excel数据的操作都会封装成一个公共模块的)、测试数据data、测试用例、元素操作 element_action、执行用例以及报告文件等等这些模块。

先导入 selenium包采用css定位把申请借款所对应的元素定位出来里面有一些内嵌界面需要先进入内嵌界面 --driver.switch_to.frame()还有下拉框元素的定位操作(定位下拉框的话首先要导入select包通过 indexvaluevisible_text进行

选取值 Select(变量). Select_by_value(‘’)把定位到的所有界面元素封装到 page_element模块里面方便后期维护。

对于申请借款的数据申请借款的一些标题利率等等我们都会保存在excel表中对于excel表格操作导入xlrd包把读取数据公共方法保存到公共模块 common中方便以后从exell表中获取数据申请借款成功以后我们会添加一个断言获取界面title值去判断界面的提示当然也可以获取提示申请成功text内容去判断也会做数据库断言检查数据库数据导入数据库操作包 pymysql把数据操作封装到公共方法

去调用(数据库操作步骤1打开数据库连接,2建立游标,3执行游标(sql),4返回获取的数据)

申请借款模块需要调用到登录模块我们先把登录模块封装好放到元素操作element_action模块中方便维护,借款申请完成后我们会从数据库中删除相关数据实现闭环减低后续维护再关闭所有打开的界面。

我们运行自动化脚本的时候是用的 pytest框架进行

导入 patent导入 yamail包

定义一个主函数if _name_="_main_"pytest.main()所有的用例脚本定义生成对应的HTML报告到 report目录下最后通过 yagma定义发送邮件

定义发送邮箱的登录信息-定义邮件主题内容附件位置--发送邮件到测试人员邮箱中

当后续出现错误用例也会调用 pytest--if来运行失败的测试用例

我觉得自动化中最难的在于

元素的定位、内嵌界面、时间插件这些需要一些js操作去除元素属性进行操作

自动化中发现的问题

在申请借款中开发人员写了调试代码的弹出框没有删除导致我们自动化脚本跑不通;

充值过程中添加新的支付方式开发修改了代码导致原有充值失败

11.2  什么是自动化测试?

把一些简单重复的工作用自动化去实现减少成本原来手工完成事情通过自动化脚本去替代

11.3  什么样的项目合适做自动化(至少三个)

功能需求需求稳定界面稳定不会频繁变动才可以做

版本迭代次数比较多做出来才有意义

项目周期比较长(大项目)意义

11.4  自动化测试流程是什么?

1、前期项目组会评估项目是否合适做自动化测试例外就是看下哪些模块需要做自动化适合做

2、人员安排分工

3、确定测试框架

4、各自领取自己负责模块根据功能来进行划分功能测试的模块

整理功能模块的用例把能做自动化的用例提炼出规整成自动化用例文档

准备数据整理数据管理

资源环境的准备

5、搭建测试环境

6、脚本开发

11.5  自动化实现的比例1-2年。

2年以内把原来手工做的事情15-30%用自动化脚本去替代

2年以上实现40-70%

11.6  自动化测试用例的来源

手工编写测试用例

把原来手工的测试用例当成自动化测试用例

11.7  自动化测试的优点与缺点

优点:

1、对程序的回归测试更方便

2、可以运行更多更繁琐的测试

3、提高测试效率和准确性节约时间成本

4、可以执行一些手工测试困难或不可能进行的测试(例如对于大量用户的测试可以通过自动化测试模拟同时有许多用户从而达到测试的目的)

5、自动化测试不存在执行过程中的疏忽和错误从而增加软件信任度

缺点:

1、不能取代手工测试

2、手工测试比自动测试发现的缺陷更多

3、对测试质量的依赖性极大

4、由于自动测试比手动测试更胞弱所以维护会受到制从而会制约软件的开发

5、工具本身无想像力

11.8  你们自动化覆盖率有多少?

2年以内把原来手工做的事情30%用自动化脚本去替代

2年以上实现40-70%

当时覆盖的确实也不是很多差不多30-40%的样式吧

11.9  自动化测试环境的搭建是怎样的?

1、首先要安装 Python

2、然后安装编写代码工具 pycharm

3、导入 selenium库(pip install seleniun在 pycharm安装 selenium3下载源码包

4、下载浏览器驱动(谷歌.火狐等)把驱动程序发到 Python根目录下

11.10  seleniun的原理是什么?

我们用的 selenium3x以上的版本对于 selenium2x以上的版本原理是这样的

Selenium2.0则是把 selenium1.0中 selenium RC替换为了 WebDriver

WebDriver利用浏览器原生的API封装成一套更加面向对象的 SeleniumWeb Driver API

直接操作浏览器页面里的元素甚至操作浏器本身(截屏回口大小启动关闭安装插件配置证书之类的)由于使用的是浏览器原生的API速度大大提高而且调用的稳定性交给了浏览器厂商本身显然是更加科学然而带来的一些副作用就是不同的浏器厂商对Web元素的操作和呈现多少会有一些差异这就直接导致了 SeleniumWebDriver要分浏览器厂商不同而提供不同的实现例如 Firefox就有专门的 FirefoxDriver

Chrome就有专门的 ChromeDriver等等

11.11  Selenium2与 Selenium1的区别是什么?

Selenium1.0使用的是 Javascript注入技术与浏览器打交道需要 Selenium启动一个 Server将操作Web元素的AP调用转化为一段段 Javascript在 Selenium内核启动浏览器之后注入这段 Javascript开发过Web应用的人都知道 Javascript可以获取并调用页面的任何元素自如的进行操作由此才实现了 Selenium的目的自动化Web操作这种 Javascript注入技术的缺点是速度不理想而且稳定性大大依赖于 Selenium内核,对API翻译成的 Javascript 质量高低

Selenium2.0则是把 selenium1.0中 selenium RC替换为了 Web Driver

WebDriver利用浏览器原生的API封装成一套更加面向对象的 SeleniumWebDriverAPI

直接操作浏览器页面里的元素甚至操作浏览器本身(截屏窗口大小启动关闭安装播件配置证书之类的)由于使用的是浏览器原生的AP速度大大提高而且调用的稳定性交给了浏览器厂商本身显然是更加科学然而带来的一些副作用就是不同的浏览器厂商对Web元素的操作和呈现多少会有一些差异这就直接导致了 SeleniumWebDriver要分浏览器厂商不同而提供不同的实现例 Firefox就有专门的 Firefox Driver

 Chrome就有专门的 ChromeDriver等等

11.12  seleniun库中用过哪些函数?

driver = Web Driver ChromeO

driver.quit() #退出浏览器

driver.closed() #关闭窗口

driver.implicitly_wait() #设置隐性等待延迟

driver.current_url #获取当前的URL

driver.page_source #获取当前页面的源代码

driver.title #获取当前页面的标题

driver.maximize_window() #窗口最大化

driver.get() #加载一个网页

元素定位的:

driver.find_element_by_id()

driver.find_element(By.xxx,’’)

frame跳转的:

driver.switch_to.frame()

driver.switch_to.parents_frame()

driver.switch_to.default_content()

窗口跳转:

driver.switch_to.window()

对话框的处理:

Driver_switch_to.alert

.accepto

.dismiss

.text

.send_keys()

执行js脚本的:

driver.execute_script(js)

Element类:

element.click()

element.submit()

element.send_keys()

element.clear()

element.text

element.get_attribute()

element.is_displayed()

element.find_element_by_xpath()

11.13  定位元素的8个方法是什么?

1、通过id定位

find_element_by_id()

2、通过name定位

find_element_by_name()

3、通过 class name定位

find_element_by_class_name()

4、通过css定位

find_element_by_css_selector()

5、通过link定位

find_element_by_link_text(‘文本’)没有空格一般a链接

6、通过 partial_link定位

find_element_by_partial_link_text(部分文本)--般有空格a链接

7、通过 xpath定位

find_element_by_xpath()

8、通过 tag_name定位

find_element_by_tag_name()

11.14  js定位的5个方法

js用到css定位

1. driver.execute_script("document.getElenmentByld().value='';")

2. driver.execute_script("document.getElenmentByName().value='';")

3. driver.execute_script("document.getElenmentsByClassName()[0].value='';")

4. driver.execute_script("document.getElenmentsByTagName()[0].value='';")

11.15  jQuery定位的方法

1. driver.execute_script("$(#id定位值)vaC")")-输入值a()处也可以用cick()表示点击

2. driver.execute_script("$(name=name定位值va(")输入值

3. driver.execute_script("$(cas定位值)va()")输入值

4. driver.execute_script("$((class=]").val().)

5. driver. execute script ("SCIvalue= ]").val()")

11.16  css定位的方法?

#通过样式   #id样式 .cass样式为多

1. find_element_by_css_selector("#id")

2. find_element_by_css_selector(".classname定位值")

#通过元素属性

3. find_element_by_css_selector("[name=name定位值]")

Find_element_by_css_selector("[class=定位值]")

#样式属性结合

find _element_by_css_selector(div#fanwe_msg_box>table>tbody>tr>td:nth-child(2)>div(@class='dialog-content'))

5.父子元素定位

Find_element_by_css_selector(div#fanwe msg box> table>tbody>tr> td:nth-child(2)

>div:nth-child(2))

11.17  xpath定位的方法? xpath怎么写?

Xpath写法//*div[@id=’u1’]/a[7] #相对路径

Xpath写法/html/boy/div[1l/div/div/divl3/a[7 #绝对路径

#先找父元素结合属性

Find_element_by_xpath(//div(@id=u1"/a[@name=tj_login])

11.18  如何去定位下拉框

1、首先要导入一个包 from selenium.webdriver.support.select import Select

2、先给下拉框元素定位定义一个变量a= diver.find_element_by_css_selector()

3、再通过根据下拉框的 value\visible_text\index去选择值

Select(a).select_by_value('')--根据下拉框的vaue值去选取值

Select(a).select_by_visible_text('')--根据下拉框的内容去选值

Select(a).select_by_index('')--根据下拉框的下标去选。从0开始

11.19  如何去定位内嵌界面

1、定位元素的时候看到fame的需要进入内嵌

2、如果有内嵌有id或name值时直接进入内嵌 driver.switch_to.frame(id值或name值)

3、如果内嵌没有id或name值先定义一个内嵌再进入:

a=driver.find_element_by_class_name(‘’)

driver.switch_to.frame(a)

4、如果有多层内嵌要一层一层进入

5、记得退出内嵌 driver.switch_to_default_content()

6、driver.switch_to.parent_frame()---进入父级内嵌调至上一级内嵌

11.20  如何在不同的网页之间切换

1.首先要获取多个界面的句柄

先通过定位元素几个界面 driver.find_element_by_id().click或者其他获取一个界面打印一个print (diver.window_handles)

然后获取几个界面的句柄,定义成一个变量window_list= diver.window_handles()---以列表形式存在

2.通过界面句柄的下标进入不同的界面 driver.switch_to_window(window_list[O])

通过界面句柄的下标进入不同的界面,0表示第一个,下标-1代表最新的界面

注意如果进入一个界面里面是内嵌记得退出内嵌再进入另一个界面

11.21  如何去定位滚动条?滚动条怎么处理?

一般当我们西面上的元素超过一屏后想操作屏幕下方的元素是不能直接操作的会报元素不可见异常的。这时候需要借助滚动条来拖动屏幕使被操作的元素显示在当前的屏幕上selenium提供了一个操作js的方法: execute.script(),可以直接执行js的脚本

滚动到底部:

Js='var q=document.getElementByld('id')scrollTop=10000'

Driver.execute_script(js)

滚动到顶部

js='var q=document.documentElementscrollTop=0'

driver.execute_script(js)

#把滚动条拉到指定位置

虽然用上面的方法可以解决拖动滚动条的位置问题但是有时候无法确定我需要操作的元素在什么位置有可能每次打开的页面不一样元素所在的位置也不一样这个时候我们可以先让页面直接跳到元素出现的位置然后就可以操作了。

Target_element = driver.find_element_by_xpath(‘//*[@id="4"]/h3/a’)

Driver.execute_script("arguments[O].scrollIntoView();",target_element)

11.22如何去模拟键盘与鼠标的操作?

模拟键盘:

1、要导入一个包 rom selenium. wedriver common keys import Keys

2、快捷键输入通过 send_keys()方法可以来模拟键盘输入操作。

Send_keys(Keys.CONTROL,'a’) 全选(Ctrl+A)

Send_keys(Keys.CONTROL,'C') 复制(Ctrl+C)

Send_keys(Keys.CONTROL,’X’) 剪切(Ct+X)

Sen_ keys(Keys.CONTROL,’V’) 粘贴(Ctr+V)

Send_keys(Keys.ENTER) 回车键

Send_keys(Keys.BACK_SPACE) 删除键

Send_keys(Keys.SPACE) 空格键

Send_keys(Keys.TAB) 制表键

Send_keys(Keys.ESCAPE) 回退键

模拟鼠标:

语法 ActionChains(diver).鼠标操作动作操作的元素. Perform()

鼠标操作动作有click()单击、 context_click()右击、 double_click()双击、

Move_to_element()鼠标悬停

1.先导入一个鼠标的包:from selenium.webdriver.common.action_chains import Action Chains

2.然后定位元素: driver.find_element_by_xpath()可以定义为一个变量aa

3.然后通过语法执行:Action Chains(driver).move_to_element(aa).perform()

11.23、如何去处理上传 Windows文件?

1.可直接赋值 send_keys输入图片的地址

其实上传文件的按钮就是一个 input元素只是它的type类型是file类型

我们在处理这种上传文件的按钮的时候可以直接通过普通定位方式去定位它

再利用 send_keys方法去输入图片的地址就可以了。

Load_file_element=driver.find_element_by_xpath(‘/html/body/div(8l/div(1)/div(2/div/div[3]/form/div/div/div/inpu’)

2.需要用到一个工具Autolt工具

帮助我们识 Windows控件信息利用Autolt生成一个操作 Windows对话框的exe执行文件

然后在 python代码中去调用这个可执行文件

这里需要用到os模块利用 os.system去执行 windows的exe文件

把exe文件的路径传入并传入需要上传的图片的路径即可

Drver.fnd_ement_by_xpath(‘html/body/divoiv1/dw2]/div/div3form/dvd/di)cick()#点击浏览

time.sleep(1)

ossystem(C:\Users\\Administrator\\ Desktop\\AA.exe D:\\QQ.png)

11.24  如何去定位时间控件

1、首先js去定位元素,去除元素中的属性:js="$(‘’).removeAttr(要删除的属性)

2、然后执行js脚本 driver.execute.script(js)

3、然后输入时间日期

driver.find_element_by_xpath(//[@id=start time]").send keys("2018-12-29 105555)#输入日期

11.25  弹出框的操作?

弹出框一般有三种警告消息框确认对话框提示消息框

在 selenium中提供了一个方法 switch_to.alert,跳转到对话框上面去对alert对话框进行操作的函数/法

Accept() #点击确定按钮

Dismiss() #点击取消按钮

Text #获取对话框上的文本信息

Send_keys() #输入内容

11.26  等待时间有哪三种区别是什么?

1、sleep强制等待要导入from time import sleep必须等待那么多秒定位才执行

2、driver.implicitly_wait隐式等待多秒内只要找到元素就开始执行超多设定时间就超时

3、Web DriverWaite(driver,20.1).until(lambdax.x.find_element_by_name()).send_keys()-首先需要导入一个包fom selenium.webdriver.support.wait import WebDriverWait driver 1s钟找一次元素最多找20秒一直发送请求直到找到元素位置以后进行下一步操作。

11.27  有没有修改过页面元素的属性具体怎么修改?

有的有时候我们会碰到一些元素不可见这个时候 selenium就无法对这些元素进行操作了。例如下面的情况页面主要通过“display.none”来控制整个下拉框不可见。这个时候如果直接操作这个下拉框就会提示我们需要通过 javaScript修改 display的值

具体修改方式如下

js='document.queryselectorAll(‘select’)[1].style.display="block";’

driver.execute_script(js)

11.28  定位不到元素你碰到过哪些?怎么解决的?

1、像页面加载延迟的问题这个需要通过等待延迟的方式来处理。

2、不过有时候页面加载完成但是元素暂时还不可见导致定位不成功

这个可以选择使用显示等待来处理这里需要用到 WebDriverWait类来实现

3、还有就是像内嵌网页的问题需要使用 driver.switch_to.frame(name/index)这个函数来跳转到处理。

4、还有要注意多窗口问题动态id问题等的问题对于多窗口处理可以使用

driver.switch_to.window()的方式来进行处理而对于动态id的问题需要注意的是有些id跟数字有关可能会动态变化可以使用xpath也可以使用 css_select属性定位或者样

式定位或者可以通过父元素来找元素或者通过兄弟节点来找对应的元素。等等

5、还有要特别注意滚动条的问题这里通过调用js代码来实现的driver.execute_script(js)

6、再这就是有时候会碰到某些元素的是不可见的比如 display属性为none这就需要通过 java Script修改 display的值。

js ='document. querySelectorAll("select")[1]. style. display="block";

driver.execute_script(js)

11.29  元素定位有时候定位得到有时候定位不到可能是什么原因你会怎么处理?

1、可能是网络问题导致页面加载延迟这个可以做延迟等待一般选择隐式等待在脚本前面加上 driver.implicitly_wait(20)。

2、也有可能是页面结构发生变化导致的这个时候最好选择通过 xpath或css结合属性进行或者样式定位可能会好点或者采用 JQuery定位的方式来进行定位元素

11.30  对于不可见/隐藏的元素你如何定位如何处理?

我们可以通过 javaScript 修改 display的值来实现

#修改元素的属性

#我们需要通过 javaScript修改 display的值。

js='document.querySelectorAll'select')[1].style.display="block";’

driver.execute_script(js)

11.31  如果元素经常变动你怎么做?

1少用绝对路径多用css或者 jQuery定位

2单个元素属性进行封装

11.32  自动化如何破解验证码

1开发去掉验证码

2开发设定一个万能验证码

3python导入 pillow和OCR模块 pytesseract

11.33  数据驱动有没有了解过具体怎么做的?

1、其实就是把数据与脚本分离好处就是方便维护管理后期数据有变动只要改 excel

表的数据就可以脚本不用动

2、封装一个读取 excel表格的函数方法调用这个函数来读取数据。

3、然后利用ddt模型使用dt内部装饰器来实现数据引用

我们当时就是这么做的。

11.34  参数化的类型有哪些?自动化脚本如何实现数据的参数化?

把测试数据通过变量或者文件进行保存通过修改文件或者变量达到数据参数化目的

测试过程减低数据维护成本

1、像测试用例数据这块我们都是放在 excel表格中的

2、常用的变化比较小的配置数据比如数据库连接的配置报告的路径用例的路径等等

这些放在config配置文件中利用全局变量来管理的。对于全局变量的数据直接导入config某块调用就可以。目的是以便于测试数据改变时直接修改变量就行了

11.35  随机数如何操作

1.首先都要 import random

随机整数 random randint(10002000)有时需要转化成字符串类型

str(random randint(1000 2000))

随机字符串"join( random.sample(‘abcdefghijk’6)),有时前面固定字母了

'ldh'+".join(random sample(‘abcdefghijk’,6))

11.36  自动化中如何去操作excel表格?

需要用到xlrd库调用这个库中的API函数来实现的。

1.第一步导包 import xlrd

2.第二步book= xrd.open_workbook(文件路径)

3.第三步table= book.sheet_by_name表名)

4.第四步读某行数据一般都技行来读取

Table.row_values(x)

如果要读全部的数据多行数据利用循环读取就可以

List=[]

for i in range(1,table.nrows):

List.append(table.row_values(i))

return list

11.37  如何去读取表格中一行一列数据具体数据

1、读取一行数据YS.row_values(0)0表示第一行

2、读取一列数据YS.col_values(0)0表示第一行

读取具体某个数据YS.row_values(O)[0]--表示获取第一行第一列

11.38  如何读取表格中总的列数跟行数

获取总列数 YS.ncols

获取总行数 YS.nrows

11.39  自动化中如何去操作数据库

需要自己封装一个函数

1、安装 pymysql: pip install pymysql或者在 pycharm里面安装 pymysql

2、导入 mysql: import pymysql

3、连接数据库: db_connect= pymysql.connect(host='ip地址'

user=’root’,password=’’,database=’’,port=’’,charset='utf8')

4、建立游标: cursor= db_connect.cursor()

5、执行游标: cursor.execute(sql)

6、获取数据

获取游标中所有数据all= cursor.fetchall()

获取游标中多条数据many= cursor.Fetchmany()

获取游标中第一条所有数据one= cursor.fenchone()

7、关闭游标 cursor.close()

8、关闭数据库连接 db_connect.close()

11.40  如何获取数据库返回的所有一行前5行

获取游标中多条数据many= cursor.fetchmany(5)

获取游标中第一条所有数据one= cursor.fenchone()

首先已经建立好了数据库连接的函数并且 return了

11.41  数据库返回的数据格式是什么类型的格式

二维元组的格式

如果要获取具体某个值要用cursor.fetchall[0][0]---这个表示提取游标中所有值里面的第一个元祖里面的第一个值

11.42  ui自动化你是怎么做断言的?

断言主要检查几个点

1.页面跳转是否正确(title,url)

2.页面数据是否正确(核心数据页面上的关键信息或者页面上的某个元素是否出现)

3.如果要检查数据库需要连接数据库查询数据与预期结果进行对比

基本都调用 unittest框架中提供的断言函数来实现的用得比较多的就是

AssertEqual

Assertln

#扩展

1.提取元素text断言

User_text= driver.find_element_by_css_selector("# j_account>a").text#获取实际的值(展示账户名内容)

assert' admin' in user_text #断言 admin在实际值里

2.提取元素属性去断言:

login_button_value=driver.find_element_by_id("lajax-login-submit").get_attribute("vaue") #获取登录按钮的属性vaue值是登录

assert'登录'== login_button_value #断言登录是这个按钮的属性

3.提取界面title值去断言

assert"p2p信贷一最大、最安全的网络借贷平台"in driver.title"失败"或者in改为 not in

4.提取元素是否可用来进行断言

Assert driver.find_element_by_css_selector("div.user_money > anth-child(1)").is enabled0==True"元素不存在。不可用"

5.数据库断言去数据库查询结果是否跟预期一致

11.43  断言有哪几种(三种)常见 assert断言

selenium提供了三种模式的断言 assert、verify、 waitfor

Assert失败时该测试将终止。

Verify失败时该测试将继续执行并将错误记入日显示屏。也就是说允许此单个验证通过。确保应用程序在正确的页面上。

Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试

常见的 assert断言

assertTitle(检查当前页面的title是否正确)

assertText(检查指定元素的文本)

assert Attribute(检查当前指定元素的属性的值)

如果该条件为真他们将立即成功执行。如果该条件不为真则将失败并暂停测试。直到超过当前所设定的超过时间。一般跟 setTimeout时间一起使用

11.44  assert-般断言哪些

1、提取元素text断言:

User_text=driver.find_element_by_css_selector(("#j_account>a").text #获取实际的值

(展示账户名内容)

assert'admin'in user_text #断言 admin在实际值里

2、提取元素属性去断言:

Login_button_value=driver.find_element_by_id("lajax-login-submit").get_attribute(value)#获取登录按钮的属性vaue值是登录

assert'登录'== login_button_value #断言‘登录’是这个按钮的属性

3、提取界面title值去断言:

assert"p2p信贷最大、最安全的网络借贷平台"in driver.title,"失败"或者in改为 not in

4、提取元素是否可用来进行断言

assert driver.find_element_by_css_selector("div.user_money > a:nth-child(1)").is en

abled==True"元素不存在。不可用"

5、数据库断言去数据库查询结果是否跟预期一致

11.45  断言的目的是什么?

可以判断实际结果是否为预期结果如果断言失败的话会终止执行下面的程序不用再用肉眼去看去判断了是否有没有bug了

11.46  模块封装哪些封装的目的是什么?有没有自己封装过一些函数?封装过哪些函数?

模块封装封裝界面上的所有元素一些公共模块(数据库操作读取exell数据公共方法等)

测试数据(返回一些变量字典列表exell表等)一些元素操作测试用例等等.

封装的目的为了后期维护和管理更加方便如果修改数据时直接在模块中修改就行

def get_data(filename,tablname):

# 1.打开 excel文件

Book = xrd.open_workbook(filename)

# 2.打开一个表

Sheet = book.sheet_by_name(tablname)

Print(sheet.nrows)

#3.对表操作列行单元格

list = []

for i in range(1,sheet.nrows):

List.append(sheet.row_values(i))

return list

11.47  闭环有哪些闭环的目是什么

1、通过调用数据库操作把数据删除

2、打开的所有界面都需要关闭--可以在测试用例处设置装饰器每个函数调用装饰器就可以每次关闭了才会打开另一个界面

11.48  POM模型如何划分模块

1、将界面元素封装到一个模块 page_element封装成—个py文件page_element.py

2、将元素的操作封装到一个模块 element_action封装成一个py文件element_action.py

3、将测试数据封装到一个模块data封装成一个py文件 data_base.py

4、将一些公共的方法例如数据库操作获取exell表数据的操作方法封装到一个模块common封装成一个py文件common_action.py

5、将测试用例(test开头的函数用例)封装到一个模块 test_case封装成一个py文件test_case.py

6、将运行用例的框架( pytest框架)封装到一个模块 run_case封装成一个py文件run_case.py(这里还可以发送邮件)

7、还建一个存放测试报告文件的模块 report到时生成的报告存放在这个位置中

8、建立一个持续集成需要扩展的模块ci_cd

11.49  划分模块的好处有哪些

1、方便维护与管理

2、模块化比较方便清楚各个模块的东西提高测试效率和准确性

注意没有统一的标准

11.50  自动发送邮件里面包含哪些内容

1、包含发件者邮箱地址授权码

2、接收者邮箱地址邮件主题邮件正文内容附件地址

11.51  你们有没有做过自动化工程维护工作。

(对于自动化工程的维护是你做的吗? 你们的工程具体怎么维护的? 如何实现数据与脚本的分离? 

具体怎么做的? 优点在哪里? )

工程维护这块最主要分为几大块模块主要就是工程管理思想我们当时采用的POM模型来实现工程的模块化把数据配置文件报告测试用例页面操作公共业务方法等都进行独立起来

封装到不通过的模块中

例外就是实现数据驱动参数化

还有就是实现一些函数的封装方便调用

还有一个重点就是用例的管理统一加载执行如何实现全量跑用例出报告等等

这块我做得不是特别多大部分都是我们老大维护的我们主要是协助为主。

11.52  对于生成的自动化测试报告如何分析?

1、主看总共执行了多少用例通过了多少失败了多少错误了多少。

2、对于错误的用例基本都脚本问题查看报告中的日志详细信息看具体哪个位置出错了.针对性去进行调试修改。

3、对于失败的用例也是首先看报告中的日志看具体哪个位置出错了一般首先怀疑自己的脚本先确定脚本是否有问题如果脚本没有问题那可以确定就是Bug了提Bug即可

#其他问题

十二、 Unittest框架

12.1  你们自动化用例是怎么管理的?

1. 所有用例都是放在 test_case的目录下的统一管理的。

2. 每个某块一个.py文件数据独立放在excel表格中

3. 所有的具体用例脚本都是依据 unittest来编写的利用ddt模型的装饰器来引用数据

  1. 然后跑用例这块主要用的是 unittest框架来统一加载用例并执行用例的.

如果要全量跑调用 unittest中的 defaultTestLoader.discover这个函数来

加载 test_case目录下的所有.py文件。

12.2  Web UI自动化都用到过哪些库?

Selenium库 里面封装了丰富的对浏览器页面元素进行操作的方法。

Xlrd库  主要用来实现对excel表格数据进行读取的APl

Pymysql库 主要用来操作数据库的

Ddt库 主要用来实现数据驱动的

Re库 主要用来提取html页面数据的

Unittest库 主要用来编写用例管理用例执行用例的。

12.3  Unittest框架的原理?

Unittest框架有几个大组件1.测试固件( setUp,tearDown) 

2.测试用例 3.测试套件 4.加载器 5.运行器 6.测试结果

首先我们需要创建测试用例然后利用加载器讲用例加载到测试套件中并创建一个执行器,

去执行测试条件中的所有用例。

它可以帮我们进行管理用例统计加载执行用例批量跑用例。

12.4  Unittest框架有哪些组件?

test fixture(测试固件)

包含一个 Setup()方法/函数tearDown()方法/函数用例执行之前都会先执行 Setup()方法/函数主要是完成一些准备初始化的工作比如创建临时的数据库文件和目录用例数据读取浏览器的打开等用例执行完成之后会执行 tearDown()方法/函数完成一些清理回收的工作比如数据库断开关闭浏览器。

(1)比如说在这个测试用例中需要访问数据库那么可以在seUp()中建立数据库连接以及进行一些初始化在 tearDown()中清除在数据库中产生的数据然后关闭连接注意 tear Down的过程很重要要为以后的 TestCase留下一个干净的环境。

test case(测试用例)

什么是测试用例呢?

就是一个完整的测试流程包括测试前准备环境的搭建( setUp)以及测试后环境的还原( tearDown)还有包括用例方法每个用例方法都必须要以test开头。

test suite(测试套件)

多个测试用例的集合就是 suite一个 suite可以包含多个测试用例也可以嵌套suite.可以通过 addTest()方法手动增加 TestCase也可通过 TestLoader自动添加TestCase TestLoader在添加用例时会没有顺序。

test runner(运行器)

用来执行测试套件中测试用例的最终执行完成之后会生成一个测试结果。

TestLoader(加载器)用来加载用例把用例加载到测试套件中

Test Result(测试结果)包括运行了多少测试用例成功了多少失败了多少等信息。

12.5   Unittest框架如何使用?

1. 导包

import unittest

from selenium import webdriver

import ddt

  1. 定义一个类继承 unittest.TestCase基类
  2. 重写 setUp(),tearDown()方法

setUp()方法实现一个初始化的准备工作比如实例化 webdriver对象对 driver进行初始化配置连接数据库.....

tearDown()方法实现释放资源的任务。

  1. 编写用例方法用例方法必须以test开头

5. Unittest如何去运行多个文件或者整个目录

因为我们用例全部是放在 test_case目录下统一管理的基本每个某块都是一个.py文件要全量跑的话需要调用 unittest.default.discover()函数指定用例目录的路径加载所有的.py文件它会自动创建测试套件井把用例加入测试套件中然后利用unittest.TestRunner()创建一个执行器利用这个执行器去运行测试雷件中的所有用例。

12.6  如何生成自动化测试报告?

我们当时用的是 HtmIReport这个库来生成自动化测试报告的。

  1. 安装

pip install HTMLReport

  1. 使用方法

# 测试用例执行器

runner= HTMLReport.TestRunner(

Report_file_name='test’ #报告文件名如果未赋值将采用"test+时间戳"

Output_path='report’ #保存文件夹名默认" report"

tite=’测试报告’ #报告标题默认"测试报告"

description=’无测试描述’ #报告描述默认"测试描述"

Thread_count=1 #并发线程数量(无序执行测试)默认数量 1

Thread_start_wait=3 #各线程启动延迟默认0s

Sequential_execution=False. #是否按照套件添加( addTests)顺序执行

#会等待一个 addTests执行完成再执行下一个默认 False

#如果用例中存在 tearDownClass建议设置为True

#否则 tearDownClass将会在所有用例线程执行完后才会执行

# lang='e

lang='cn' #支持中文与英文默认中文

#执行测试用例套件

runner.run(suite)

十三、 Pytest框架

13.1  自动化测试使用的那些库

1、selenium库 --web自动化测试工具   2. priest框架运行用例 3. random随机概率

4. xlrd --获取exell表数据  5. pymysql调用数据库   6. pytest-html --生成html文件

7. yagmanil --发送邮件   8. time-时间   9.  Select包--下拉框    10. Keys 模拟键盘操作

11. Webdriverwait智能等待    12. Action Chains模拟鼠标操作

13.2   pytest框架如何使用

1. 安装 pytest框架

pip install pytest、在 pycham里安装 pytest、源码安装

2. 导入 pytest import pytest

3. 编写主函数后续代码后面运行 if_name_=='_main_’;

4. 执行文件:

pytest.main(["要运行的文件的相对路径"])  ----例如(["../test_case/test_01.py"])

13.3  pytest框架如何去生成测试报告

1. 要安装 pytest-html

pip install pytest-html、在 pycharm里安装 pytest-html、或者源码安装

2. 在运行用例模块中执行用例时添加html路径 pytest.main(["要运行的文件的路径","--html=. /report/report.html"])

13.4  bytes如何去运行多个文件或者整个目录

1. 执行多个文件

pytest.main(["../test_case/test_01","../test_case/test_login"])

2. 执行整个目录

pytest.main(["../test_case/"])   --列表里是目录路径

13.5  pytest框架如何去运行上次失败的测试用例

1. pytest --lf运行用例的路径  --- 只运行上次失败的用例

2. pytest --ff运行用例的路径 --- 运行上次所有的用例优先运行上次失败的用例

(如果没有写路径则执行当前目录下所有的用例)

13.6  运行完成后如何去自动发送邮件

#用例执行,无人值守的状态如何才能知道已经运行完成发送测试报告到邮箱里面查看运行完成

  1. 安装 yagman

pip installyagmail、在 pycharm中安装 yagmail

  1. 导入 yagmail: import yagmail
  2. 定义发送者邮箱服务里面包括邮箱地址授权码smtp.126.com

yag = yagmail.SMTP("126邮箱地址""授权码""smtp.126.com")

  1. 自动发送邮件

yag.send(["接收邮件的邮箱地址""多个邮箱用列表包起来"]"邮件主题""邮件正文内容","附件的地址../report/report.html")

13.7  fixture装饰器的作用与默认值

1. 装饰器@pytest.fixture()

def open_l() #不再用test开头

ea = element_action() #实例化对象

ea.open_url() #打开浏览器 driver被其他用例所调用

Yield ea 1装饰器使用的返回值类似于 return方法 2前置与后置处理分开

ea.close_browser() #每次运行关闭浏览器闭环

设置了装饰器之后可以被其他用例调用有使每个用例都有打开网页和默认关闭网页的作用

13.8  yield的作用是什么

1. 装饰器使用的返回值类似于 return方法

2. 使前置与后置处理分开

13.9   pytest运行用例用例命名规则有哪些?

1. 文件名以test_*.py文件和 *_test.py命名 * 代表任意任何内容

2. def函数要以test_开头

3. class类要以test_开头.

4. 以test_开头的方法

13.10  allure报告生成

1先安装一个allure包用 pip install allure-pytest

2运行脚本-s,-d生成报告的目录一般是一些json文件

3下载allure生成工具配置环境变量

4运行命令: allure generate ./allurereport/-o ./reporthtml/--clean

生成html的 allure报告

十四、性能测试

14.1  性能测试怎么测试

性能测试其实就是通过自动化工具模拟多种正常、峰值以及异常负载来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试二者可结合使用。

性能指标主要有平均响应时间、90%响应时间、吞吐量、吞吐率每秒事务数以及服务器的资源使用率(CPU占比mem内存占比等)等。当并发用户数超过300时为了让测试数据更准确可以考虑分布式压测通过司令机控制几台奴隶机进行测试。

性能测试要先调试好脚本主要考虑对脚本的数据参数化和添加断言。因为有些接口需要对业务逻辑或参数格式进行校验为了能让所有线程数跑起来需要将数据参数化。

数据参数化有这几种做法

  1. 可以将一些固定值改成随机函数;
  2. 利用JDBC从数据库读取数据并关联变量
  3. Excal数据参数化
  4. 动态关联参数化断言是为了判断用例是否

执行成功并验证服务器的响应错误率。响应断言常用json断言xml断言用的最少

性能测试的目的是为了检验系统能否满足客户的性能需求若性能需求无法满足时则

要考虑对系统进行性能调优一般用排除法

1、首先考虑网络方面问题使用ping命令查看与目标服务器的连接是否正常、传输速度的快慢。通过提升服务器的带宽看响应时间是否相应降低。

2、考虑数据库的问题可以单独去压测数据库查看数据库的最大连接数和SQL语句的执行时间索引命中率和sleep等待时间等

3、考虑 Apache中间件的问题查看中间件设置的最大连接数是否合理如果设置的连接数太小会话数超过设定的最大连接数时会导致等待时间变长出现响应超时情况

4、考虑服务器的硬件配置如内存、CPU、men、磁盘读写速度等可以用top命令来监控也可以使用nmom工具来监控nmom会把监控的数据形成表格形式方便我们查看。

5、最后考虑开发代码写的好不好处理时间长不长的问题。

举例在我之前的公司我们主要是会考虑用户操作使用比较频繁的模块比如借贷充值投资模块我们一般会通过增加并发数来压测观察CPU、mem、磁盘读写、吞吐量和每秒事务数等性能指标以前我老大要求我并发100个用户我用 jmeter把线程数设为100永久循环持续时间半个小时设置启动延退55在Linux启用mmom工具监控服务器。

当我运行脚本的时候我看聚合报告90%的平均响应时间达到了6s吞吐量也比较小用top命令监控资源发现CPU差不多到了100%。于是我用 Navicat工具通过SQL命令show full processlist取当前运行的SQL语句发现有许多语句用的是左关联在查看了这条SQL语句的执行计划发现没有用索引再查看了索引的命中率命中率倒是还行看了下nmom生成的报告发现CPU一直是处于爆满状态其中主要是mysql的占比很大这个时候我基本上判断数据库的问题。

于是我就照着前面的步骤再次压测同样还是用nmom工具去监控CPUmem网络等状态这次我是主要在 Navicat上用命令去抓取SQL语句还是一样有很多语句都是左关联并发现很多空连接(sleep)我就用 show global variable like"wait_time"命令查看了设置的休眠时间(等待时间)发现时间很长28800s然后我就把这个休眠时间改成了20s因为SQL语句使用了很多左连接我就用 show variables like"tables_size"查看了临时表的空间大小、发现临时表只有16m我将空间改成了1G再去压测了下发现CPU只是降了10%左右nmom报告上还是显示mysql占的CPU很大然后运行的时候用top命令监控发现有的时候有很多mysq进程同时运行(因为没有设置连接池)我就用命令查看了下mysql的最大连接数因为SQL语句的执行速度还是挺快的所以就把mysql的连接数调小到50再去跑了一遍发现CPU降到了40%左右并且其他的性能指标也都还不错。最后把聚合报告的数据以及nmom的数据整理成性能报告给老大其实做接口性能主要就是用排除法个一个去排除发现性能问题就要先解决了性能问题再压测不然其他的问题也有可能是这个性能问题导致的所以接口性能基本上就是观察各个性能指标都在范围之内就差不多了。

14.2  性能测试流程是怎么样的?

例外一种问法简单介绍下你们公司的性能测试流程是怎么样的?

我们那个项目的性能做得不多公司要求也不严格。

对于流程这块首先就要对整个系统进行详细的分析确定基本的测试范围看下系统的哪些业务是需要做性能测试的还有就是做那方面的性能测试对于我们那个项目当时就做了几个业务做了些简单的井发压测(稳定性)这块像登录的搜索查询下单还有就是购物车里面的几个接口都有做过然后就是对各个业务场景进行详细的场景分析与设计确定每个业务场景的并发数是否需要设置集合点啊压测时间是多长还有各个业务场景的性能指标等等场景设计这块基本上都是老大跟产品哪个一起弄的我参与的不是太多。

上面把个场景设置好了之后提交给我们我们就是根据老大设置好的那些场景编写了基本的性能测试用例其实做性能测试我觉得前期最关键的还是业务场景一定要设计好后期我们主要的任务就是准备各自任务需要用到的一些测试数据搭建好测试环境还有就是测试脚本设计与开发执行并生出测试报告对于测试结果我们一般会简单的做个分析如果没有什么问题基本后期就写一个性能测试报告。流程大概就是这样的。

14.3  你们性能观察哪些指标大概指标范围是怎么样的。

对于指标这块业务方面的指标主要有并发数90%用户的平均响应时间

错误率吞吐量/吞吐率这些例外还需要关注服务器资源的使用情况像CPU的使用率、内存的占有率磁盘IO网络。

我们那个项目当时只针对登录搜索查询下订单购物车相关接口支付等业务做了些简单的并发压测这块指标大概是这样的

单基准业务并发测试登录注册查询1s以内下订单购物车相关接口支付2s以内混合业务性能5s以内

响应时间登录注册业务<2s之内查询下订单购物车支付业务<3s

充值提现查看充值日志查看提现日志业务查询标的<3s

投标申请借款<5s

错误率0

吞吐量/吞吐率200左右请求/sec

CPU80%以内

内存80%以内

I/O %util<=80%%nowait<=20%

%util: 磁盘一秒中有百分之多少的时间用于I/O操作

% nowait磁盘等待处理时间占比

带宽<=系统带宽的30%无丢包无延迟无阻塞

14.4  这个测试的环境配置如转速度

租用的服务器一台数据库服务器一台后端服务器

8核16G网络带宽100M2.5GHZ磁盘15000pm转数

14.5  性能测试计划有哪些内容

写过主要是时间进度安排与工作安排主要是环境测试任务测试需求测试方法与策略测试环境准备测试通过的标准。

比如说原来我们一个项目性能测试时做了5天那我们计划是测试策略与用例编写一天测试准备需要1天测试执行2天报告总结1天。

14.6  有没有写过性能测试报告具体包括哪些内容

性能测试报告需要每次 Jmeter压测完成的html报告的数据跟nmon工具监控的数据整理出一份性能测试报告性能测试报告主要包含

1测试资源(环境测试数据表里面需要多少数据测试工具)

2测试设计(测试业务测试类型测试时间并发用户数)

3测试分析(每一个场景都需要分析)

4测试结论(能不能上线不上线的原因)

5优化和建议

6测试通过的标准平均响应时间<5s资源利用率<75%事务失败率<5%

14.7  什么是内存泄漏什么是内存溢出

内存泄漏

是指程序在申请内存后无法释放已申请的内存空间导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响但是如果在内存本身就比较少获取多次导致内存无法正常回收时就会导致内存不够用最终导致内存溢出。

内存溢出OOM

  1. 指程序申请内存时没有足够的内存供申请者使用1M实际要占用2M内存

就说分配的内存不够导致内存溢出

  1. 给了你一块存储int类型数据的存储空间但是你却存储long类型的数据
  2. 长期出现内存泄漏导致系统内存越用越少最终导致内存不够用导致系统崩溃出现OOM

14.8  吞吐量吞吐率

吞吐量KB

指在一次性能测试过程中网络上传输的数据量的总和(单位应该KB)也可以这样说

在单次业务中客户端与服务器端进行的数据交互总量对交互式应用来说吞吐量指标反映服务器承受的压力。

并不是吞吐量越高越高一个服务器的性能要从多个方面去考虑

90%用户的平均响应时间、错误率、吞吐量/吞吐量、CPU、内存、磁盘I/O、网络的占用情况

还有服务器的配置。

吞吐率

吞吐量/传输时间即单位时间内网络上传输的数据量也可以指单位时间内处理客户请求数量它是衡量网络性能的重要指标。

12s   800M数

800 * 1024 / 12 = 66666 KB/sec

通常情况下吞吐率用“字节数秒”来衡量当然也可以用“请求数/秒”来衡量;

14.9  吞吐量与吞吐率跟负载有什么关系?

吞吐量/率和负载之间的关系:

1、上升阶段吞吐量随着负载的增加而增加吞吐量和负载成正比;

2、平稳阶段吞吐量随着负载的增加而保持稳定无太大变化或波动;

3、下降阶段吞吐量随着负载的增加而下降吞吐量和负载成反比;

总结吞吐量/率干不过负载!!

14.10  当你服务器满了之后你们吞吐量和响应时间怎么变化的

吞吐量会所有下降响应时间会变长

14.11  你们的TPS的指标是什么估算的?

假设一个系统的业务有登录、浏览帖子、发送新帖、回复帖子访问高峰是上午10点日访问高峰PV约5208(含登录1300、浏览2706、发帖526、回帖676)系统响应时间要求小于3秒试计算此系统的TPS以及并发数。

如果分析业务量的数据是以PV来统计的我们需要把PV转化为TPS。

PV的统计一般可以通过监控埋点或者统计访问日志统计得出。

说到PV还有个特殊的情况叫 PeakY指一天中PV数达到的高峰PV值。

通过一些监控系统也可以直观看到统计数据。

实际上一个PV即一次对服务器的客户请求可能还包含了很多资源请求比如图片、样式JS信息、文字等。而浏览器具有资源缓存功能下次访问同样资源将不会再从远程服务器上下载这大大加快了响应速度。如果我们使用代理服务器访问外网资源时多数代理服务器也会缓存这些静态数据。也就是说浏览器与服务器之间的动态数据的Size会小于静态数据。

所以浏览器是否缓存了静态数据对性能测试影响明显。我们在做性能测试时其中就有许多用户可能是新用户在他们的浏览器上还没有缓存这些静态数据为了更准确的模拟用户请求我们有必要不缓存这些静态内容.所以性能测试中是否缓存访问的静态资源要根据业务情况而定。

本例中我们把一个请求放在一个事务中来统计服务器的响应时间。这么说一个PV即是一个事务(每秒的PV量并不直接等同于TPS因为一次客户请求可能包含了很多资源请求。如果我们不关心页面刷新时请求资源的耗时此时我们就把每秒PV数等同于TPS)比如一个功能页面(浏览帖子)每秒会有10个PV那么此功能的TPS即为10。

估算TPS

业务量一般要取系统业务高峰的值才能代表系统的实际处理能力系统在10点的访问高峰PV约5208那么这个时段的TPS = 5208/3600 ≈ 1.45吗?

答案是否定的因为在一小时内的吞吐量未必是平均的。

如果我们采集到的业务量数据能够细分到每分钟TPS就越准确。如果不能可以按照二八原则。即80%的业务在20%的时间内完成TPS=(5208*80%)/(3600*20%)≈5.8

估算并发数

1、由TPS进行估算 2、由在线活动用户数估算 3、根据经验估算

方法1由TPS进行估算

因为TPS=事务数/时间假设所有的事务都来自不同的用户那么并发数=事务数=TPS * 时间。

具体如下

Vu(业务名称)=TPS(业务名称)*( Runtime+ ThinkTime)

其中Vu(业务名称)表示此业务的虚拟用户数即并发数。 RunTime是测试程序/脚本运行一次所消耗的时间包括事务时间+非事务时间。 ThinkTime是模拟用户思考或者填写表单消耗的时间。

下面是发帖动作的测试脚本伪代码(T、TT、AT表示时间单位为秒AT一般都是非常小的包含在事务时间中可以忽略).Runtime=T1+...+T7; ThinkTime=TT1+TT2。

Login

Enter login page (进入登录页面)Tl=0.2

ThinkTime (思考时间)TT1=3

Declare login trans action (声明登录事务)T2=3

Commat formm (提交登录表单)

Assertlogin (检资登录是否成功)AT1

Enter default page(进入登录成功后的默认页)T3=0.2

Sender topic

Enter topic list (进入论坛列表)T4=0.2

Enter new page for topic (选入新帖编辑页面)T5=0.2

ThinkTime (思考时间)TT2=3

Declare newTopic transaction (声明新帖事务)T6=3

Commit fom (提交新帖)

Assert commit (查发帖是否成功)AT2

Enter topic list (提交新帖后进入论坛列表)T7=0.2

业内一般把 Think Time设为3秒。测试需求中要求响应时间小于3秒我们就以3秒为阀值

可得 Vu=TPS (RunTime + ThinkTime)=5.8*(T1+TT1+T2+T3+T4+T5+TT2+T6+T7)≈76

如果只计算事务时间Vu=TPS*(T2+T3)=34.8≈35

可以看到两者之间的Vu数量相差巨大。由于一次迭代的时间会大于事务的响应时间如果在估算时不把非事务消耗的时间加入进去计算出来的12个并发用户在测试执行时很有可能无法达到TPS=5.8的目标。

由于我们计算Vu时使用的是系统TPS(登录、浏览、发帖、回帖合计)其中又以发帖业务消耗时间最长所以计算出来的76个并发数实际上是系统业务的总并发数需要按比例分配到各个业务。

业务名称

高峰业务量

TPS

并发数

响应时间

事务成功率

登录

1300

1.44

20

<3秒

>99%

浏览

2706

3.0

40

<3秒

>99%

发帖

526

0.58

7

<3秒

>99%

回帖

676

0.75

10

<3秒

>99%

合计

5208

5.8

77

-

-

方法2在线活动用户数估算

  1. 在线用户数的预估可以采取20%的系统用户数.例如某个系统的系统用户数有1000则同时在线用户数据有可能达到200或者预估200做参考。

在线用户数和并发用户数又存在着关系即平均并发用户数为C=NLTL为在线时长T为考核时长例如考核时长为1天即8小时但是用户平均在线时长为2小时则c=n*2/8

n为登录系统的用户数L为登录的时常。例如一个系统有400个用户登录然后每个用户登录大概停留2小时则以一天8小时考核算平均并发用户则为C=400*2/8

答我们系统的TPS当时是根据PV值来计算的就是通过查看系统访问日志来获取每个业务功能每天高峰期的PV值(也就是每天高峰期的时间段有多少服务器的客户请求)

当时的PV值大概在5000多

然后按照二八原则即80%的业务在20%的时间内完成TPS=(P80%)/(时间20%)≈5.6。算出来大概在5.6。

[具体的指标都是SE跟测试主管他们经过分析出来给到我们的。他们开会的时候大概跟我们说过估算方式差不多是这样的……]

14.13  每人说一个项目接口你设置多少并发

首先涉及到并发用户数可以从以下几个方面去做数据判断

1.系统用户数(注册用户数量)

2.在线用户数(平均每天大概有多少个用户要访问该系统可以从系统日志从获得)

3.并发用户数(高峰期的时候的在线用户数量)

三者之间的关系

  1. 在线用户数的预估可以采取20%的系统用户数。例如某个系统在系统用户数有1000则同时 在线用户数据有可能达到200或者预估200做参考
  2. 在线用户数和并发用户数又存在着关系。即平均并发用户数为C=NUTL为在线时长

T为考核时长例如考核时长为1天即8小时但是用户平均在线时长为2小时则c=n2/8

n为登录系统的用户数L为登录的时常例如一个系统有400个用户登录然后每个用户登录 大概停留2小时则以一天8小时考核算平均并发用户则为c=400*2/8

答就拿登录接口来讲吧

我们的并发数是根据注册用户数量及每天在线用户数综合来估算的我们系统当时注册用户数量大概是在70多万的样子不过这里其实有一些僵尸用户真正的用户大概在60%的样子也就是差不多46万多一点通过查看系统访问日志高峰期的时候每天在线数,用户数量大概差不多在52000多点吧按52000估算每个用户停留时间大概在20分钟左右大概平均每天同时在线用户数量在2145多。其中登录业务的占比大概在10%的样子同时在登录的大概80%的比例计算登录接口大概设置的并发数在172多的样子查询业务的占比大概在30%查询接口大概设置的井发数在510的样子下单业务大概占比在20%下单接口的井发数设定在345的样子。

[具体的指标都是SE跟测试主管他们经过分析出来给到我们的。他们开会的时候大概跟我们说过估算方式差不多是这样的...]

14.14  你们吞吐量是多少响应时间是多少你设置了多少井发?

登录吞吐量大概在13.5/sec响应时间<1s设置的并发数180个并发数。

查询吞吐量大概在36/sec响应时间<3s设置的并发数500个并发数。

下单吞吐量大根在25.6/sec响应时间<3s设置的并发数350个并发。

14.15  做井发你们一般cpu和内存是多少?

cpu大概在60%多点内存大概占比在65%的样子。

14.16  有没有做过稳定性测试

部分接口有做过稳定性测试。具体怎么做的?

稳定性测试主要就是看某个业务在高并发情况下是否能持续稳定运行嘛当时大部分的核心业务都有做过稳定性的这个需是把并发数设置为峰值然后循环次数设置为永远例外要开启调度器调度器中的持续时间设定为3600秒让它持续压测1个小时。看下接口的各项性能指标的变化是否在预期的指标范围之内。

14.17   5000个人抢购只能50个人能抢到你怎么设计并发数的

并发数按群内最大人数计算利用二八原则5000 * 80%=4000并发数的峰值为4000

14.18  微信群里面发送红包5000个人群只能3000个人能抢到你怎么设计并发数的峰值

并发数按群内最大人数计算利用二八原则5000 * 80%=4000并发数的峰值为4000

14.19  20发40次循环怎么做

线程数设置20个循环次数40

14.20  我想从200慢慢加载到300到400怎么做

这个需要用到自定义线程组自定义线程组最大的好处就在于做压测的时候可以设置一些复杂的业务场景具体设置的话就是.....

14.21  需要插入500条数据你怎么插入

1、使用存储过程来实现

2、可以通过 JMeter来实现调用注册接口线程数设置为500账号密码可以通过 JMeter中的随机函数 randomString()random()函数结合计数器来实现。

14.22  响应超时你是怎么定位的

这里一般我会采用排查发首先考虑软件优化问题之后考虑硬件问题思路大概是这样的

1、首先考虑中间件(tomcatApache的连接数的问题)可以尝试增加连接数看是否变化。

2、例外还有就是数据库的连接数问可题也可以尝试增加看是否有变化。

3、要不就是看数据库的访问效率问题这里要考虑数据库的操作是否添加索引如果没有添加索引可以让开发优化下数据库的访问速度添加索引或者优化sql语句。

4、再一个就可以尝试考虑后台代码的架构设计是否合理代码算法是否足够优化。

5、如果以上问题都不能解决那么只能考虑增加服务器的CPU内存或者增加网络带宽看响应时间是否可以得到优化。

大概的思路差不多就是这样的吧。

14.23  压测返回数据报错你怎么去定位的

1、如果是所有请求的数据报错那肯定是脚本问题认真检查脚本参数。

2、如果只是部分请求报错那估计是性能可题了。

14.24  你理解的性能调优是什么?

响应时间过长(排除法) -用户体验不好

1网络情况(提升带宽)

2服务器资源情况

3中间件类型

4中间件的连接数

5代码质量问题

6数据库类型mysql--Redis

7数据库连接数

8sql语句执行时间

show full PROCESSLIST 查看哪些sql语句运行比慢

1、看表是否建立索引

2、运行sql语句是否需要sq优化

9索引命中率

低于0.1%比较好低于0.01%分配比校多适当减少缓存空间大小

show GLOBAL STATUS like "key——read%"

Key_reads=568

Key_read_requests=1329114

Key_cache_miss_rate=key_reads/key_read_requests=0.000427=0.04%

show VARIABLES like "key_buffer_size"  #查看缓存空间大小

set GLOBAL key_buffer_size=8000000 #设置缓存空间大小

10sleep过多

show GLOBAL VARIABLES like "wait timeout%"

show GLOBAL VARIABLES like "interactive timeout%"

set GLOBAL interactive_timeout= 30

set GLOBAL wait_timeout=30

11临时表空间大小

性能排优一些方面

1排除法

2很多问题都是同一个问题导致需要一个个去排除优化解决

资源使用率不足(系统薄弱的位置)

1用户量较少

2网络问题

3中间件连接数不够

4代码质量问题

5数据库问题

资源使用率过高(系统会崩溃)

1用户量比较大

2中间件连接数太大

3代码质量问题

4数据库问题

14.25  如果要做万并发你怎么做

那我们就需要考虑分布式压测那需要准备几台测试机

master机器要设置。。。。

奴隶机要设置。。。。。

也可以租用云测平台进行测试

14.26  如果用户并发要慢慢加载你怎么设置的

设置并发数的时候我们会设置启动时间比如说设置50个并发用户数就是50个线程组

启动时间会设置成10秒让用户慢慢启动起来

14.27  并发用户数跟响应时间与吞吐的关系

1并发用户数越多响应时间越长

2并发用户数越多吞吐量会一直增加增加到一个临界点(系统瓶颈后)不再增加有少许的回落

十五、app测试

15.1  app测试你具体怎么做的?

对于App这块我们一般首先都先做功能先保证功能过关是第一位对于功能这块的话基本都跟Web端是一样的。

除了功能之外公司还要求做了一些专项测试像安装卸载测试兼容性测试稳定性测试性能测试弱网测试交互性测试都有测试过的专项测试这块我主要负责的是兼容性测试稳定性测试性能测试弱网测试交互性测试这是我这边负责的。

像兼容性测试公司有提供了差不多了7-8款的真机像华为小米三星 vivo oppo等这些主流的机型都在真机想有测试过其他的机型公司用的是云测云测平台我们用的Testln这个平台公司会给我们提供账号。

稳定性测试这块用的 Monkey命令工具去测的主要就是通过 monkey模拟用户发送一些伪随机时间看app是否有Crash ANR Exception等现象一般都是在晚上的时候去执行 monkey命令然后出报告分析性能测试用的GT工具结合 Android Studio工具去检测app在手机上运行的时候的CPU内存电量流量启动时间安装卸载时间以及页面的响应时间。

弱网我们用的 fiddler工具去进行模拟的模拟2G/3G/4G等弱网场景看app在弱网情况功能是否能正常使用。

交互性测试这块主要就是看app与其他应用程序之间的交互运行以及与系统应用程序之间交互运行来回进行前后台切换看是否会出现闪退数据丢失等现象。

15.2  Web测试与app测试区别?

其实功能这块app测试与Web测试基本是一样没有什么区别。(需求分析->提炼测试点>编写测试用例->执行用例->提Bug->复测回归)等等的。

区别主要在于web端是B/S架构的App是C/S架构的由于架构的不同所以web端一般服务器更新的时候客户端不需要更新

因为它是通过浏览器来访问的服务器更新了客户端也更新。app服务端要更新,同时客户端软件要进行升级更新才算是新的版本。

对于app测试来讲除了功能之外更多的还要考虑一些专项测试比如

Web测试是基于浏览器的所以不必考虑安装卸载。而app是客户端的则必须测试安装、更新、卸载

兼容性、稳定性、性能测试、弱网测试、交互性测试等等。

还有就是对于兼容性这块Web端主要考虑是不同的浏览器不同的操作系统的兼容性接口。

而对于app测兼容性更多的考虑不同的品牌机型不同操作系统不同手机屏幕大小屏幕分辨率

性能方面也会有所不同Web端性能测试更多关注的后台的性能

app的性能测试关注的是手机本身的资源的性能问题

比如CPU内存电量流量页面加载响应时间软件启动时间等等

他们两个之间的区别差不多就这些吧。

15.3  常用的adb的命令?

adb start-server

adb kill-server

adb devices

adb -s设备 ID install路径/包名.apk

adb -s设备 ID shell pm list packages -3

adb -s设备 ID uninstall com.baidu.BaiduMap

#电脑端文件传输到手机上

adb -s设备 ID push D:\路径文件\ sdcard\路径\

#手机上的文件传输到电脑端

adb -s设备 ID pull \sdcard\路径\文件\D:\路径

#查看手机端的日志

adb logcat

adb logcat -d #打印完所有的日志文件之后退出shell终端

adb logcat -c #清除手机系统运行生成的日志文件

adb logcat -v time #需要打印日志详细时间的简单数据

adb logcat -d *:E #需要打印级别为Eror的信息

adb logcat -d *:E>D:\hello.log

adb logcat -d *:l>D:\hello555.log #打印1以上级别的所有日志信息

adb logcat-d *:E | findstr cn.csdn.activity > D:/hello_error2.log

查看所有的手机软件包名  adb shell pm list package  

查看第三方的手机软件包名 adb shell pm list package -3

查看后台运行的包名 adb shell am monitor

查看手机当前使用的内存情况各个线程的内存占用情况 adb shell dumpsys meminfo

查看手机的电池信息 adb shell dumpsys batteryinfo

查看系统资源状态 adb shell top

adb命令录屏

adb shell screenrecord --time-imit 10/sdcard/demo.mp4 (10表示录制10秒默认是180秒)

15.4  adb的作用的?

adb其实是一个 android调试桥主要是用来监控手机设备的实现手机端与电脑端的通信通过adb来实现对手机的管控。比如通过adb安装软件卸载软件通过adb可以查看手机的资源使用情况可以查看cpu内存等资源。还通过adb实现手机端与电脑的文件的传输通过adb查看手机端app运行的日志通过看日志来分析具体问题。

15.5  App兼容性测试怎么做的?

像兼容性这块当时我们主要用真机测试为主公司当时使用提供大概7、8款机型吧

我记得像华为荣耀系列两款例外小米机型有选择2款还有就是像 vivo oppo当时都有测过,

对了还有三星等这些系列机型上都有做过真机测试。

真机这块像系统版本主要覆盖的系统其中6.0\7.0\8.0为主, 5.0以下公司当时都不要求测

对于其他的机型覆盖不到位我们都是通过云测进行覆盖的云测这边我们公司用的 testin这个云测平台公司有提供账号给我们只要登录上去然后把apk上传上去之后选择机型要测试的机型当时我们在云测测试有差不多有60款多款机型吧主要是市面上流程的主流机型每个系列都会选个几款如果用真机测了的就不在选择了然后做一些相关的配置云测平台上主要帮我们做了智能遍历安装启动运行卸载初始化 Monkey测试相关的测试不过 monkey一般都是通过真机测的云测平台没有测过配置好了之后提交测试就可以了一般提交测试之后需要几个小时就会出报告。然后分报告主看遍历安装启动运行卸载初始化相关哪些机型有出问题对于出问题的机型一般会先补测一下如果还有问题我们项目组一般会向公司申请真机再真机进行复测如果真机复测有问题就通过利用 adb logcat查看错误日志分析具体的问题所在。

其实我们做兼容性测试主要就是看软件在不同机型不同系统版本下能不能正常安装卸载是否能正常启动运行初始化我们都把各个功能都进行运行一遍主要就是跑下主流程看有不有问题。例外就是看软件在不同屏幕大小不同的分辨率的手机下显示是否正常有不有拉伸显示不全或者显不清晰的等问题。

当时我们兼容性就这么做测。

15.6  App稳定怎么做的? Monkey怎么用(App稳定测试)?

稳定性这块我们当时用的是SDK自动的一个 Monkey工具进行测试的其实 Monkey工具主要通过模拟用户发送伪随机时间去操作软件通过执行 Monkey命令它会自动出报告执行测试大概在10万次每个动作的间隔时间250ms主要就是看软件长时间随机乱操作的情况是否会出现异常闪退崩溃等现象。

一般我都是在下班的时间晚上时间执行 Monkey命令并把生成的报告导出到电脑端大概需要6、7小时第二天早上看报告分析报告如果出现问题一般利用上次执行的那个种子值再进行执行命令进行复测一下

像 monkey命令

adb shell monkey -p com.xy.android.junit -s 种子值 --throttle 250  --ignore -crashes --ignore -timeouts -monitor-native-crashes -v -v 100000 > E:\monkey_log\monkey_log.txt

这里主要关注几个点1、指定种子值  2、忽路一些异常保证能正常执行完成  

3、设置间隔时间  4、配置一些时间比例   5、然后就是执行的次数。

对于报告怎么分析这块主要看有不有 CRASH(崩溃)ANR(超时无响应) Exception(异常)等的情况像看有不有空指针异常( NullPointException)啊0OM等现象啊等等

找到 CRASH崩溃ANR超时无响应 Exception异常的位置看出现错误的上一个动作是什么什么做了什么动作导致错误出现。异常信息会详细的指出哪个 Activity出现了问题甚至于哪个函数出问题了具体哪个位置。然后把报告中出现的日志信息截图发给开发开发修复完成之后我们会根据种子值在进行复测一下。

稳定性这块我们当时就是这么做的。

我在运行 monkey发现过很多的问题我就简单的说几个问题举个例子在查看 monkey运行日志中

  1.  com.androidserver.am.NativeCrashListener.run(NativeCrashListener.java129)

属于本地监听代码导致的崩溃手机监听代码导致的崩溃他是手机产生的原因不是代码的原因不做处理。

  1. ∥Short Msg:java.lang.IllegalArgumentException传参异常需要一个stng类型给我一个int类型
  2. ∥Short Msg:java.lang.NullPointerException 空指针异常
  3. ∥Short Msg:Native crash 本地代码导致的奔溃
  4. (com.koudaizhekou.tbk/com.uzmap.pkg.EntranceActivity) 超时无响应

等等等……

15.7  App弱网测试怎么做的 ?

弱网测试这块我用的 fiddler工具做的通过 fiddler实现延迟发送数据或接收的数据的时间来限制网络的下载速度和上传速度从而达到模拟2G\3G\4G的移动网络的弱网场景还有设置随机数来模拟网络不稳定的情况。

操作首先保证手机与电脑在同一个网络然后在手机上设置代理服务器指定服务器为装了 fiddler的电脑的ip地址端口为8888然后就是在fiddler上设置上行下行速率,实现对发送接受数据的进行网络延迟具体在 fiddler的菜单上有一个Rules -> CustomizeRules打开 Fiddler的 ScriptEditor文件在其中找到 m_SimulateMode标志位然后修改上行下载的网络延迟时间即可具体设置参数的值SE那边有给到一个参考文档

2G上行440下行400 3G上行100下行100

模拟网络不稳定的情况

生活当中网络并不是固定不变一般处于不稳定的状态我们这个时候编写随机数来模拟网络不稳定的情况

1在 Customize Rules文件中写一个随机的数

static function randlnt(minmax){

return Math.round(Mathrandom()*(max-min)+min);

}

2在 Customize Rules文件中限制网络的参数修改成随机数

if (m_Simulate Modem){

// Delay sends by 300ms per KB uploaded.2kb/s

oSession["request-trickle-delay"]=""+randlnt(120000);

// Delay receives by 150ms per KB downloaded.2.5kb/s

oSession["response-trickle-delay"]=""+randlnt(120000);

3重新勾选

Rues-> Performance->勾选 Simulate Modem Speeds

弱网测试看我们软件在弱网场景下是否会有丢包的现象丢包率是否严重页面是否能正

常展示是否有空白页数据是否有丢失页面加载速度是否会严重影响用户体验。

15.8  App的性能测试

内容要点

指标cpu内存电量流量FPS

怎么测?  cpu内存流量 android studio

cpu不能超过10-20%   普通业务要求在10%左右核心的业务尤其是一些绘图的业务

要求在20%左右。指标SE给到竞品分析

内存主要看有内存泄露的情况怎么看?

流量一刷新使用软件流量会逐渐增加

具体操作

1对于cpu内存流量这3个指标我们用的 android studio来检测的结合sdk里面的一个插件 android Monitor它可以帮我们试试检测cpu内存流量的曲线图

2这里我们需要开启手机端的开发者模式还有usb调试模式例外开发给我们提供的apk包必须需要开启 debug模式开发开启之后打包给测试人员就可以了

3主要就是对我们需要测的功能进行操作然后实时查看图表看他是否有内存oom内存泄漏cpu是否使用过高是否有内存抖动造成的卡顿等现象是否有图片过大造成流量使用过大这些问题等是否有频繁使用流量没有使用缓存等问题

4像fps帧率是通过adb命令来测的还有电量我们当时用的是手机自带的一个第三方软件测的?

15.9  对于内存具体怎么测呢?

对于内存其实主要看有没有内存泄漏的问题

具体我们是这样做的

1、首先我会频繁操作同一个业务看他的内存和cpu是否逐步增长最后稳定在一个固定大小的范围如果在频繁操作同一个业务内存一直在增长可能存在有内存泄漏问题尝试手动GC(手动回收内存因为内存泄漏系统已经回收不了所以尝试下手动回收内存)内存明显或者断崖式的下降基本就可以判断有内存泄漏的现象

再通过 damp java这个去分析分析结果如果出现 leaked就说明有了里面可以找到是哪个对象截图提bug

2、使用app过程中内存一直在增长那基本可以判断有内存泄漏的情况还有看是否有内存抖动的现象这里主要原因还是有因为大量小的对象频繁创建频繁的回收内存会导数cpu频繁使用造成cpu使用过大造成app卡顿导致内存碎片内存泄漏等问题

15.10  对于CPU具体怎么测呢?

cpu主要就是看有没有过高有没有超过我们的指标范围

具体是这样做的

首先频繁使用某一个业务cpu是否逐步增长最后稳定在一个固定大小的范围对于一把基础业务对cpu要求不高的业务cpu不能超过10%对于cpu要求比较高的比如某个业务需要加载地图大量的图片视频等的业务或者需要做大量的数据统计分析的业务

我们要求cpu不能超过20%

15.11  对于流量具体怎么测?

a首先看在没有操作功能业务的情况下没操作流量不应该有或者是流量使用不是很大就几KB因为app肯能实时刷新消息比如如果一个登陆你就使用1M的流量查询个图片使用3-4M的流量图片这个肯定流量使用过大

b频繁操作同一个业务流量一直在刷说明没有使用缓存

如何处理图片过大处理方法图片压缩传输要么降低图片分辨率

15.12  对于FPS具体怎么测?

对于Fps帧率的问题我们当时用的adb命令来测的

知识点拓展 Android设备的屏幕刷新率为60帧/s要保持画面流畅不卡顿要求每一帧的时间不超过1000/60=16.6ms这就是16ms的黄金准则

  1. 打开手机开发者选项-> profile GPU rendering ->

 in adb shell dumpsys gfxinfo(开启GPU渲染模式)

b. 操作要测试的apk

C. cmd窗口输入命令 adb shell dumpsys gfxinfo 包名

d. 得到一个矩阵数据计算矩阵中帧率大于16的点所占比例即为卡顿比

e. 通过execl进行表格处理可以直观的查看软件的流畅度

15.14对于电量具体怎么测?

电量这一块我们当时用的手机自带的第三方软件测的

15.15  App交互性怎么做的?

交互性这块主要从以下几个方面去考虑测试的是

  1. 看我们软件与其他应用软件的同时运行来回切换是否有问题
  2. 看软件切换到后台一段时间再切换到前端或者前后台来回切换

软件是否会有异常比如进程被杀死或者切换到前端页面出现问题或者页面数据丢失等等。

  1. 看软件被在使用过程中被其他应用中断或者其他意外情况中断比如来电来短信闹铃低电量测试等还要注意手机端硬件上如待机锁屏插拔数据线耳机等操作不会影响客户端。

15.16  App的安装卸载更新测试具体从哪些方面考虑?

安装测试

  1. 正常安装测试检查是否安装成功安装完成后能否正常启动应用程序
  2. 是否支持第三方安装比如豌豆荚及91助手等工具可以正常安装及卸载程序
  3. 检测在各大手机市场上下载并直接安装看是否能正常安装安装完成之后能否能正常启动。
  4. 检测APP版本覆盖测试(先安装一个低版本不卸载。然后再直接安装一个高版本看是否会覆盖 低版本。(直接覆盖是否成功卸载之后再下载新版本看是否能安装成功
  5. 检测版本回退(先装高版本不卸载直接再重新安装一个低版本是否会覆盖高版本。
  6. 检测在内存不足的情况下去安装软件系统应该会有提示
  7. 在安装过程中所有的提示信息必须是英文或者中文提示信息中不能出现代码符号、乱码等。
  8. 检测在未允许外来程序的安装的情况下安装软件是否会有提示信息
  9. 如果软件需要用到网络GPS定位联系人等其他系统应用程序的时候安装App会有相应的提 示。在不允许的情况软件是否能正常使用。
  10. 安装完成后是否对其他应用程序造成影响。
  11. 多进程进行安装是否安装成功。(同时安装多个软件是否能正常安装)
  12. 在不同型号、系统的手机进行安装。(兼容性)
  13. 安装过程中取消安装再次重新安装是否能正常安装。
  14. 安装完成后检查手机桌面能否添加快捷方式。(是否有快捷图标生成。)

卸载测试

  1. 正常卸载软件是否能正常被卸载相应的桌面图标是否会删除
  2. 卸载之后对应的文件是否删除干净进入安装位置去看下是否有残留的文件
  3. 程序正在运行的时候卸载程序是否能正常卸载
  4. 卸载过程中取消卸载看是否正常退出卸载程序检查软件是否还能继续正常使
  5. 在没用使用程序时删除目录文件看程序是否能运行。
  6. 不同系统、硬件环境下进行卸载
  7. 卸载成功后是否对其他程序有影响
  8. 卸载后再次安装是否正常使用
  9. 在卸载过程中所有的提示信息必须是英文或者中文

提示信息中不能出现代码是否有相关的提示信息

  1. 卸载过程中出现意外(比如手机关机没电查看信息接打电话)程序是否还能运行
  2. 在卸载过程中突然重启设备再次访问程序是否还能运行。

更新测试

  1. 当客户端有新版本时提示更新
  2. 非强制更新可以取消更新旧版本正常使用下次使用软件时仍然会出现更新提示
  3. 强制更新强制更新而用户没有更新时退出客户端下次启动依然提示更新
  4. 不卸载更新检查是否可以更新
  5. 不卸载更新检查资源同名文件如图片等是否更新成最新版本。
  6. 非wifi网络下提示是否更新取消就加入待下载wifi下自动更新。

15.17  H5界面怎么测试

基本功能测试(浏览器、微信内置浏览器)

登陆

目前H5与 native各个客户端都做了互通所以大家在测试的时候要注意两点

A、若客户端已登录那么进入H5后仍然是登录状态

B、若客户端未登录进入H5点击对应按钮OR链接如果需要登录须拉起 native登录。若取消登录是否可再次拉起登录或者停留在的页面是否有对应的登录提示.。

ps本次测试过程中就发现第一次点击链接可以拉起登录第二次却不能

翻页

遇到翻页加载的页面需要注意内容为1页或者多页的情况。

A、数据分页加载时注意后续页面请求数据的正确。

ps这个需要注意在快速操作场景中请求页数是不是依次递增快速操作(如第1页尚未 loading出来的时候仍然继续上拉操作)时是否发出去对应的请求了。

刷新与返回

A、下拉刷新是否仍然处于当前页面。

B、用户主动点击刷新按钮是否仍然处于当前页面

C、点击返回与back键回退页面是否是期望页面

ps本次测试过程中就发现mtop接口请求成功但是data内无数据时返回到的就是个空白页面无法正常发送请求。

H5适配相关

H5的适配其实比客户端的相对来说要少一些手机品牌之间的差异不大所以不用太多关注最容易出现问题的是 android2.3系统这个要特别关注下:

  1. 大屏(如720*1280重点关注页面背景是否完全撑开页面刷新是否有抖动)

小屏手机(如320*480重点关注下弹框样式和文案折行)

B. android2.3、android4.X随机找一个即可

C. ios5、ios6、ios7

体验相关

资源相关

A、页面中有图片的话淘宝那边建议图片一般不大于50kb本着一个原则尽量缩小图片

B、资源是否压缩、是否通过CDN加载

C、如何保证二次发布后有效更新。

流量

A、对于一些不会变化的图片如游戏动画效果相关图片不需要每次都请求的东西做本地缓存

B、数据较多时是否做了分页加载。

页面展现时间

A、关注页面首屏加载时间

页面提示

A、弱网络下数据加载较慢是否有对应的 loading提示

B、接口获取异常时提示是否友好

C、刷新页面或者加载新内容时页面是否有抖动

手机操作相关

A、锁屏之后展示页面

B.回退到后台之后重新呼出在前端展示

15.18  你们之前是用什么手机什么版本做兼容性测试的?

有用到三星note5 Android 6.0.1 三星s6 Android 6.0.1

红米1s Android 5.1     小米5 Android 7.0

华为mate9 Android 6.0 乐视2 Android 6.0

华为mate20 Android 9.0 三星s8 Android 8.0

iphoneos ios 10.3.2        iphone ios 10.0.2

iphone ios 8.4.1 iPhone X ios 11.0

15.19  Android跟ios测试有什么区别?

Android和ios测试的共同点都需要进行界面测试、功能测试、兼容性测试、网络测试、交互性测试、易用性专项测试、异常测试、安全专项测试以及权限测试。不同的是 Android测试除了以上的测试之外还要用 monkey进行稳定性专项测试以及用 emmagee或者gt进行性能专项测试。los是用itools工具对功能进行测试安装、传输文件以及查看日志。

从操作系统安装卸载按键操作开发语言这几个方面去区分操作系统 android操作系统较多iOS较少只能升级不能降级并目新的版本的资源库不能完全兼容旧版中系统中的应用如果低版本应用调用了高版本的资源库可能会导致系统崩溃。

安装卸载测试应用发布后下载安卓包的平台和渠道很多豌豆英、应用宝、360手机助手等;

iOS主要有 App store、 iTunes安全性会更高点

本地测试安卓手机可以通过扫码或者直接安卓APK包安装测试包;iOS要安装测试包必须绑定手机的id(证书)才可以安装ipa测试包

按键操作测试安卓手机针对每一款手机有不一样的操作;苹果手机操作习惯单一

开发语言虽然同样的业务安卓和iOS的展示形式和业务一致但是底层全完不一样安卓的应用是有java语言实现的iOS用OC实现。

15.20  小程序怎么测试

1小程序测试(多用第一人称口语化表达多讲一些讲细一些先宏观在微观)参考面试问题STAR法则:

我们原来主要测试几个方面界面测试功能测试交互性测试兼容性测试安全测试

易用性测试异常测试权限测试

界面测试主要是测试跟界面的原型图是否一致同时我也要考虑不同屏幕大小跟分辨率

功能测试跟所有的功能测试都是一样的还有小程序有位置功能检查下微信小程序,附近中是否能找到对应小程序使用小程序是否记录

交互性测试要考虑跟微信的功能交互使用比如说一些卡包支付等功考虑跟手机固有功能交互比如说来电短信等

兼容性测试考虑跟微信不同版本的兼容还有同时还要考虑不同手机厂商跟手机型号兼容还要考虑当微信清除缓存后小程序还能否继续使用

安全测试测试数据加密包括sql与xss脚本攻击这块

易用性测试考虑功能是否方便还用

异常测试考虑断网手机重启关机的情况

权限测试小程序继承微信权限测试手机对微信权限还要考虑微信对小程序授权是否允许操作

原来我们测试阶段上传小程序到微信小程序平台上传到开发版本里面通过扫描二维码去下载小程序进行测试

上线后我们也要测试下微信搜索小程序中能否搜索的到

15.21  公众号小程序比app更火你怎么看

小程序有安装包一般控制在1M以内

1基于微信大的平台有流量的入口

2不需要安装操作更加方便

15.22  微信开发者工具如何使用

原来我们的下载一个微信开发者工具导入开发给的小程序代码包在输入开发给予的

appid调试与测试小程序代码包

如果真机测试也可以扫描开发在微信开发者工具生成的二维码进行测试

十六、安全测试

16.1  安全测试怎么测试?

安全测试我们常用的方法是1sql 注入   2xss脚本攻击   3数据加密   4权限控制

运用扫描工具 appscan扫描web系统。扫描app的一般用腾讯 wettest等平台测试测试

前端(web)时我们首先检查检查一下用户的感敏信息有没有进行加密显示通过Fiddle抓包工具检查一下用户的感敏信息有没有进行加密后传输如用户密码相应的银行卡个人信息等再到日志中搜索关键信息搜索到就泄密存在安全漏洞数据库中是否做了加密处理。还有就是把发送请求的数据篡改例如打开fiddle工具设置过滤器设置断点把商城里的支付订单的1000完金额修改成1块钱再放行发送数据看是否支付1块钱订单支付成功如果成功则是bug预期结果是支付金额不对才行用sql语句注入和xss脚本攻击把sql语句或xss脚本编缉成csv文档通过 jmeter 工具添加"CSV数据文件设置"来调用里面的语句来在所有的查询位置、所有的接口请求、url请求链接参数中进行sql语句注入或xss脚本攻击模拟sql语句xss脚本攻击数据库看它是否把sql注入代码或xss脚本当成字符处理如果不是就是bug再看功能不能正常使用、系统是否崩溃错误弹出框界面是否变形。还有在所有可以保存的地方都添加xss脚本攻击代码看看是否出现异常。权限控制(用户的校验)校验用户安全认证信息是否正确如没有权限的界面不能进入不能提供操作入口或不能通过url直接去访问例如;把所有需要权限的界面全部复制一份出来然后退出用户再通过url链接去访问功能如果可以访问就是bug如有提示登录属于正常。还有登陆用户再退出用户后点击浏览器的后退不能进入原来的界面。

通过 appscan扫描工具去扫描我们般是这样操作的;

  1. 启动软件进入主界面->选择创建新的扫
  2. 在弹出的新建扫描对话框中选择常规扫描
  3. 在弹出的扫描配置向导对话框中选择 AppScan(自动或手动)点击下一步
  4. 在此页面中填写需要扫描系统的同址点击下一步
  5. 选择登陆方式为记录点击下一步
  6. 完成系统登录操作后关闭浏览器选择登录管理中的“详细信息”;

7、在“详细信息”中取消“激活会话中的检测”同时在“登录会话标识中”对变量参数值进行跟踪以确保参数的正确处理而获得系统访问权限;

8、把密码修改页面URL、用户权限删除URL等页面添加至排除测试范围防止 Appscan的请求产生相应影响(防止 Appscan修改密码或删除用户帐号);

9、在“自动表单填充中填入用户名和密码参数并填写参数值其余不做修;

10、如果测试过程中应用服务出现性能响应过慢的问题适当调整测试线程数为2~5;

11、测试策路选择为严重性”进行过滤只勾选关注的严重性级别把“高”、“中”和低”选上

13、点击确定按钮结束扫描配置工作;

14、点击扫描按钮选择“仅探索” Appscan开始执行探索工作;

15、探索自动结束后点击“手动探索”按钮此时在弹出的E浏览器窗口中登录系统手工的任意访问系统页面(1-10个)关闭浏览器;

16、在弹出的参数添加窗口中点击确定按钮”

17、点击扫描按钮选择“完全扫描” Appscan开始执行测试工作;

18、测试执行结束后点击报告按钮选择关注的测试结果信息勾选“报告内容”里的所有勾选;

19、保存报告保存类型建议选择为html;然后分析报告。(只需了解面试尽量不要提及)

16.2  appscan的原理是什么

对一个综合性的大型网站来说可能存在成干上万的页面。以登录界面为例至少要输入用户名和密码即该页面存在两个字段当提交了用户名和密码等登录信息网站需要检查是否正确这就可能存在一个新的检查页面这里的每个页面的每个参数都可能存在安全漏洞可能成为被攻击对象。 AppScan正是通过按照设定策略和规则对Web应用进行安全攻击以此来检查网站是否存在安全漏洞。

在使用 AppScan的时候通过配置网站的URL网址 Appscan会利用“探索”技术去发现这个网站存在多少个目录多少个页面页面中有哪些参数等即探索出网站的整体结构通过“探索”可确定测试的目标和范围然后利用 AppScan的扫描规则库针对发现的每个页面的每个参数进行安全检查。

简言之 APPScan的工作原理如下

  1. 通过“探索”功能利用 Http Request和 Response的内容爬行出指定网站的整个Web应用结构。

2) AppScan本身有一个内置的漏洞扫描的规则库可随版本进行更新从探索出的url中修改参数or目录名等方式构造不同的url对照组向服务器发送请求or攻击。

3) 根据 Http Response返回的内容和正常请求所返回的响应作对比是否产生差异性而这种差异性又是否符合扫描规则库的设定规则以此来判断是否存在不同类型的安全洞。

4) 若 APPScan可判断存在安全漏洞则对这些漏洞的威胁风验给出说明进行严重程度提示并给出修复的建议和方法以及漏洞发现的位置提示。

十七、 python编程

17.1  一个变量没有定义报什么错误

一般在 python中会有红色的波浪线标出来要是运行后就直接会报变量没定义的错

NameError name'i' is not defined

17.2  列表与元组的区别

他们最大的区别

  1. 列表可以修改元组不可以修改列表就相当于一个动态数组而元组是一个静态数组。
  2. 从设计上说列表是用来保存多个相互独立对象的数据集合而元组设计的初衷就是为了描述一个不会改变的事物的多个属性。
  3. 然后列表的声明用中括号元组的声明用小括号并且元组只有一个元素的时候需要在后面加逗号。

17.3  python序列有哪些?

有序序列字符串元组列表

无序序列字典集合

序列特点

---都可以通过索引得到每一个元素

---默认索引值总是从零开始

---可以通过切片的方法得到一个范围内的元素的集合

---有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)

17.4  Python区分大小写吗?

python中是区分大小写的

17.5  如何获取字典中的所有键?

我们可以直接遍历这个字典用keys()函数取出所有的键

for key in dict.keys()

如果说要取出字典中所有的键和对应的值我们用items0函数

for key,value in dict.items()

17.6  列表和字典有什么区别?

1) dict生成慢查找快list生成快查找慢

2) 另外list是有序的dict是无需的

3) list通过索引访问dict使用key访问

17.7   截取字符串里面部分字符怎么做?

1) 一般就是在定义的这个字符串变量后面用中括号[]然后里面填写需要截取的素引数

print(str[2:1)

print(str[:2]) # 从开始到2)

print(str[2:5])

print(str[:])

  1. 利用字符串的中的内置函数 split()

str1 = ‘2018-11-20 14:40:00’

print("年份: "str1.split(‘’)[0].split(‘-’)[0])

print("月份: "str1.split(‘’)[0].split(‘-’)[1])

print("日期: "str1.split(‘’)[0].split(‘-’)[2])

print("时: "str1.split(‘’)[1].split(‘:’)[0])

print("分: "str1.split(‘’)[1].split(‘:’)[1])

print("秒: "str1.split(‘’)[1].split(‘:’)[2])

17.8  如何遍历列表字典?

1) 列表遍历

list=[3,4,6,89]

for i in range(0,len(list)):

print(‘%d’%list[i])

for i in list

print(i)

2) 字典遍历

dict ={‘name’:’jason’,’pwd’:’123456’}

for key in dict.keys():

print(dict[key])

for value in dict.values():

print(value)

for key,value in dict.items():

print(key,value)

17.9  列出5个 python标准库?

os: 提供了不少与操作系统相关联的函数

sys: 通常用于命令行参数

re: 正则匹配

math: 数学运算

datetime: 处理日期时间

17.10  字典如何删除键和合并两个字典?

字典dic1={‘name’:’laowang’,’age’:’18’},

dic2=(‘name’:’Xiaohua’}删除dic1中键名为’name’的键并合并dc1和dic2

  1. 删除键名为name的键

dic1={‘name’:’laowang’,’age’:’18’}

del dic1[‘name’]

  1. 合并两个字典使用字典的成员方法 update()

dic2.update(dic1)

print(dic2)

17.11  python实现列表去重的方法?

第一种方式

#encoding = utf-8

import time

time_start=time.time()

print u"列表去重的七种方法"

prnt u"第一种测试方法"

repeat_list=[1,2,4,1,5,1,2,5]

result=[]

for i in repeat_list:

if i not in result;

result.append(i)

print u"第一种去重结果", result

第二种方法:

repeat_list=[1,2,4,1,5,1,2,5]

print u"第三种去重结果",list(set( repeat_list))

17.12  python内建数据类型有哪些?

整型 -- int

布尔型 -- bool

字符串 -- str

列表 -- list

元组 -- tuple

字典 -- dict

17.13  列出 python中可变数据类型和不可变数据类型并简述原理?

1) 可变数据类型列表list和字典dict;

2) 不可变数据类型整型int、浮点型float、字符串型 string和元组 tuple

"python中的不可变数据类型不允许变量的值发生变化如果改变了变量的值相当于是新建了一个对象而对于相同的值的对象

在内存中则只有一个对象内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型允许变量的值发生变化即如果对变量进行 append、+=等这种操作后

只是改变了变量的值而不会新建一个对象变量引用的对象的地址也不会变化不过对于相同的值的不同对象在内存中则会存在不同的对象即每个对象都有自己的地址

相当于内存中对于同值的对象保存了多份这里不存在引用计数是实实在在的对象。

17.14  如何将字符串转换为小写?

S = "What is Your Name?"

print(s.lower())  #返回小写字符串

print(s.upper()) #返回大写字符串

print(s.capitalize()) #字符串首字符大写

print(s.title()) #每个单词的首字母大写

pint(s.swapcase()) #大小写互换

17.15  现场出了一个100-10000之间打印出各位数字相加能被15整除的整数每行打印十个

def chu(strum,endnum)

sum = 0

for i in range(strum,endnum):

if i%15 == 0;

sum=sum+1

print(i’,’)

if sum%10==0

pint(‘/n’)

17.16  然后现场出了一个 Python题目1689年到2019年打印出所有的闰年

for i in range(20002501):

if i%4==0 and i%100!=0 or i%400==0;

print(i)

17.17  打印九九乘法表

def print99():

for i in range(1,10): #i=0表示打第1行  i=1表示打第2行  i=2表示打第3行

for j in range(1,i+ 1):

print(‘%d*%d=%d\t'%(j,i,i*j)end="")

#换行

print(‘’)

17.18  冒泡排序

list=[2,1,6,3,8]

def bubble_sort(list);

for i in range(0,len(list)-1):

for j in range(0,len(lists)-i-1):

if list[j] > list[j+1];

list[j],list[j+1] = list[j+1],list[j]

return list

另外自带函数排序 list.sorto    默认升序排列

list.sort(reverse=True)  降序排列

17.19写一个程序进行货币间币值转换函数

说明其中人民币和美元间汇率固定为:

1美元=678人民币。程序可以接受人民币或美元输入转换为美元或人民币输出。

人民币采RMB表示美元采USD表示符号和数值之间没有空格

示例输入USD1  输出RMB6.78

while 1:

xuanze= int(input("请选择1美元转化为人民币\t2.人民币转化为美元\t3结束"))

if xuanze == 1:

USD = float(input("输入美:USD: "))

if USD < 0:

print("你输入的数小于0")

break

usd_rmb = USD * 6.78

print("输入:USD:1  输出:RMB:%f" %(usd_rmb))

elif xuanze ==2;

RMB= float(input(输入人民币RMB"

if RMB <0;

print("你输入的数小于0")

break

rmb_usd= RMB/6.78

print(输入:RMB:1 输出:USD:%f" %(%usd_rmb))

elif xuanze ==3;

break

else;

print("没有选择美元或人民币")

except;

print("你输入错误请输入数字")

17.20  回文数

num = input(‘Num:’)

if num == num[::-1];

print("回文数")

else:

print(不是)

17.21  python中生成随机整数、随机小数、0-1之间小数方法

import random

#生成1到100之间的随机整数

print(random.randint(1,100))

#生成0-1之间随机的小数

print(random.random())

#生成随机小数 randn(3)代表生成三个

print(np.random.randn(3)

17.22  fixture装饰器的作用与默认值

可以使用此装饰器(带或不带参数)来定义 fixture功能。 fixture功能的名称可以在以后使用引用它会在运行测试之前调用它test模块或类可以使用 pytest.mark.usefixtures

fixturename标记。测试功能可以直接使用 fixture名称作为输入参数在这种情况下夹具实例从 fixture返回功能将被注入。

17.23  如何进行异常处理

try:

执行脚本代码

except

脚本运行失败执行代码

断言错误(AssertionError)

其他类型错误(Exception)

else:

没有错误执行的代码

finally:

不管运行成功与否都运行的代码

17.24  类的继承与多态意思

1. 子类继承父类所有的方法

2. 父类不能继承子类

3. 子类再去修改父类里面的方法子类都是新的方法(多态)

17.25 json与字典的区别?

区别总结

定义上字典是一种数据结构;

json是一种数据的表现形式一种数据格式。

写法上字典中的键key只要是 hashable的数据类型即可;

但是json的键key(属性名称)必须是用双引号引起来的字符串。

17.26  如何获取字典中的所有键?

我们可以直接遍历这个字典用keys()函数取出所有的键

如果说要取出字典中所有的键和对应的值我们用items()函数

十八、白盒测试

18.1 白盒测试怎么测

原来工作中没有涉及过但是了解过

1、静态扫描

2、动态检查构造测试数据去检查语句覆盖---覆盖所有的代码

3、判定覆盖覆盖每个判定条件每个判定都需要   真假值

4、条件覆盖每个条件  都需要一个真假值

5、判定/条件覆盖

6、组合覆盖条件之间的组合场景   ---重点

7、路径覆盖----后面黑盒流程分析法   ---重点

十九、持续集成

19.1   jenkins + ant + jmeter + svn接口自动化测试?

jenkins + ant + jmeter + svn环境搭建

原来这个环境是我这边搭建的

主要是几个步骤

第一 Jenkins安装、第二ant安装、第三 jmeter安装、第四 jmeter与ant连接

第五Sn安装、第六任务的构建

首先我们要确定jdk已经安装好了jdk安装可以下载jdk包配置环境变量就行

再 jenkins搭建原来我们是用yum安装命令 yum install -y jenkins安装 jelkins

如果yum安装不能进行yum仓库添加 jenkins连接信息

或者就用下载安装包进行安装

ant安装我们可以百度去下载

像原来我们这边一般会把常见安装包文件执行我都会保存一个安装文档

当下载ant安装包以后只需要解压并且配置环境就可以了

jmeter安装也是先下载安装包把安装包导入到linux服务器解压配置环境变量就ok了

jmeter跟ant连接主要是配置 build.xml的文件

文件目录放在 jmeter目录下build文件主要是配置,

jmeter的路径保存生成html跟jtl报告的路径还运行jmx脚本的路径

把 jmeter文件 ant-jmeter-1.1.1.jar放在ant目录下

把 jmeter-results-shanhe-me.xsl上传至 jmeter安装目录的 extras文件夹下

也要配置 jmeter.properties文件把输出结果由csv修改成xml

配置完成后我们可以用 ant run运行调试下能否运行脚本成功

svn服务器安装原来已经安装好

安装通过yum安装到服务器里面建立资源库配置里面配置文件添加用户修改权限再通过,

svnserve -d -r /data/svn/启动服务器同时我们要考虑防火墙是否允许访问或者关闭防火墙

jenkins任务的构建

在jmeter系统配置中先要添加环境变量主要是jdk的路径ant的路径(linux服务器里面的路径)

添加2个插件一个 html publisher pulin主要生成HTML报告一个 performance

pgn运行 jmeter脚本生成jtl报告

再构建一个任务

在任务中

丢弃旧的构建

再源码管理配置svn服务器路径导出文件位置还有svn用户与密码

配置生成jtl报告的位置

配置生成html报告的位置

配置定时构建原来我们设置设置半个月跑一次

还配置邮件发送( jenkins系统配置配置邮件服务器地址)

原来我们持续集成是半个月运行一次当然我们也可以手动构建

1我们一般把写完的jmeter的脚本

2通过svn把写好的脚本检入到svn服务器

3在 jenkins任务下选择定时构建或者手动构建检出svn上传最新脚本去运行一般我们项目在修改新的功能模块上线转测之前都会自动去运行脚本。

运行完成我们再 jenkins下查看脚本运行结果。

19.2  jenkins如何使用?

原来我们主要是用来持续构建环境还有我们的自动化脚本的运行

比如说 jmeter接口自动化脚本

原来我们 jmeter脚本运行在 jenkins里面首先先建立一个任务再从svn服务器中导出jmx脚本设置定时器原来我们都是早上B点钟自动运行构建 ant run运行后面添加生成的html根告跟jtl报告运行完成后我们进行邮件提醒我们只需要查看邮件直看运行结果就ok出现了问题我再去找开发修复问题。

后续我们编写完成的接口自动化脚本只需要通过svn检入到svn服务器即可就会每天定时去运行查看结果就好。

比如说 pytest框架自动化脚本

也是构建一个任务设置源码管理从svn导出源码原来我们都是手工构建没有建立定时任务执行shell命令 python pytest -m测试用例的路径

设置生成allure报告建立邮件提醒后面的工作当中如果要运行 pytest框架编写脚本

只需要通过svn把代码导入到svn服务器手工构建运行完成后发送邮件提醒运行结束如果有错误可以在 jenkins平台里面去查看allure报告。

搭建环境这块原来不是我做的大概的流程。

原来我们构建测试环境先建一个任务源码管理从svn服务器导出源码进行构建运行she令包的解压跟替换重启服务建立一个邮件提醒。后期每次需要提测或者转测的时候只需要去手动构建这个任务即可。里面还有一些dev环境部署线上环境部署但是一般我们测试就没有怎么操作但是原理都是一样。

二十、场景问题

20.1  有没有抓过包为什么要抓包具体怎么做的?

抓包这块其实我们在工作用得是比较多的一般我们都在测试过程碰到问题我们有的候通过抓包去看一下前端与后台的数据交互通过分析这个数据来定位到底是前端问题还是后台问题。

主要用的就是 fiddler工具如果只是抓取Web端数据的话只要在浏览器上设置代理服务器指定代理服务器为本地的fiddler这个工具设置好端口8888 就可以了如果要抓取手机端的包首先需要保证手机与电脑(安装了 fiddler的这个电脑)在同一个网络在手机上要设置http代理服务器为手动然后服务器指定为电脑的ip地址端口设置为8888

例外如果要抓取https包可能还需要在电脑上安装证书手机端这边也要安装证书差不多这样就可以。

20.2  为什么要进行抓包?具体怎么分析的?

主要是我们在测试过程中出现Bug的时候为了定位问题分析问题需要抓取前端后台的数据交互过程通过看数据从而来分析到底是前端问题还是后台问题

分析这块的话

1、首先看发的请求是否有问题请求的接口url是否有错误参数是否有错误如果url或传参有问题那就是前端Bug

2、如果请求没有问题看下后台返回的数据是否有问题状态码5开头的基本都是后台问题状态码为200响应数据与预期不一致那也是后台Bug不过这里有可能是数据库问题也有可以是后台代码问题这里首先我一般会查看下数据库的数据如果数据库没有问题那就需要查看下后台的日志文件具体分析下看是后台代码哪里出问题了然后把日志信息信息截图给开发

3、返回的数据没有问题请求参数u也没有问题那可能是前端代码是否转换有问题那就是前端Bug

20.3  大概给我讲下抓包的原理?

其实就是把 fiddler设置为代理服务器那么浏览器上发出所有请求都由 fiddler这个工具来代理转发其实就是说通过fiddler来拦截客服端与服务端之间的数据交互这样我们可以拦截到客户端给服务器发了什么数据服务器给客户端响应了什么数据然后对数据进行分析。

20.4  给你一个需求你具体讲下你怎么测试?

第一点首先我要熟恶这个需求的背景这个需要功能我至少要知道这个需求做的是什么吧做的 是一个什么样的解决方法这个要搞清楚。

第二点这些搞清楚看这个需要和其他模块有哪些交互需不需要关联起来分析有没有影响到其 他模块或者数据有没有流向其他模块。

第三点这些都清楚了那么我会根据熟悉的情况看下工作量哪个时间点交付在这个时间点我需 要做一个计划给老大说下如果时间充分一个人能搞定那么就一个人搞定搞不定我 会向老大申请人力。其实接下来也差不多了分析需求尽量要评审在前期就保证好质量 如果没有问题。其他也就是用例实例化执行啊bug跟踪啊等最后出个报告就好了。

基本我做的活会这么做主要看你在最短时间把需求吃透做好计划展开工作。

20.5  给你一个项目你怎么展开工作请详细说一下你具体怎么做的

面试官考的点进我公司给你一个项目你怎么做看你有没有独立做项目能力

第一点首先我要熟悉这个项目的背景我至少要知道这个项目做的是什么吧做的是一个什么样的 解决方法这个要搞清楚

第二点这些搞清楚那么必须要清楚这个项目的核心模块和业务我们给这个模块做一个优先级 先测试哪些核心模块再做哪些模块

第三点根据刚刚信息我会熟悉这个业务这个业务相关模块以及写数据前后台交互等

第四点这些都熟恶了那么我会根据熟悉的情况看下工作量哪个时间点交付在这个时间点我需 要做一个测试计划一般需求分析的话根据我的经验基本2天差不多了编写用例时间执行时 间bug修复时间我会做一个工作量评估如果还有其他测试我会把这个计划发给大家让 大家评审这个计划和安排看安排是否合理大家能不能在这个计划时间段完成基本需求分析 等多给个2天左右那么大家要再这个时间段完成完成后我会安排大家讲解需求做需求评审 和需要讲解前期时间多投入点后面风险小一点这个我主要跟进下进度就行。

第五点那么接下来大家按照计划去编写用例用例在时间点完成后我会组织大家评审这个两 个我必须把控减少后面测试风险前面分析和用例把握到位后续执行和bug这块不会有太多 问题后续的话那么大家执行就行我主要跟进这个进度每天大家bug解决情况以及测试进 度做成日报像些问题不好解决的有问题的我去协助那么测试完成后我会收集大家测试 数据做一份测试报告这个我会评估这个测试有没有风险没有的话发送给开发老大开发 所有人测试所有人。这块评审下后续组织测试人员安排上线我基本是这么做的

20.6  项目快上线因为开发延迟测试时间被压缩怎么做

[开发延期完成产品还需如期上线测试需怎么办

首先看下自己还剩下多少时间然后要评估工作量评估下风险比如说可能我根本做不完风险太大那么这个我首先要把风险提出来给对应的领导那么我会要求有人协助我完成需要多少人力来完成

如果只是说正常时间完不成那么我可以提下加班看加班这个时间段能否完成如果可以我会和老大商量提出加班计划。

如果是其他的先跟领导确认比如说我只需要把优先级高的工作完成其他工作可以安排到下一个版本去做那么我就做个计划把计划个老大说下。

20.7  如果时间比较紧的话你怎么安排你的工作

首先要评估下风险比如说可能我根本做不完风险太大那么这个我首先要把风脸提出来给对应的领导那么我会要求有人协助我完成需要多少人力来完成

如果只是说正常时间完不成那么我可以提下加班看加班这个时间段能否完成如果可以我会和老大商量提出加班计划

如果是其他的比如说我只需要把优先级高的工作完成其他工作可以安排到下一个版本去做那么我就做个计划把计划个老大说下。

20.8  返回数据现在有问题怎么排查问题?

这个可能需要抓包首先抓包看下前后台的数据交互情况确认下是不是前端请求发送有问题导致返回数据有问题。如果是请求有问题那提Bug给前端让前端修复

如果请求没有问题与接口文档对比查看下返回数据具体是哪里出问题了这里还得首先查看下数据库看是不是数据库中本身数据就有问题如果数据库数据没有问题那可能是后台代码问题这个时候可以查看下后台的日志文件通过分析日志文件的错误信息排

查具体什么原因导致问题出现

20.9  有时候下订单成功有时候下单失败是什么原因

对于订单成功和失败的情况各自去抓包把两次抓取的数据来做对比分析原因

1、假如发送的请求不同那肯定是前端问题

2、假如是返回数据不同那基本判定是后台代码出了问题这时候可以去看日志看数据库把这些信息提交给开发处理也可能是网络问题没发出去的。

20.10  APP出现崩溃时怎么抓取日志

# adb logcat android studio logcat

这种情况我肯定要去看手机端的日志去分析崩溃日志通过 adb logcat去直看日志

根据崩溃时间段去查找这个时间段日志去查看是否有 ErrorExceptionCrashOOM等显

现分析日志不懂的可以百度查看下原因然后发给开发处理。

20.11  微信里面如果大家都看不到你发的朋友圈信息分析下什么原因

1、A删除了那条朋友圈信息

2、A屏蔽了所有好友查看自己的朋友圈

3、如果没有屏蔽多发几条看看如果发的所有朋友圈好友都看不到

也可能是微信后台出问题了或者A的微信账号有异常等等

不过这种情况不太可能。

20.12  微信里面如果只是B看不到其他朋友都可以看到分析下什么原因

1、B把A拉黑了

2、A把B拉黑了

3、B设置了不查看a的朋友圈

4、A设置了屏蔽B看到自己的朋友圈或者A屏蔽了自己所有的朋友圈

5、A删除了那条朋友圈信息

6、A设置了只展示某个时间段的朋友圈信息

7、B根本就不是A的微信好友

20.13  你测试数据是从哪里获得?怎么获得的假如不告诉你你怎么处理?

(1) 一般都是我们测试人员在测试过程自己造的测试数据如果大量数据我们可以用到存储过程

(2) 也可以让运维人员帮忙从生产环境导出相关的测试数据如果测试数据中涉及安全性的数据直接是不能导出

二十一、测试经理管理

21.1  员工的绩效考核量化标准

1、考勤任务完成率失效完成满意度用例编写量提交bug量线上问题

2、新的任务完成新技术研究对团队的贡献

21.2  你组内有一个技术比你牛逼年轻的组员不服你你会怎么处理

不要开除他首先要认可他的能力跟员工沟通自身要有宽容之心看下自身的不足以及

需要提升的方面技术方向管理的能力等等看下他为什么不服的尽量做到让他服你

21.3  你的组员提交的bug开发不认同而吵起来了你怎么处理

如果是我的组员跟开发因为提交的bug争吵的时候我首先会先稳定下他们的情绪先跟测试沟通为什么吵起来沟通的时候要先扬后抑不好的地方的话指出来。确定问题这边具体是什么原因如果是测试这边的问题就让测试员把自己的问题处理掉当然开发这边也是需要沟通的说明争吵是不对的主要是将冋题说明清楚如果是测试问题可以说明测试这边的问题如果是开发这边的问题我会指出开发错误的地方。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“【10w字】超详细【百分百拿offer】的面试教程,集合5000多家软件测试公司面试题。” 的相关文章