测试常问题

1、白盒测试和黑盒测试

白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,
常见的白盒测试的方法有:语句覆盖,条件覆盖,判定覆盖,条件组合覆盖,基本路径覆盖等等。
优点:可以检测代码的每条分支和路径;可以揭示隐藏在代码中的错误;对代码的测试比较彻底。
缺点:耗费比较大;不能检测到代码中遗漏的逻辑;不能直接验证需求的正确性。
黑盒测试也称功能测试或数据驱动测试,它不看代码内部的逻辑,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
常见方法有等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
优点:容易实施,不需要关注内部实现;贴近用户需求。
缺点:覆盖率比较低,因为不知道内部逻辑

2、性能测试关注点

指标:响应时间(RT)、每秒能完成的响应数(TPS)、CPU利用率、内存占用、网络(带宽使用率)、手机app的话还考虑耗电量……
考虑负载加大时,各项指标如何变化,联网的考虑各种不同的网络环境(正常网、超快网、网速慢、断网)时指标的变化

3、压力测试关注点

并发用户数和在线用户数的区别
在线用户数:用户同时在一定时间段的在线数量
并发用户数:某一时刻同时向服务器发送请求的用户数
(在线用户只要在线就好了,并发用户计算的是和服务器有交流的用户,一般比例5%-20%)

4、单元测试中的驱动模块和桩模块区别?

在这里插入图片描述
驱动模块:模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启用被测模块,并打印出相应的结果。如上图,被测模块为B,而A模块里面包含main函数能够调用B模块,让B模块运行起来,模拟A模块属于驱动模块。
桩模块:模拟被测试模块所调用的模块,即为上图模块D,E,除了使得模块B能够编译通过之外,还需要模拟返回被代替的模块的各种可能返回值。
(考点mock)

5、集成测试

集成测试的主要任务:

  1. 将各模块连接起来,检查模块相互调用时,数据经过接口是否丢失;
  2. 将各个子功能组合起来,检查能否达到预期要求的各项功能;
  3. 一个模块的功能是否会对另一个模块的功能产生不利的影响;
  4. 全局数据结构是否有问题,会不会被异常修改;
  5. 单个模块的误差积累起来,是否被放大,从而达到不可接受的程度。

6、Web和app测试的区别

web和app的区别:
1、web是b/s架构的,基于浏览器;app是c/s架构的,必须要有客户端。Web测试中只要更新了服务器,客户端就会同步更新,保证每个用户用的客户端一样;app就不能保证完全一致,因为app客户端需要用户主动更新,如果app测试中修改了服务器,就意味着客户端用户使用的所有核心版本都要进行回归测试
2、性能方面:web主要看响应速度;app还看电量、流量、CPU、内存…
3、兼容方面:web基于浏览器,主要看电脑硬件、电脑系统;app依赖于手机或平板,关注的系统主要是安卓和ios,还要关心分辨率、屏幕尺寸
4、App比web测试多一些专项测试:弱网测试,安装、卸载、更新,界面操作、触摸手势等

7、Android中造成APP闪退的原因总结

• 弱网络情况下,服务端响应不及时,可能倒是闪退。(网络异常引起的)
• 应用版本太低,会导致不兼容,造成闪退。(有些API在老版本中有,在新版本中没有,造成对象为空引起闪退)
• APP的SDK和手机的系统不兼容。
• 缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件。会导致越来越卡,也会出现闪退情况。
• 设计不合理,1个接口,拉取的数据量太大,请求结果会很慢,且占用大量内存,APP会闪退(比如,我们现在做的记录仪,进入相册列表时候,要拉取所有图片,拉取太慢了,就闪退了)
• 不同APP间切换,交互测试,可能会出现闪退。
• 权限问题。

8、unittest框架

使用 unittest 的标准流程为:

  1. 从 unittest.TestCase 派生一个子类
  2. 在类中定义各种以 “test_” 打头的方法
  3. 通过 unittest.main() 函数来启动测试

(1)unittest 的一个很有用的特性是 TestCase 的 setUp() 和 tearDown() 方法,它们提供了为测试进行准备和扫尾工作的功能,听起来就像上下文管理器一样。这种功能很适合用在测试对象需要复杂执行环境的情况下。
(2)调用 assertEqual() 来检查预期的输出;
调用 assertTrue() 或 assertFalse() 来验证一个条件;
调用 assertRaises() 来验证抛出了一个特定的异常。

import unittest

class TestStringMethods(unittest.TestCase):
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())
    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)
if __name__ == '__main__':
    unittest.main()

(3)unittest 模块可以通过命令行运行模块、类和独立测试方法的测试:
python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method

集成测试策略(了解)

1)大爆炸集成
优点:可以迅速完成集成测试;并且只要极少数的驱动和桩模块;用例也是最少的;简单;资源利用率高
缺点:一次试运行成功的可能性不大,问题定位和修改比较困难,许多接口错误很容易躲过测试。
适应于一个维护型项目或被测试系统较小
2)自顶向下集成
优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。
缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。
适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
3)自底向上集成
优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。
缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。
4)三明治集成
优点:集合了自顶向下和自底向上两种策略的优点
缺点:中间层测试不充分
适应于大部分软件开发项目
5)基干集成
优点:具有三明治集成的优点,更适合于大型复杂项目的集成。
缺点:必须对系统的结构和相互依存性进行仔细的分析;驱动和桩开发量大;局部采用了大爆炸的策略,有些接口可能测试不充分。
嵌入式系统中常用
6)分层集成
适应于有明显层次关系的系统
7)基于功能的集成
优点:优先验证关键功能的正确性;减少驱动的开发;进度要快。
缺点:对接口测试不充分;有较大的冗余测试。
8)基于消息的集成
优点:优先验证关键消息的正确性;减少驱动的开发;进度要快。
缺点:对接口测试不充分;有较大的冗余测试。
9)基于风险的集成
优点:最具有风险的组件最早进地验证,有助于系统的快速稳定。
缺点:需要对各组件的风险有一个清晰的分析。
10)基于进度的集成
优点:具有较高的并行度;能够有效缩短项目的开发进度。
缺点:桩和驱动工作量较大;有些接口测试不充分;有些测试重复和浪费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值