输入-过程-输出
--通过测试脚本和测试数据来完成测试过程,并比较测试结果,进而形成测试报告。
Web自动化测试
自动化测试过程:
- 明确测试范围:确定需要进行自动化测试的功能和颗粒度,编写测试脚本(最后的输出:比如sanity test的case有哪些,regression的case有哪些)
- 明确脚本执行策略:执行周期,比如sanity case需要每个新版本构建之后立马执行一遍
- 编写测试框架:确定脚本分层-数据文件,公共文件,page文件,test case文件,封装公用功能,比如重新封装find element
- 编写测试脚本并调试
- 执行测试脚本并输出测试报告
- 分析测试报告
- 维护测试脚本
测试脚本编写基本流程:定位元素-操作元素-获取结果-比较结果-输出报告
自动化测试理论
理论1:数据驱动-测试数据与测试脚本分离
优点-
- 可读性强
- 可扩展性强
- 强大的第三方支持
- 脚本修改简单
实例-
- Python+Selenium UI自动化测试:使用Excel存取数据
- JavaScript+Selenium UI自动化测试(Nightwatch):会将统一类型的数据放在一个单独的文件中,然后去读取
- Jmeter 性能测试和接口测试:使用Csv存取数据
- TestNG 单元测试:@DataProvider注解
理论2:测试脚本分层:测试描述,测试步骤,测试对象分离(业务流程,功能点,操作组件)
优点-
- 可复用性高
- 独立性强,依赖低
- 快速定位查找问题
实例-
- Cucumber UI自动化测试:feature文件(.feature 测试描述),step文件(.rb 功能点实现)
- JavaScript+Selenium UI自动化测试(Nightwatch)& Java+Selenium UI自动化测试:pageObject模式
PageObject模式
基本原理: 将页面的元素定义(类属性)和元素操作(类方法)封装成一个类,在case文件中直接调用。如果一个page很庞大,也可以将一个page封装成多个组件
优点-
- 实现了测试脚本分层(测试用例和页面对象分离):代码可读性强,代码可复用,代码维护简单
BasePage模式
优点-
- 进一步实现了测试脚本分层:代码可读性强,代码可复用,代码维护简单
理论3:测试case之间耦合性要低
优点:
- 提高自动化测试脚本的稳定性
如果case之间关联性太大,下一个case依赖上一个case的输出:
- 并发测试会报错
- 上一个case报错,直接影响下一个case的执行,但实际上,下一个case的功能并不受上一个case的影响,这样就测不到下一个case了
UI自动化测试常遇到的问题
1. 如何去提升用例的稳定性?用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了。
- 常见的不稳定因素就是定位不到元素:
- 使用sleep(5) - 牺牲测试脚本执行时间
- 使用隐性等待和显性等待
- 使用try捕捉异常,并进行相应处理 - 比如可以换种方法
- 减少函数冲突(低耦合)
2. 如何去提升用例执行的速度?
- 优化等待时间:尽量少使用sleep,implicitly wait, 多使用WebDriverWait
- 减少不必要的元素操作
- 使用并发测试