一、自动化测试
1、为什么要做自动化测试?
- 自动化测试就是把以人为驱动的测试行为转化为机器执行的一种过程,即模拟手工测试的步骤,通过执行测试脚本自动地测试软件
- 自动化测试就是程序(脚本)测试程序,使用自动化工具编写、执行测试人员测试脚本和案例的技术
- 自动化测试的主要目标是减少手动运行的测试用例数量,而不是完全取消手动测试
2、自动化测试的适用场景
- 自动化测试基于投资回报率,自动化测试适用于需求比较稳定,也就是不经常变更的场景
- 比如一些重复性任务、冒烟测试、使用多个数据集进行测试、回归测试用例等
- 如果是被测系统频繁更改,临时加的需求,或者是随机测试,就不适用于自动化
3、什么样的项目适合开展自动化测试
- 软件需求变动不频繁
- 项目周期足够长
- 软件系统界面稳定,变化较少
- 项目进度压力不大
- 比较频繁的回归测试
- 自动化测试脚本复用率较高(不同平台兼容、和其他模块组合使用)
- 被测软件系统开发较规范,能够保证系统的可测试性
- 测试人员具备较强的编程能力
3、自动化测试的缺陷
- 不稳定
- 可靠性不强
- 不易维护,维护需要很大的成本
- 成本与收益可能不对等
4、如何开展自动化测试?
自动化测试的切入点:开展自动化测试的时间点很关键,需要在系统已经过多版本的系统测试,达到稳定之后
可行性分析:在进行项目自动化测试之前,第一步就是要确认其可行性,是否可以实行测试自动化。如果项目时间紧迫、项目周期短、需求变幻无常则不建议开展自动化,想要开展自动化测试,还是应该遵循几个前提条件:软件需求变动不频繁、项目周期足够长、自动化测试脚本可重复利用。可以产出《可行性分析报告》
抽样demo分析:通过可行性分析后,接下来需要做一个demo,等待demo完成后,可以再次分析自动化测试能否顺利开展下去,因为demo已经是一个实体案例,可以完全通过透析demo来发现是否存在技术上的问题。关于demo的选取,一般直接选择冒烟测试用例写成测试脚本后执行,检查脚本是否能够成功运行通过,已设计的测试点是否全部执行
测试需求分析:测试需求其实就是测试目标,需要分析项目中具体哪些测试需求(功能点)准备进行自动化测试,一条需求可以包含多条自动化用例,通过需求分析来判定项目中测试自动化要做到什么程度。比如在测试用例设计上,大体是以正向、反向划分的,一般在自动化测试中,优先考虑实现正向的测试用例后再去实现反向的测试用例,而且反向的测试用例大多都是需要进行分析然后筛选出来的,因为反向的用例实在太多了。自动化测试是不需要也没有必要做到100%覆盖率的。在需求分析这个阶段,确定测试覆盖率以及自动化测试粒度,测试用例上的筛选等都是重点工作
制定测试计划:在测试计划中,明确项目实施自动化测试所需的资源、测试范围、测试过程的描述。框架设计、开发或搭建,自动化测试框架是能保证测试的分布执行、
设计测试用例:由于不是所有的测试用例都能用自动化来执行,所以需要将能够执行自动化测试的用例汇总成自动化测试用例,要将登陆系统的用户、密码、产品、客户等参数信息独立出来形成测试数据,便于脚本开发
测试脚本开发:根据测试计划以及设计的测试用例,编写脚本,
分析测试结果、记录测试问题:
自动化测试脚本维护:
5、什么是持续集成?
持续集成是指频繁的一天多次将代码集成到主干,可以让产品快速迭代,同时还能保持高质量
二、自动化测试框架
1、你用过哪些自动化框架?
python+selenium+RobotFramework
2、介绍一下RobotFramework?
RF是基于可扩展关键字驱动的自动化测试框架
- 可扩展意味着可以自己开发,也可以调用第三方的关键字库
- 关键字驱动意味着测试用例都是围绕着关键字运行的
RF有四种表
- setting 全局配置表,定义配置部分
- variables 测试套件的全局变量表
- keywords 用户自定义的关键字表
- test cases 测试套件的测试用例集
用例表里面的每个测试用例,可以分为配置部分和主体部分
配置部分:
- [Documentation] 用例文字说明
- [tags] 用例标签
- [setup][teardown] 用例的初始化和清除操作
- [template] 声明该用例是模板关键字驱动的
- [timeout] 设置用例超时时间
用例主体部分是由关键字组成的,关键字的来源有rf标准库、第三方库和python自定义库
3、RF的原理是什么?
测试数据和关键字库都是自己准备的
编写测试用例后,rf解析测试数据,执行测试用例,最终生成测试报告
rf只是一个工具,并没有和被测系统发生真实交互
4、介绍一下pytest?
pytest是python的第三方单元测试框架,比自带unittest更简洁和高效,支持非常丰富的插件,同时兼容unittest框架。
pytest特点:
- 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
- 能够支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
- 支持重复执行rerun失败的case
- 支持运行由nose、unittest编写的测试case
- 可生成html报告
- 方便和持续集成工具jenkins集成
- 可支持执行部分用例
- 具有很多第三方插件,并且可以自定义扩展
5、unittest有了解过么?
unittest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件
unittest框架大概有五个概念:
- test case:一个完整的测试单元
- test suite:多个测试用例的集合、测试套件或测试计划
- test loader:加载test case到test suite中的
- test runner:执行测试用例,并将测试结果保存到test result中
- test fixture: 一个测试用例的初始化准备及环境还原,主要是setup() 和setdown() 方法
unittest的工作原理:
通过unittest类调用分析,可将框架的工作流程概述为:编写TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TestRunner来运行TestSuite,最后将运行的结果保存在TestResult中。通过命令行或者unittest.main() 执行时,main会调用TestRunner中的run来执行,或者可以直接通过TestRunner来执行用例,在Runner执行时,默认将执行结果输出到控制台,可以设置其输出到文件,在文件中查看报告。