自动化测试理论
软件系统分层:
(UIL)用户界面层:为终端用户提供交互的人机界面
(BLL)业务逻辑层:将数据库抽象出来的对象进行拼接成具体的业务逻辑对象,并对之进行流程组织
(DAL)数据访问层:对DB层做的ORM,让上层应用程序以对象的方式操控数据库
(DBL)数据持久层:存储数据
自动化测试的目标方向:持续交付(自动化测试》持续集成》自动化部署》持续交付)
测试自动化金字塔(分层测试):UI测试(10%),接口测试(20%),单元测试(70%)。测试覆盖率:单元测试》接口测试》UI测试
界面层次主要关注用户体验问题,尽量由产品经理或者设计师来做相关用户体验测试。界面层不宜做过多功能测试,更不要做过多自动化的功能测试,因为成本高,收益低。
单元测试:测试数据和逻辑的正确性,关注代码的实现与逻辑
接口测试:测试接口的数据和逻辑的正确性,关注数据、逻辑、接口结构
UI测试:验证页面逻辑和展示的正确性,关注用户操作行为
自动化测试的本质:
测变化的东西对不变的东西的影响,每次代码有变动,就立即开始持续集成。可以第一时间发现更新后的版本对现有功能的影响。帮助开发更快的迭代,提升开发效率。
自动化用例选择:
做自己技术胜任的需求稳定的重要模块的正常功能的测试用例。
模块选择以技术能实现>重要程度>变化频率这样的方法来挑选。开始做之前筛选重要的模块,然后把技术不能实现的剔除掉,然后把变化频率大的剔除掉。剩下的就是你要做的模块了。先易后难,先完成再完美。
代码写接口自动化(5个步骤):
1. 引入第三方库2. 设置请求URL/请求方式/请求头/请求超时时间3. 设置请求正文(即请求参数)4. 执行请求5. 响应正文断言伪代码实现:1. `import HTTP`2. `HTTP.setURL("http://192.168.1.1/api/v1").setMethod("POST").setContentType("application/json").setConnectTime(20)`3. `HTTP.setBody("{\"name\":\"zhangsan\"}")`4. `Response res = HTTP.execute()`5. `Assert.assertEquals(res.body.contains("success"))`
自动化测试使用原则:
原则1:针对重点业务,进行回归或冒烟(主要功能--功能通》流程自然通)的自动化测试
原则2:针对稳定的业务或接口,在环境比较稳定的情况,前期投入脚本开发,有利于减少后期维护成本
原则3:自动化测试主要是为了保证主要功能完整可用,而不是为了多发现缺陷
原则4:自动化测试并不能减少测试的人力成本,而是为了加快测试反馈,提升测试质量
原则5:不要对录制回放抱有幻想,可视化也不是一个好的想法
原则6:开发参与自动化测试,让开发和测试融合在一起
自动化测试框架参考模型:
测试框架:
测试框架是一套完整的解决方案。一般包括如下的功能:
1. 标注测试方法。有的是在方法上加个注解,表示是测试方法,有的是方法名在test开头。2. 测试方法执行前置条件设置。比如beforeMethod/setUp,表示在执行测试方法前需要执行的方法,比如事先生成一些测试数据,亦或事先设置好请求条件等。3. 测试方法执行后置条件设置。比如afterMethod/tearDown,表示测试方法执行完成后会被执行的方法,比如清理测试方法产生的数据,或者关闭请求连接啊等。4. 断言。断言是测试的灵魂,所以测试框架中的断言是必备功能。5. 测试方法的执行。测试框架都会提供批量执行测试方法的方式,并提供命令行来批量执行,因为只有具备命令行批量执行,才能进行持续集成6. 测试聚合报告的生成。测试框架一般都会给我们生成一个简单的聚合报告。7. 扩展性。一些测试框架会提供给我们一些监听,让我们去获取数据后进行扩展,比如获取报告数据来自定义报告。比较有代表性的是java上的testNg.
持续集成(jenkins)的工作流程:1. 拉取被测系统代码2. 自动部署被测系统3. 拉取脚本最新代码4. 执行脚本产生报告5. 自动邮件发送报告
持续集成的最大作用:提高效率,持续测试
持续集成(jenkins)的工作流程:1. 拉取被测系统代码2. 自动部署被测系统3. 拉取脚本最新代码4. 执行脚本产生报告5. 自动邮件发送报告
持续集成的最大作用:提高效率,持续测试