什么是自动化测试?
自动化测试,一般是指软件测试的自动化。自动化测试是把以人为驱动的测试转化为机器执行的一种过程。实际上自动化测试就是用自动化测试工具代替手工测试,即是模拟手工测试,从而利用所写脚本执行测试用例,解决大量用例维护的问题。
什么是自动化测试脚本?
自动化测试项目也是有需要编码的部分。它并不是字面上的那样完全取代手工测试,它需要编写测试脚本实现所设计的测试用例。
编写脚本的同时也需要注意:检查测试数据的存在性、正确性以及对测试环境的依赖性考虑,若测试脚本环境比较复杂导致失败,查明测试脚本执行失败的原因等等。
自动化测试现状
软件测试的自动化,已经成为国内软件工程领域一个众所周知的课题;软件测试从业者都意识到软件测试这项工作走向标准化的一个必经之路就是要实现软件的自动化测试。
目前国内的软件公司很多都还处于获取资本的原始积累阶段,整体行业没有将自动化测试重视起来。
正确认识自动化测试
1、自动化测试能大大降低手工测试工作,但不能完全取代手工测试。完全的自动化测试只是理论上的目标,实际上想要达到100%的自动化测试,不仅代价昂贵,操作上也几乎不可能实现。
2、测试自动化的引入有一定的标准,要经过综合的评估,绝对不能理解成测试工具简单的录制与回放过程。
3、自动化测试能提高测试效率,快速定位测试软件各版本中的功能与性能缺陷,但不会创造性的发现测试脚本里有没有设计的缺陷。
4、自动化测试能提高效率,但对于周期短、时间紧迫的项目不宜采用自动化测试。
自动化测试流程
1:制定测试计划:明确测试对象、测试目的、测试的方法,确定无误后进行下一步;
2:分析测试需求:根据测试计划和需求说明,分析测试需求,设计测试需求树,以便用例设计时能够覆盖所有的需求点。
3:设计测试用例:通过分析需求,设计能够覆盖所有需求点的测试用例,形成专门的测试用例文档。
4:搭建测试环境:测试环境的搭建,包括被测系统的部署、测试硬件的调用、测试工具的安装和设置、网络环境的布置等。
5:编写测试脚本:根据自动化测试用例和问题的难易程度,采取适当的脚本开发方法编写测试脚本。
6:分析测试结果、记录测试问题:及时分析自动化测试结果,尽早发现缺陷,判断缺陷是否是真实的系统缺陷,是进行下一步,不是就检查自动化测试脚本或测试环境。
7:跟踪测试bug:将测试记录的bug记录到缺陷管理工具中以便定期跟踪。修复bug后还需要对此问题执行回归测试。
常见的自动化测试框架介绍
LoadRunner:LoadRunner是一种高规模适应性的自动负载工具,它能预测系统行为,优化性能。强调对整个企业应用架构进行测试,能提供特殊的环境。
Selenium:Selenium是一个强大的开源web功能测试工具系列,支持多种语言开发语言,selenium测试自动运行在浏览器中。
QTP:QTP是quicktest Professionnal的简称。使用QTP的目的是想用它来执行重复的自动化测试,主要用于回归测试和测试同一软件的新版本。
Ranorex:Ranorex是一个Windows平台上的GUI自动化测试框架,可以测试多种类型的应用程序。
Python unittest介绍
unittest是Python的一个单元测试框架,非常适合做自动化测试。它包含的方法有:
1、TestCase:所有测试用例的基类,它是软件测试中最基本的组成单元。
2、TestSuite:多个测试用例的集合,TestSuite可以嵌套TestSuite。
3、TestLoader:用来加载TestCase到TestSuite中。
4、TextTestRunner:执行测试用例,其中的run(test)会执行TestCase/TestSuite中的run(result)方法。
5、TextTestResult:将测试结果保存到TextTestResult实例中,包括运行了多少用例,成功与失败多少等信息。
6、TestFixture:对一个测试用例环境的搭建与销毁。
自动化测试实例
给定两个数字,测试数字相加与相减是否符合预期。期待值:x+y=3,y-x=1
设计测试用例:
1、x=1,y=2 预期结果:pass
2、x=2,y=3 预期结果:fail
3、x=1,y=2 预期结果:pass
4、x=1,y=3 预期结果:fail
测试用例代码化:
import unittest class A(unittest.TestCase): def test_1(self): u"""x+y=3""" #测试用例名 x=1 y=2 self.assertEqual(x+y,3) print("\nAtest_1") def test_2(self): u"""x+y=5""" x=2 y=3 self.assertEqual(y+x,3) print("\nAtest_2") def test_3(self): u"""y-x=1""" x=1 y=2 self.assertEqual(y-x,1) print("\nAtest_3") def test_4(self): u"""y-x=2""" x=1 y=3 self.assertEqual(y-x,1) print("\nAtest_4") def tearDown(self): pass if __name__ == '__main__': unittest.main()
自动化测试脚本:
import unittest import HTMLTestRunner import a import time,os def testcaseuite(): #用测试套件加载测试类,按加载顺序执行各个测试类 testunit=unittest.TestSuite() testunit.addTest(unittest.makeSuite(a.A)) #获取当前时间节点 timestring=time.strftime("%Y-%m-%d_%H_%M_%S",time.localtime()) #获取项目路径 current_path=os.getcwd() result_path=current_path+'\\selenium_result' #命名生成的HTML测试报告 filename=result_path+'\\result_'+timestring+'.html' print(filename) fp=open(filename,'wb') runner=HTMLTestRunner.HTMLTestRunner( stream=fp, title=u'selenium自动化测试学习', description=u'用例执行结果:' ) runner.run(testunit) fp.close() if __name__ == '__main__': print('开始执行测试用例') testcaseuite() print('测试用例执行完毕')
运行完成截图:
测试报告:
自动化测试结果与预期结果一致,自动化测试完成。