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

【蚂蚁金服】

一、自我介绍

二、Tcp和udp:

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

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

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

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

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


三、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的连接关闭了,也就是被动方不能再发送数据给主动方


四、Dns的作用

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

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

1、接口

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

2、抽象类

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


六、怎么理解测试这项工作的

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


七、Qtp怎么使用的

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

执行计划的步骤

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

增强测试脚本

执行测试

分析测试结果

https://www.cnblogs.com/xiezhidong/p/6784684.html


八、写测试用例

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


九、Linux

常用命令:


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

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

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

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

编写测试的过程:

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

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

运行TestNG

注:TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试

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

3、注解:

@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

 

十二、事务(DB)

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

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

事务

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

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

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

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

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

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

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

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

 


十三、假如你现在来测试登陆这个模块的话,你怎么测试

(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. 是否有埋点接口

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

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

1、质量管理

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

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

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

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

2、质量保证

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/languolan/article/details/81357226