蚂蚁金服面试【测试开发】

【蚂蚁金服】javascript

1、自我介绍html

2、Tcp和udp:java

         https://images2015.cnblogs.com/blog/750327/201608/750327-20160822155942292-808499898.png

1.链路层(数据链路层/网络接口层):包括操做系统中的设备驱动程序、计算机中对应的网络接口卡web

2.网络层(互联网层):处理分组在网络中的活动,好比分组的选路数据库

3.运输层:主要为两台主机上的应用提供端到端的通讯编程

4.应用层:负责处理特定的应用程序细节浏览器


3、TCP三次握手和四次分手安全

三次握手服务器

  1. 客户端发送SYN信号,表示告诉服务器,我要创建链接
  2. 服务器返回ACK=1和SYN=1给客户端,表示我已经接收到了客户端的请求,并接收了请求。
  3. 客户端收到来自服务端响应后,知道服务端已经接受链接请求,再次发送ACK给服务器,确认服务端的SYN,其实也就是一个确认的再确认。

四次握手网络

  1. 主动方A发送一个FIN(终止信号)给被动方B,表示要终结主动方A到被动方B的链接;
  2. 被动方B收到了FIN信号,返回ACK信号给主动方,表示从主动方到被动方的链接关闭了,也就是主动方不能再发送数据给被动方。
  3. 被动方B在发送完数据后,给主动方A发送一个FIN信号,请求要终结被动方B到主动方A的链接;

主动方A收到了FIN信号,返回ACK信号给被动方B,表示从被动方B到主动方A的链接关闭了,也就是被动方不能再发送数据给主动方


4、Dns的做用

DNS(Domain Name System,域名系统),万维网上做为域名和IP地址相互映射的一个分布式数据库,可以使用户更方便的访问互联网,而不用去记住可以被机器直接读取的IP数串

DNS系统:经过域名,最终获得该域名对应的IP地址的过程叫作域名解析(或主机名解析),DNS协议运行在UDP协议之上,使用端口号53
5、接口和抽象类的区别

一、接口

接口是抽象方法的集合。若是一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,若是实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能作任何事情

二、抽象类

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用做子类的超类。抽象类是被用来建立继承层级里子类的模板


6、怎么理解测试这项工做的

就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据须要编写不一样的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,须要跟踪故障,以确保开发的产品适合需求。使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否知足规定的需求或弄清预期结果与实际结果之间的差异


7、Qtp怎么使用的

QTP:QuickTest Professional,关键字驱动(如控件)的功能测试工具,可以对各类编程语言开发的软件进行功能测试,能够用VBScript脚本语言编写程序

执行计划的步骤

建立测试脚本:按照计划录制脚本并保存

加强测试脚本

执行测试

分析测试结果

http://www.javashuo.com/article/p-caweufbh-ga.html


8、写测试用例

测试用例主要由8部分构成:所属的模块、名称、编号、等级、描述、预制条件、操做步骤、预期结果


9、Linux

经常使用命令:


10、软件测试里的元素定位

非xPath方式和xPath方式
11、TestNG怎么使用???

一、Selenium是浏览器自动化工具,主要用来Web的自动化测试

TestNG是一个设计用来简化普遍的测试需求的测试框架

编写测试的过程:

编写测试的业务逻辑并在代码中插入TestNG Annotation

将测试信息添加到testng.xml文件或者build.xml中

运行TestNG

注:TestNG设计的出发点,不只仅是单元测试,并且能够用于集成测试。设计目标的不一样,对比junit的只适合用于单元测试

二、测试信息尤为是测试数据再也不写死在测试代码中,好处就是修改测试数据时不须要修改代码/编译了,从而有助于将测试人员引入单元测试/集成测试

三、注解:

@BeforeSuite: 被注释的方法将在全部测试运行前运行
@AfterSuite:被注释的方法将在全部测试运行后运行
@BeforeTest: 被注释的方法将在测试运行前运行
@AfterTest: 被注释的方法将在测试运行后运行
@BeforeGroups: 被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前当即执行。
@AfterGroups: 被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后当即执行。
@BeforeClass: 被注释的方法将在当前类的第一个测试方法调用前运行。
@AfterClass: 被注释的方法将在当前类的全部测试方法调用后运行。
@BeforeMethod: 被注释的方法将在每个测试方法调用前运行。
@AfterMethod: 被注释的方法将在每个测试方法调用后运行。
属性:
@alwaysRun 对于每一个bufore方法(beforeSuite, beforeTest, beforeTestClass 和 beforeTestMethod, 可是不包括 beforeGroups)

若是设置为true,被配置的方法将老是运行而无论它属于哪一个组。

对于after方法(afterSuite, afterClass, ...): 若是设置为true,被配置的方法甚至在一个或多个先调用的方法失败或被忽略时也将运行。
@dependsOnGroups 这个方法依赖的组列表
@dependsOnMethods 这个方法依赖的方法列表
@enabled 这个类的方法是否激活
@groups 这个类或方法所属的分组列表
@inheritGroups 若是设置为true,这个方法被属于在类级别被@Test annotation指定的组
@DataProvider 标记一个方法用于为测试方法提供数据。

被注释的方法必须返回Object[][], 其中每一个Object[]能够指派为这个测试方法的参数列表。从这个DataProvider接收数据@Test方法须要使用一个和当前注释相同名称的dataProvider名称

@name 这个DataProvider的名称
@Factory 标记方法做为一个返回对象的工厂,这些对象将被TestNG用于做为测试类。这个方法必须返回Object[]
@Parameters描述如何传递参数给@Test方法

value 用于填充这个方法的参数的变量列表
@Test 标记一个类或方法做为测试的一部分
@ alwaysRun 若是设置为true,这个测试方法将老是运行,甚至当它依赖的方法失败时
@ dataProvider 这个测试方法的data provider的名称
@ dataProviderClass 用于查找data provider的类。
 若是不指定,将在当前测试方法所在的类或者它的基类上查找data provider。
 若是这个属性被指定, 则data provider方法须要是指定类的static方法。
@ dependsOnGroups 当前方法依赖的组列表
@ dependsOnMethods 当前方法依赖的方法列表
@ description 当前方法的描述
@ enabled 当前类的方法/方法是否被激活
@ expectedExceptions 测试方法指望抛出的异常列表。若是没有异常或者抛出的不是列表中的任何一个,当前方法都将标记为失败.
@ groups 当前类/方法所属的组列表
@ invocationCount 当前方法被调用的次数
@ successPercentage 当前方法指望的成功率
@ sequential 若是设置为true,当前测试类上的全部方法保证按照顺序运行。甚至测试们在parallel="true"的状况下.
@ 这个属性只能用于类级别,若是用于方法级别将被忽略。
@ timeOut 当前方法允许花费的最大时间,单位毫秒。
@ threadPoolSize 当前方法的线程池大小。方法将被多线程调用,次数由invocationCount参数指定

注意:若是invocationCount没有指定则这个属性将被忽略

https://blog.csdn.net/lykangjia/article/details/56485295

 

12、事务(DB)

四大特性:数据库事务(Database Transaction) ,是指做为单个逻辑工做单元执行的一系列操做,要么彻底地执行,要么彻底地不执行。原子性:指事务包含的全部操做要么所有成功,要么所有失败回滚

  1. 一致性:指事务必须使数据库从一个一致性状态变换到另外一个一致性状态,也就是说一个事务执行以前和执行以后都必须处于一致性状态。
  2. 隔离性:当多个用户并发访问数据库时,好比操做同一张表时,数据库为每个用户开启的事务,不能被其余事务的操做所干扰,多个并发事务之间要相互隔离。
  3. 持久性:指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即使是在数据库系统遇到故障的状况下也不会丢失提交事务的操做。

事务

不考虑事务的隔离性,会发生的几种问题:

  1. 脏读:指在一个事务处理过程当中读取了另外一个未提交的事务中的数据
  2. 不可重复读:指在对于数据库中的某个数据,一个事务范围内屡次查询却返回了不一样的数据值,这是因为在查询间隔,被另外一个事务修改并提交了
  3. 虚读(幻读)

事务非独立执行时发生的一种现象。例如事务T1对一个表中全部的行的某个数据项作了从“1”修改成“2”的操做,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值仍是为“1”而且提交给数据库。

MySQL数据库为咱们提供的四种隔离级别:

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何状况都没法保证

 


十3、假如你如今来测试登录这个模块的话,你怎么测试

(1)基本功能测试点

  1. 输入正确的用户名和密码登陆成功
  2. 输入错误的用户名密码登陆失败
  3. 用户名正确,密码错误,是否提示输入密码错误?
  4. 用户名错误,密码正常,是否提示输入用户名错误?
  5. 用户名和密码都错误,是否有相应提示?
  6. 用户名密码为空时,是否有相应提示?
  7. 若是用户未注册,提示请先注册,而后进行登陆
  8. 已经注销的用户登陆失败,提示信息友好?
  9. 密码框是否加密显示?
  10. 用户名是否支持中文、特殊字符?
  11. 用户名是否有长度限制?
  12. 密码是否支持中文,特殊字符?
  13. 密码是否有长度限制?
  14. 密码是否区分大小写?
  15. 密码为一些简单经常使用字符串时,是否提示修改?如:123456
  16. 密码存储方式?是否加密?
  17. 登陆功能是否须要输入验证码?
    1. 验证码有效时间?
    2. 验证码输入错误,登陆失败,提示信息是否友好?
    3. 输入过时的验证可否登陆成功?
    4. 验证码是否容易识别?
    5. 验证码换一张功能是否可用?点击验证码图片是否能够更换验证码?
  18. 用户体系:好比系统分普通用户、高级用户,不一样用户登陆系统后可的权限不一样。
  19. 若是使用第三方帐号(QQ,微博帐号)登陆,那么第三方帐号与本系统的帐号体系对应关系如何保存?首次登陆须要极权等

(2)页面测试

  1. 登陆页面显示是否正常?文字和图片可否正常显示,相应的提示信息是否正确,按钮的设置和排列是否正常,页面是否简洁壮观等。
  2. 页面默认焦点是否认位在用户名的输入框中
  3. 首次登陆时相应的输入框是否为空?或者若是有默认文案,当点击输入框时默认方案是否消失?
  4. 相应的按钮如登陆、重置等,是否可用;页面的前进、后退、刷新按钮是否可用?
  5. 快捷键Tab,Esc,Enter 等,可否控制使用
  6. 兼容性测试:不一样浏览器,不一样操做系统,不一样分辨率下界面是否正常

(3)安全测试

  1. 不登陆:浏览器中直接输入登陆后的地址,看是否能够直接进入
  2. 登陆成功后生成的Cookie,是不是httponly (不然容易被脚本盗取)
  3. 用户名和密码是否经过加密的方式,发送给Web服务器 
  4. 用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
  5. 用户名和密码的输入框,应该屏蔽SQL 注入攻击
  6. 用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
  7. 错误登录的次数限制(防止暴力破解)
  8. 考虑是否支持多用户在同一机器上登陆;
  9. 考虑一用户在多台机器上登陆
  1. 性能测试
  1. 单用户登陆系统的响应时间是否符合"3-5-8"原则
  2. 用户数在临界点时并发登陆是否还能符合"3-5-8"原则
  3. 压力:大量并发用户登陆,系统的响应时间是多少?系统会出现宕机、内存泄露、cpu饱和、没法登陆吗?
  4. 稳定性: 系统可否处理并发用户数在临界点之内连续登陆N个时的场景?
  1. 其余测试
  1. 连续输入3次或以上错误密码,用记是否被锁必定时间(如:15分钟)?时间内不容许登陆,超出时间点是否能够继续登陆。
  2. 用户session过时后,从新登陆是否还能从新返回这前session过时的页面?
  3. 用户名和密码输入框是事支持键盘快捷键?如:撤销、复制、粘贴等等
  4. 是否容许同名用户同时登陆进行操做?考虑web和app同时登陆
  5. 手机登陆时,是否先判断网络可用?
  6. 手机登陆时,是否先判断app存在新版本?
  7. 是否支持单点登陆?
  8. 是否有埋点接口

十4、你是测试工程师,如何保证软件的质量

从两个角度:1.质量是全员质量,公司每一个成员都有责任参与质量保证。2.从测试角度来保证质量,测试也分为多个层次。

一、质量管理

(1)代码质量:开发经过单元测试保证

(2)让用户参与UAT测试,保证用户体验(使用质量)

(3)引入QA,保存过程环节质量

(4)系统测试工程师保证系统质量知足需求

二、质量保证

(1)测试策略:质量是多维度的,功能测试、性能测试、兼容性测试等多种测试类型的结合

(2)用例质量:采用合适的用例方法,如何进行需求分析,用例评审

(3)执行质量:如何保证执行深度(界面、关联模块、数据库、日志)与广度(系统测试类型

(4)缺陷质量:Bug评审,引入合适的Bug流程

(5)过程质量:合理的软件测试流程,测试过程监控