前言
随着IT和5G技术发展的发展,软件已经进入每个人的手机,要想客户满意,必须保证软件质量。软件开发周期越来越短,软件测试任务越来越重,而测试中的许多功能测试都是重复行非智力的,这些工作最适合计算机代替人工完成。
自动化测试是一个非常广泛的技术,需要多年努力学习才能精通,有些做了四五年功能测试的工程师也没有熟练掌握,所以自动化测试是测试新手弯道超车老测试的好机会。
一、自动化测试概述
1. 概念
软件自动化测试就是通过测试工具或者其他手段,按照测试人员的预定计划对软件产品进行自动化测试,他是软件测试的一个重要组成部分,能够 完成许多手工测试无法完成或者难以实现的测试工作,正确合理的实施自动化测试,能够快速,全面的对软件进行测试,从而提高软件质量,节省经费,缩短软件的发布周期。
2. 为什么要进行自动化测试
- 缩短测试周期
计算机行业更新迭代快速,大量频繁的回归测试消耗时间,自动化测试能够将重复的实行交给计算机去做,加快测试速度。 - 避免人为出错
测试人员不可能持续高度集中,并且人类易受外界影响(头疼脑热,精神不振),可能会造成人为错误 - 测试信息存储
自动化测试将测试信息和数据储存在文件中,思路清晰明确,交接方便 - 轻易获取覆盖率
自动化测试能够解放测试人员,使测试人员能够有更多的精力做那些非重复性的工作。 - 其他
自动化测试可以是实现自动或者定时执行
注意:自动化测试的方向是对的,而且趋势也是如此,但是有些自动化实现不了的还是会手动测试的。
3. 自动化测试条件和使用场景
条件:
- 手动测试已经完成,后期再不影响进度的前提下逐渐实现自动化
- 项目周期长,重复性的工作都交给机器去实现
- 需求稳定,项目变动不大
- 自动化测试脚本复杂度比较低
- 可重复利用
场景:
- 频繁的回归测试
- 冒烟测试
- 传统行业需求变化不大,应用频繁
- 性能测试
5. 自动化测试流程
①分析测试需求
需求文档是我们展开一切工作的根本,也是测试工程师的测试目标。测试工程师分析测试需求,使用思维导图提取测试点,以便用例设计时能够覆盖所有的需求点。这里举一个例子,App功能测试需要覆盖一下几个方面:
- 页面控件测试,确保各个控件可靠;
- 页面功能测试,确保各项操作正常;
- 数据处理测试,确保数据显示准确、处理精确可靠;
- 模块业务逻辑测试,确保各个业务流程畅通。
②制定测试计划
不管是手动测试还是自动化测试前,必须做个测试计划,明确测试对象、测试目的、测试的项目内容、测试的方法、测试的进度,预估测试风险。制定好测试计划后,下发给用例设计者。
③设计测试用例
根据测试点,设计出能够覆盖所有需求点的测试用例,形成测试用例文档。由于不是所有的测试用例都能用自动化来执行,所以需要将能够执行自动化测试的用例汇总成自动化测试用例。必要时,要将登陆系统的用户、密码、产品、客户等参数信息独立出来形成测试数据,便于脚本开发。
④搭建测试环境
自动化测试人员在用例设计工作开展的同时即可着手搭建测试环境。因为自动化测试的脚本编写需要录制页面控件,添加对象。测试环境的搭建,包括被测系统的部署、测试硬件的调用、测试工具的安装盒设置、网络环境的布置等。
⑤编写并执行测试脚本
根据自动化测试用例和问题的难易程度,采取适当的脚本开发方法编写测试脚本。
①先通过录制的方式获取测试所需要的页面控件;
②然后再用结构化语句控制脚本的执行,插入检查点和异常判定反馈语句,将公共普遍的功能独立成共享脚本,必要时对数据惊醒参数化;
③还可以用其他高级功能编辑脚本。
脚本编写好了之后,需要反复执行,不断调试,直到运行正常为止。
⑥分析测试结果、记录测试问题
建议测试工程师及时分析自动化测试结果,每天抽出一定时间分析结果,更早地发现问题。如果采用开源自动化测试工具,建议对其进行二次开发,以便与测试部门选定的缺陷管理工具紧密结合。理想情况下,自动化测试案例运行失败后,自动化测试平台就会自动上报一个缺陷。测试人员只需每天抽出一地你该时间,确认这些自动上报的缺陷,是否是真实的系统缺陷。如果是系统缺陷就提交开发人员修复,如果不是系统缺陷,就检查自动化测试脚本或者测试环境。
⑦跟踪测试BUG
测试记录的BUG要记录到缺陷管理工具中去,以便定期跟踪处理。开发人员修复后,需要对此问题执行回归测试,就是重复执行一次该问题对应的较薄,执行通过则关闭,否则继续修改。如果问题的修改方案与客户达成一致,但与原来的需求有所偏离,那么在回归测试前,还需要对脚本进行必要的修改和调试。
⑧自动化脚本的维护
如果需求发生变更时,测试脚本和相关文档《自动化测试用例》、《自动化脚本设计说明书》进行维护。
4. 自动化测试构成
①接口自动化测试
②UI自动化测试
③持续集成
三、 接口自动化测试
API接口测试介于单元测试和界面测试之间,是一种灰盒测试方法,主要测试内部接口功能的完成性。相较于UI自动化测试,它具有自动化成本低和测试效率高的特点。
接口测试的工作原理是接口测试工具模拟客户端向服务器发送报文请求,服务器接受请求并做出响应。然后向客户端返回应答信息,接口测试工具对应答信息进行解析的一个过程。
常用的接口测试工具有:
①Apache JMeter:是一款基于Java的开源测试工具,主要应用于WEB应用程序的负载测试,同时也支持单元测试和接口测试;
②Postman:是一款功能强大的网页测试工具,支持WEB API和HTTP请求,能够发送任何类型的HTTP请求(GET、HEAD、POST、PUT等)。Postwomen与其近似的一款免费开源、轻量级测试工具;
③SoapUI,是一款用于SOAP和REST的开源API测试自动化框架,可以集成到Eclipse等开发工具中,支持用户二次开发;
④Robot Framework,是一款基于Python3的开源自动化测试框架,具有良好的可扩展性,支持关键字驱动,运行用户二次开发。
基于这些接口测试工具,测试人员可以根据自身业务需要开发适合自己的接口自动化测试工具。有了接口自动化测试工具,我们就可以开展自动化测试工作。
自己搭建框架
使用测试工具自动化测试比较有局限,所以我们可以自己搭建一套自动化框架:
①读取文件中的数据,使用csv或者excel
//读取csv
import csv
class ReadCsv():
def readCsv(self):
item = []
rr = csv.reader(open("../dataDemo/123.csv"))
for csv_i in rr:
item.append(csv_i)
item =item [1:]
return item
//读取excel
from openpyxl import load_workbook
class Readxcel():
def getTestExcel(self):
# 打开表
workbook = load_workbook("G:\python\pythonProject\pytest05a\\requestdemo\\a.xlsx")
# 定位表单
sheet = workbook['Sheet1']
print(sheet.max_row) # 3 行
print(sheet.max_column) # 3 列
test_data = [] # 把所有行的数据放到列表中
for i in range(2, sheet.max_row + 1):
sub_data = {} # 把每行的数据放到字典中
for j in range(1, sheet.max_column + 1):
sub_data[sheet.cell(1, j).value] = sheet.cell(i, j).value
test_data.append(sub_data) # 拼接每行单元格的数据
return test_data
t = Readxcel()
f = t.getTestExcel()
print(f)
②requests拿到数据请求接口返回状态码
import requests
from requestdemo.readexcel import Readxcel
class GetStatusCode():
def getStatusCode(self):
t = Readxcel()
f = t.getTestExcel()
item = []
for excel_i in f:
if excel_i["method"] == "get":
rr = requests.get(excel_i["url"], params=excel_i["params"])
item.append(rr.status_code)
else:
rr = requests.post(excel_i["url"], data=excel_i["params"])
item.append(rr.status_code)
return item
print(GetStatusCode().getStatusCode())
③通过断言验证返回状态码和200对比
import allure, pytest, os
from requestdemo.getStatusCode import GetStatusCode
get = GetStatusCode()
statusCodes = get.getStatusCode()
class TestReadExcel():
def testReadExcel(self):
for code in statusCodes:
assert code == 200
if __name__ == "__main__":
# 生成测试报告json
pytest.main(["-s", "-q", '--alluredir', 'report/result', 'testreadexcel.py'])
# 将测试报告转为html格式
split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
os.system(split)
④生成allure的测试报告
四、UI自动化测试
UI自动化测试的成本比接口测试要高,不是技术实现难度高,因为UI是用户界面,变化比较频繁,维护成本高。
那么我们到要不要进行UI自动化测试呢?要要要!对一些大型项目,其功能是处于不断地迭代地,虽然界面在调整,但是由于项目周期长,在开发和测试过程中,需要频繁使用自动化测试的脚本进行回归测试,可以提高自动化测试的利用率,提高工作效率,降低工作成本。
UI自动化分为App自动化和Web自动化测试,我们先学习web自动化。
1. Web自动化
推荐工具:推荐使用工具Selenium,主要进行Web自动化测试。
优点:
跨平台、跨语言
支持多种浏览器
支持移动端测试
插件多,扩展性强
缺点:不能直接生成测试报告不能识别动态图片
工作原理:
环境搭建
1)python3.7
2)Firefox35(大于43)
3)selenium2框架
稳定版 2.48.0 (pip install selenium==2.48.0)
4)浏览器驱动
使用:
由于篇幅太长,请阅读《Web自动化测试,这篇足够了》
2. App自动化
推荐工具:推荐使用Appium,无论是在市场利用率,还是在功能上,都比其他工具要强。而且,Appium不仅支持Android还支持iOS,所以在这里,我们应该选择学习Appium最能满足市场的需要。
使用:
由于appium使用篇幅太长,请阅读《App端UI自动化测试,看完还不会找我》
五、持续集成
1. 什么是真正的自动化?
开发工程师提交新版本代码,自动构建,我们测试自动执行脚本。
这就是持续集成,持续集成推荐使用Jenkins。
2、持续集成概念
互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)
2.1. 持续集成(采蜜)
持续集成指的是,频繁地(一天多次)将代码集成到主干。
它的好处主要有两个:
(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
2.2. 持续交付
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
2.3. 持续部署
定义:持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
目标:代码在任何时刻都是可部署的,可以进入生产阶段。
前提:能自动化完成测试、构建、部署等步骤。
3、持续集成工具Jenkins
Jenkins概念: Jenkins 是一个开源软件项目,是基于Java开发的一种可拓展持续集成工具,主要用于持续、自动地构建 / 测试 / 集成软件项目以及监控一些定时执行的任务。
Jenkins目的:
①持续、自动地构建/测试软件项目。
②监控软件开放流程,快速问题定位及处理,提示开放效率。
Jenkins特性:
• 易于安装,只要把 jenkins.war 部署到 Tomcat 即可运行
• 易于配置,所有配置都是通过其提供的 web 界面实现
• 集成 RSS/E-mail,通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知
• 生成 JUnit / TestNG 测试报告
• 分布式构建,支持 Jenkins 能够让多台计算机一起构建/测试
• 插件支持,支持扩展插件,你可以开发适合自己团队使用的工具
产品发布流程:
产品设计成型 → 开发人员开发代码 → 测试人员测试功能 → 运维人员发布上线
六、总结
若想真正实现软件自动化测试,必须包含持续集成、UI自动化和接口自动化。要达到这种水平,各种技术要熟练到一定级别。其实对于测试工程师来讲,测试的工作其实相对比较轻松,技术难度也不是特别高。我们要保持高度学习精神,成为行业的高精尖人才!