请你回答一下什么是α测试和β测试,以及什么时候用到他们
- α测试:在受控的环境中进行,由用户在开发者的场所进行,并且在开发者对用户的指导下进行测试,开发者负责记录发现的错误和使用中遇到的问题
- β测试:在开发者不能控制的环境中的真实应用,由软件的最终用户们在一个或多个客户场所下进行,由用户记录在测试中遇到的一系列问题,并定期报给开发者。
单元测试、集成测试、系统测试的侧重点是什么?
- 单元测试是在软件开发过程中要进行的最低级别的测试活动,测试重点是系统的模块,包括子程序的正确性验证等。
- 集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。测试重点是模块间的衔接以及参数的传递等。
- 系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。测试重点是整个系统的运行以及与其他软件的兼容性。
你觉得软件测试的核心竞争力是什么
- 核心竞争力在于提早发现问题,并能够发现别人无法发现的问题。
- 1、早发现问题:问题发现的越早,解决的成本越低。如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。
- 2、发现别人无法发现的问题:所有人都能发现的问题,你发现了,那就证明你是可以被替代的。别人发现不了,而你可以发现,那么你就是无法被替代。
请你对吃鸡游戏进行压力测试
一.首先明确需要测试压力的内容:
1.游戏服务器硬件
- a.硬盘I/o b.内存 c.CPU
2.网络压力
- a.长连接
- a1.最大连接数
- a2.流量(内网、外网、进、出)
- b.长连接短周期(类似Http的TCP应用,这个比较特殊的一个需求,专门针对LoginAgent)
- b1.每秒建立的连接数
- b2.实际处理能力
3.数据库
- a.每秒事务数 b.每秒锁等待数 c.平均延时(ms) d.CPU暂用
4.多线程的最优线程数
- a.数据库执行的多线程 b.多连接处理
请你根据微信登录界面设计测试用例
参考回答:
一、功能测试
- 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。
- 输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。
- 登录成功后能否能否跳转到正确的页面
- 检查能否选择不同登录方式进行登录,如使用手机号登录、使用微信号登录或扫码登录。
- 记住用户名的功能
- 登陆失败后,不能记录密码的功能
- 密码是否非明文显示显示,使用星号圆点等符号代替。
- 有验证码时,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色、刷新或换一个按钮是否好用
- 登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确
- 输入密码的时候,大写键盘开启的时候要有提示信息。
- 什么都不输入,点击提交按钮,检查提示信息。
二、界面测试
- 布局是否合理,testbox和按钮是否整齐。
- testbox和按钮的长度,高度是否复合要求。
- 界面的设计风格是否与UI的设计风格统一。
- 界面中的文字简洁易懂,没有错别字。
三、性能测试
- 打开登录页面,需要的时间是否在需求要求的时间内。
- 输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。
- 模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。
四、安全性测试
- 登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)。
- 用户名和密码是否通过加密的方式,发送给Web服务器。
- 用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证。
- 用户名和密码的输入框,应该屏蔽SQL注入攻击。
- 用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)。
- 防止暴力破解,检测是否有错误登陆的次数限制。
- 是否支持多用户在同一机器上登录。
- 同一用户能否在多台机器上登录。
五、兼容性测试
- 不同移动平台或PC环境下下能否显示正常且功能正常
- 同种平台下不同微信版本下能否显示正常且功能正常。
- 不同的分辨率下显示是否正常。
请问你遇到过哪些印象深刻的bug,接口测试出现bug的原因有哪些?
在用jmeter测试上传一张图片的时候,具体解释:
接口测试常见的bug有以下几个:
- 特殊值处理不当导致程序异常退出或者崩溃
- 类型边界溢出,导致数据独处和写入不一致
- 取值边界外未返回正确的错误信息
- 权限未处理,可以访问其他用户的信息
- 逻辑校验不完善,可以利用漏洞获取非正当利益
- 状态处理不当,导致逻辑出现错误
- 数组类型item个数为0或者item重复时程序异常退出
你在做项目中有做过压力测试吗,怎么做
参考回答:
1、首先对要测试的系统进行分析,明确需要对那一部分做压力测试,比如秒杀,支付
2、如何对这些测试点进行施压
第一种方式可以通过写脚本产生压力机器人对服务器进行发包收报操作
第二点借助一些压力测试工具比如Jmeter,LoadRunner
3、如何对这些测试点进行正确的施压
需要用压力测试工具或者其他方法录制脚本,模拟用户的操作
4、对测试点设计多大的压力比较合适?
需要明确压力测试限制的数量,即用户并发量
5、测试结束后如何通过这些数据来定位性能问题
通过测试可以得到吞吐量,平均响应时间等数据,这个数据的背后是整个后台处理逻辑综合作用的结果,这时候就可以先关注系统的CPU,内存,然后对比吞吐量,平均响应时间达到瓶颈时这些数据的情况,然后就能确认性能问题是系统的哪一块造成的
对于有系统大量并发访问,你会如何做测试,有什么建议
如何做高并发系统的测试,一般而言,整体的测试策略是:先针对部分系统进行性能测试及压力测试,得到各部分的峰值处理性能,再模拟整体流程测试,重点测试整体业务流程以及业务预期负荷,着重测试以下几点:
- 不同省份,不同运营商CDN节点性能,可采用典型压力测试方案
- 核心机房BGP网络带宽,此部分重点在于测试各运行商的BGP网络可靠性,实际速率,一般采用smokeping,lxChariot等工具
- 各类硬件设备性能,一般采用专业的网络设备测试工具
- 各类服务器并发性能,分布式处理能力,可采用压力测试方案工具
- 业务系统性能,采用业务系统压力测试方案
- 数据库处理性能,这部分需要结合业务系统进行测试,以获取核心业务场景下的数据库的TPS/QPS,
- 如果有支付功能,需要进行支付渠道接口及分流测试,此部分相对而言可能是最大的瓶颈所在,此外还涉及备份方案,容灾方案,业务降级方案的测试。
请你回答一下常用到的shell指令中与网络相关的有哪些,netstat、ping、ifconfig这三个的区别,分别是什么功能,netstat里面一般服务器启动后的端口状态是什么
常用的网络相关的命令有以下几个:
1、ifconfig
这个命令用于显示网络接口,子网掩码
2、host和nslookup
这两个命令是DNS查找工具,当执行host时,会列出某个域名的所有ip,nslookup是一个类似于host的命令,它用于查询DNS相关的细节信息,以及名字解析
3、route
显示路由表
4、traceroute
这个命令显示分组途径的所有网关地址
netstat、ping、ifconfig这三个的区别:
netstat:显示网络状态,利用netstat可以让你得知整个Linux系统的网络情况,语法为netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
ping:功能是检测主机,因为执行ping命令会使用icmp传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常,语法为:ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址
ifconnfig:功能是显示或设置网络设备,其语法为:ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
服务器启动后一般为listening状态
请问你知道跨域吗,条件是什么,在header里需要加什么,有几种方案
什么是跨域?
- 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域
跨域的几种方案:
- 基于script标签实现跨域
- 基于jquery跨域
- 通过iframe来跨子域
从打开浏览器输入url到到达服务器上项目中某一个Controller上,请你来描述一下这一串过程
这个过程中发生了网络通信,即利用tcp/ip协议簇进行网络通信,发送端由应用层往下走,接收端由数据链路层往上走,步骤如下:
- 浏览器输入url,其中http是协议
- 应用层DNS解析,返回对应的ip地址
- 应用层客户端发送http请求,
- 网络层ip查询mac地址,
- 传输层tcp传输报文
- 数据到达数据链路层,此时客户端发送请求结束
- 服务器在数据链路层收到数据包,再层层下上直到应用层,
- 服务器响应请求,查找客户端请求的资源并返回响应报文
请你写一下mysql删除语句
1.drop语句。可以用来删除数据库和表。
- 用drop语句来删除数据库:drop database db;
- 用drop语句来删除表:drop table tb;
2.delete语句。用来删除表中的字段。
- delete from tb where id=1;
- 如果delete语句中没有加入where就会把表中的所有记录全部删除:
3.用truncate来删除表中的所有字段:
- truncate table tb;
请你写一些基本的SQL语句
- 选择:select * from table1 where 范围
- 插入:insert into table1(field1,field2) values(value1,value2)
- 删除:delete from table1 where 范围
- 更新:update table1 set field1=value1 where 范围
- 查找:select * from table1 where field1 like '%value1%' ---like的语法很精妙,查资料!
- 排序:select * from table1 order by field1,field2 [desc]
- 总数:select count as totalcount from table1
- 求和:select sum(field1) as sumvalue from table1
- 平均:select avg(field1) as avgvalue from table1
- 最大:select max(field1) as maxvalue from table1
- 最小:select min(field1) as minvalue from table1
某个表格中有10条一模一样的数据,现在要删掉其中的9条,请你写一下sql语句
delete * from table_name limit
9