当今社会,信息产业飞速发展,新兴技术如雨后春笋般不断兴起,软件产品丰富多样,丰富多彩的网络信息进入人们的视野与生活,这得力于国家的繁荣昌盛。同时,软件行业在不断前进和发展,随之而来的是软件开发的难度越来越大,开发过程中产生的缺陷也愈来愈多,与此同时,用户对软件质量的要求也更上一个台阶。无论是一个网站,还是一款软件,它能否成功赢得客户的青睐,已然越来越多地取决于软件开发的质量。而在开发的过程中,其实一直都存在着一个重要的环节——软件测试。通过测试人员手工或软件自动化测试,找出存在的缺陷,并将缺陷修改,最终达到客户要求。只有将软件开发和测试结合在一起,最终才能开发出高质量的软件。
软件测试是保证软件质量、提高软件可靠性的重要途径,伴随着软件的产生而产生。在最初的软件开发过程中,往往是通过测试人员手工进行测试,耗费了很大的人力资源,这其实是一种不必要的消耗,容易浪费很大一批的资源;其次,软件规模小而简单,开发过程随意而无序。软件测试的含义也比较狭窄,仅仅等同于调试,往往由开发人员兼任测试工作,目的是为了纠正软件中存在的已知问题。对测试的投入少、介入晚,往往是等到代码成形,产品完成后才进行。
因此,自动化测试应景而生。自动化测试模拟人的操作,通过相应的软件脚本对软件进行测试,这样就可以把繁琐的重复的操作,交给脚本自己完成测试并且最终生成测试报告,这样测试人员就只需分析报告。结合目前的形势,自动化测试已被越来越多的公司应用,因为自动化测试不仅能降低难度,又能提高质量,还能大幅提升效率,这是一种必然的发展。
随着时间的推移,软件测试的内涵在不断丰富,对软件测试的认识在不断深入。要完整理解软件测试,就要从不同角度去审视。软件测试就是对软件产品进行验证和确认的活动过程,其目的就是尽快尽早地发现软件产品在整个开发生命周期中存在的各种缺陷,以评估软件的质量是否达到可发布水平。软件测试是软件质量保证的关键元素,代表了需求规格说明书、设计和编码的最终检查。
自动化测试可以对网站进行多方面的测试,例如最常见的性能测试,除此之外,还有接口和界面测试...本课题以“牛客竞赛OJ网站”作为研究对象,围绕网站的性能,界面以及接口测试,通过Jmeter和Robot framework进行自动化测试研究。
以北美软件测试的用人市场现状为例,软件的大工业生产决定了软件测试必不可少的地位。对于人员配置,一直以来流行一种5:1的标准说法,且从公司内部看任何时候都是远高于这一比例的。
从近一个时期看,开发与测试工作量的比重甚至达到了2:1。同类型成熟产品之间的竞争最容易取胜的方法一般就是提高质量。软件的大工业化并不是在消灭个体户和小作坊,只是减少了他们直接与最终用户打交道的机会,降低其必要性。如今他们生产和包装软件的目的在于等待大公司的收购。为此,在最后阶段要进行“最终用户测试”。
国际各大软件开发公司在软件开发过程中,软件测试是一个非常重要的环节,是一项重要且独立的工作。在大型著名软件开发公司,大型项目的开发人员和测试人员的比例非常高,可能达到1:2或者1:4。软件测试技术上,越来越多的公司更倾向于自动化测试,不再局限于单一耗时的手工测试,自动化测试技术正在以极快的速度向前发展,技术也在不断地更新换代。一个自动化测试人员可以替代若干手工测试人员,这不但节省了人力,物力,给公司本身带来了巨大的效益,更是推动着软件开发不断向着规范化的方向发展。
西方的一些先进国家,对软件测试相当重视,他们有着专门的自动化测试研究人员,不断地研究测试技术并改进测试方法。为软件测试推出一个又一个重大变革。
自20世纪90年代末以来,开发自动化测试软件的思想,也发生了重大的变化,越来越多的人意识到开发是一种通用的系统,以此来代替其他一系列的软件。研究人员越来越重视硬软件资源,平台共享因此也得到越来越多的重视。
反观国内软件测试的现状,主要有以下几点:
一、国内软件测试地位不高,大多的公司只局限于软件的单元、集成、功能测试,都是比较基础的测试,自动化测试少之又少。
二、国内没有一个规范,无法做到标准化、规范化,不同的公司使用不同标准,测试的水平层次不齐。
三、国内的专门从事人员的数量,与行业所需要的软件测试人员的数量不相匹配,很多的软件公司,没有自己的软件测试部门,他们只能将开发出来的软件,交由第三方测试公司进行测试,导致的问题也越来越多。
四、国内缺乏专业的机构,没有专业的机构进行操作,无法完全的商业化,所以测试产业急需得到深掘开发。
五、软件测试思维模型——正向测试
(1)测试是验证软件的正确性
(2)测试的目的是验证软件是否能够工作
(3)测试就是建立一种信心,确信程序能够按预期的设想进行
(4)测试是一颗“定心丸”,吃完了可以安心起飞
六、软件测试思维模型——逆向测试
(1)测试就是发现软件中的缺陷BUG
(2)测试是为了发现错误而执行一个程序或者系统的过程
(3)测试是为了证明程序有错,而不是证明程序无错误
(4)一个好的测试用例在于它能发现以前未发现的错误
(5)一个成功的测试是发现了以前未发现的错误的测试
七、软件测试的发展
(1)以调试为主
(2)以证明为主
(3)以破坏为主
(4)以评估为主
(5)以预防为主
开发软件时,必须包括软件测试,提及测试,人们可能第一时间会想到,测试是等开发人员开发完软件,再看一看功能是否齐全或者正确,但实际上却大相径庭。软件测试贯穿整个软件开发的过程,从用户提出需求,到最后完成交付的整个流程,我们将之概括为W模型,如图1-1。
图1-1 软件测试开发W模型
软件测试最终达到的目的,其实并不是使开发出来的软件或网站没有任何的缺陷,没有缺陷的软件是绝对不存在的、要通过软件测试人员的测试,尽可能多的发现软件或网站中存在的缺陷,只有这样,才能使开发出来的产品符合客户的要求,才能真正进入普通用户的生活中,才会有人愿意使用它。而想让软件中的缺陷减少,就需要软件测试人员不断测试,编写更多的测试用例,让测试用例尽可能多的去覆盖更多的用户使用场景。
图2-1总体结构
图2-2 首页
为了更好地展示自己在大学期间的经历以及所做的作品,方便在简历中获得更多的优势,设计了米莱虾の作品展示小屋测试一体化平台。进入米莱虾の作品展示小屋测试一体化平台,首先打开的便是首页,首页最上面一部分为导航栏,分别为新闻、首页、性能测试、接口测试、界面测试和登录窗口。
导航栏下方分为五个部分,分别为ACM-ICPC国际大用户程序设计竞赛介绍、部分证书展示、相关项目作品展示、留言板和游戏大厂校招动向,最后还有行业相关新闻滚动栏。
轮播图展示了竞赛以及竞赛OJ的相关信息,点击相应的蓝色按钮,可以跳转至对应的页面。
图2-3 首页轮
软件测试项目介绍了米莱虾の作品展示小屋的简介,以及网站的功能,还有网站首页截图
米莱虾の作品展示小屋是一个带有一点自娱性质的私人网站,涵盖了自己在进入大学以来,在竞赛、CSDN、项目以及见闻等各方面的经历以及成长。有过类似经历的人可以清晰地看到我的成长轨迹以及发展历程,容易产生共鸣。这也为我在日后的求职经历增添了些许色彩。
该网站的主要功能是:首先可以通过QQ或者微信进行登录(保证一定的私密性),可以清晰地看到竞赛所获和项目积累,也可以点击按钮弹出网页查看算法竞赛OJ的相关信息和比赛动态以及大厂校招的情况,除此之外,还提供了留言板以供交流,最后,利用滚动动态新闻的形式分享了业界动态。根据功能画出网站的功能结构图,如图2-4:
图2-4 网站功能
对一个网站进行测试,主要有以下几个方面:功能测试,测试网站的功能是否齐全,各项功能是否符合需求,例如登陆注册功能,找回密码功能,查询消费信息功能,查询新闻,查询通知功能,等等这些功能,检查是否正常可用。界面测试,测试用户界面是否符合要求,界面是否美观,页面里面的按钮功能是否正确等等。性能测试,测试网站的性能,了解网站在高并发情况下的一个性能状况,是否能够满足,未来用户的使用要求,能否对用户使用体验产生影响。
根据网站的功能进行测试,测试网站的接口,界面和性能,并最终得出测试报告,分析测试报告,提出建议。
列出了目前比较流行的几个自动化测试软件,如图2-5所示,包括Jmeter、Robot framework,并且提供了软件下载的按钮,点击按钮,即可跳转至下载页面。如果本地已经安装软件,便可直接点击自启动按钮,即可打开软件。如果想要了解软件的更详细的信息,便可点击简介按钮,即可跳转至软件简介页。
图2-5 自动化测试工具
下面以Jmeter为例,具体解释后面的几个按钮的功能:
(1)下载:点击“下载”按钮之后,页面跳转至Jmeter下载页,如图2-6所示:
图2-6jmeter下载页
(2)自启动:如果本地已经安装了Jmeter,则直接点击“自启动”按钮,然后网页会询问是否打开start.bat,点击“打开start.bat”即可启动Jmeter,如图2-7所示:
图2-7 软件自启动
如果想要在网页启动本地应用程序,目前主要使用的技术有:Js调用本地程序和使用URL Protocol调用。Js调用目前在很多浏览器内都被禁用了,只有少数的浏览器还可以支持。而另一种方法,则被普遍使用,例如QQ,迅雷,百度网盘等工具的启动都是使用的这种方法。首先需要在注册表内添加url protocol协议,然后再在网页中调用注册表内的协议,最终实现软件的启动。
(3)简介:点击“简介”按钮,则会直接跳转至百度词条Jmeter介绍页。
图2-8 jmeter介绍页
这里介绍了软件测试中集中常见的测试项目,性能测试、接口测试、界面测试以及接口测试。点击相应的测试项目,便可跳转至相应的项目介绍页。
图2-9 软件测试相关介绍
(1)新闻页
在自己所设计的网站里,添加了站内链接——新闻页,主要介绍了物联网最新的10大深度技术,包括军事、生物、通信、人工智能、医学等技术。如图2-10所示:
图2-10 新闻页
性能测试步骤如下图2-11所示:
图2-11 性能测试步骤
(2)ACM大赛页
在自己所设计的网站里,添加了站外链接——ACM大赛页,它主要介绍了国际大学生程序设计竞赛ACM-ICPC的赛事、活动、历史发展和志愿活动等,如图2-12所示:
图2-12 ACM大赛页
接口测试步骤如下图2-13所示:
图2-13 接口测试步骤
(3)CSDN博客页
在自己所设计的网站里,添加了站外链接——CSDN博客页,主要介绍了自己博客的一些信息,包括原创数、周排名、总排名、访问量、粉丝数以及部分文章的略缩显示等,如图2-14所示:
图2-14 CSDN博客页
界面测试步骤如下图2-15所示:
图2-15 界面测试步骤
自动化测试一体化平台,利用了Eclipse开发平台,并结合Tomcat服务器进行开发,主要的开发语言包括Java,Html和Jsp,以下为具体的工具及技术的相关介绍。
Eclipse是一款基于Java的可扩展编程平台。拥有强大的项目开发功能,可以用来开发常见的Java项目,或者Web项目。Eclipse可以添加很多插件,例如AmaterasUML, Easy Explorer,EasySQL等等,正因为有这些强大的插件,才让Eclipse拥有了强大的功能,深受开发人员的喜爱。
Html是一种超文本标记语言,而我们常见的网页的本质就是超文本标记语言,通过将Html与其他技术相结合,就可以编写出强大的网页。Html历经多年的发展,已经诞生了很多的版本,最新的版本为Html5,极大的提升了web在富媒体、富内容和富应用等方面强大的能力,它在web发展的过程中,起着强大的作用。
Tomcat是一款免费的、开源的轻量级web应用服务器,在开发小型项目中被普遍使用,它拥有可扩展性和安全性的特点,深受开发人员的喜爱。Tomcat必须在JDK环境下才能使用。
性能测试,顾名思义就是要测试网站的性能,可能有人要问为什么要做性能测试。现在越来越多的网站,大多数的都是基于网络的分布式网站,在某一时刻,有多少用户访问网站并进行相关操作,这是未知的。如果网站的性能不够好,不能够满足用户访问的需求,那么用户体验就不会很好。在用户数量较少的时候不出现问题,但不代表在用户数量很多的时候也不出现问题,因此,必要的性能测试,能够让开发人员了解网站的性能,从而找出可以优化的地方,不断的完善网站。
性能测试主要包括了负载,压力,容量测试。负载测试,主要测试不同数量的用户同时访问网站,测试网站的反应,关注网站相关的指标。压力测试,测试网站在高并发情况下,网站是如何运行,是否会有内存泄漏,数据库无反应,cpu无响应等情况发生。容量测试,通过容量测试,了解系统最大的支撑用户量,最大用户数。
性能测试的指标主要包括响应时间,吞吐量,最大响应时间,最小响应时间,错误率,Tps等。而响应时间,这一指标,从用户体验的角度来评价,一般情况下,如果响应时间在2秒以内,则视为流畅;5秒之内为可用;10秒之内则较慢了。
结合以上性能测试相关的知识,以及牛客竞赛OJ的实际情况,那么在本次论文中,采用了Jmeter进行性能测试,并最终分析网站的性能是否符合要求,是否能够满足用户的使用场景。
界面测试,顾名思义,就是对网站界面的测试,而这一步的测试也是功能测试的一种。界面测试,需要检查页面上的每一个组件,是否可用,是否符合用户的使用习惯,功能是否正确完善。
在本次论文中,使用Robot framework测试框架,结合ride进行页面测试,测试主要的几个页面,查看功能是否正常可用,页面跳转是否正确。
接口测试,就是要检查网站接口。现在的网站,很多都是前后端分离的。那么,测试这种前后端分离的网站的时候,就需要对网站的接口进行测试。一个网站,能会包含很多的接口。在这些接口中,各种各样的请求,包括get请求,post请求。接口测试的目的主要是,验证接口的正确性和稳定性。只有接口测试通过,才能确保网站的功能的正常运行。一个网站的功能越强大,那么它的接口也就越多,测试的过程,也就越复杂。接口测试主要检查,网站的一些请求,以及数据交换,是否正确。
在本次论文中,使用Robot framework测试框架,在收集整理网站的接口之后,对网站使用的接口进行测试。
随着自动化测试的发展,一个又一个的测试软件出现在人们视野中,常见的自动化测试软件包括:QTP,Jmeter,Loadrunner,Robot framework,WinRunner等,本文中主要使用了Jmeter和Robot framework。
Robot framework是一个基于Python的测试框架,ride是他的一个可视化的界面。这个框架,是利用关键字驱动,通过调用自己本身的关键字,或者第三方库,以及测试人员自己定义的关键字,进行测试。Robot framework可以进行接口测试和界面测试。他的优点除了支持关键字,另外他会生成一个测试报告,可以让测试人员,清晰地看出哪里出现了问题,及时定位问题,可以节省寻找不bug的时间。
在这里,主要通过Robot framework,进行接口测试和界面测试,牛客竞赛OJ有很多的接口,首先将所有的接口整合起来,然后编写测试用例,一个个对这些接口进行测试。
Jmeter是一个基于Java编写的性能测试软件。通常被用于网站的性能测试,同时,他也能够进行接口测试。Jmeter解决了手工测试无法进行性能测试的缺点,之后,Jmeter也被运用到其他测试中,它通过模拟成千上万的用户。对网站发起请求,同时,通过分析网站的吞吐量,响应时间等数据,最终得出结论,Jmeter拥有强大的扩展组件,可以通过哪些扩展组件,包括表格数据,图形数据,可以清晰地看出网站在运行的过程中的性能的变化。
在这里,针对米莱虾の作品展示小屋,主要利用Jmeter进行性能测试,分析网站的性能,因为在流量特别高的时候,例如选课的时候,网站经常会崩溃,出现很多的问题,而信息门户网站和教务处的网站架构是类似的,因此用信息门户网站来进行分析。
通过模拟用户,短时间内,同时登陆网站,分析网站的吞吐量,响应时间等数据,并结合二八原则进行分析网站的性能。二八原则是在性能测试中,经常使用的一个原则。二八原则,通过将业务需求进行量化,让测试人员能清晰地看出网站的性能是否符合要求。二八原则的要求是,在20%的时间内,要完成80%的业务,在这里的意思就是,在并发高峰阶段,利用20%的时间,完成80%的任务。
Jmeter测试过程如下:
而在Jmeter执行测试用例时,又分为以下步骤:
图2-17 Jmeter性能测试
Jmeter通过模拟多用户,多线程,了解网站在高并发的情况下的性能。并最终通过报告和图表的形式展现在用户面前,让测试人员比较直观的了解网站的性能。Jmeter监听器主要包括了聚合报告、图形结果和TPS几个方面。
在进行性能测试之前,我们必须充分了解网站的功能,了解网站在什么情况下会导致高并发,而且需要对服务器的性能有所了解,了解服务器的承受能力,针对网站的高并发的特征,在进行性能测试的时候,需要关注以下几方面:
(1)反复:一遍又一遍的执行同一种操作,判断系统在一次又一次的重复操作中,能否正常工作,而且,在工作过程中,有没有出现问题,出现各种各样的错误。
(2)高并发:非常多的用户在同一时间完成同样的操作。
(3)随机性:在实际应用中不可能是一成不变的,充满着可能性,随时都可能变化,所以需要在设计测试用例的时候,也要遵循这种随机性,从而得到更真实的数据。
性能测试方案:首先分析项目,了解项目的需求,然后编写测试用例,最终执行测试用例,分析测试结果。
因此,结合本次测试网站的实际应用场景,可以将网站的一些特点概括如下:
(1)用户主要的操作为登录和查询
(2)在一些特殊时间段,高并发的情况下,可能会有大量用户同时进行登录查询操作,所以服务器的压力可能就会变大。
(3)根据学校的实际情况,特殊时间段,同时操作的人数可能达到上千人。
图3-1 创建测试计划
(2)添加配置元件,包括HTTP请求默认值,HTTP Cookie管理器,HTTP信息头管理器,然后在相应的元件内添加需要的配置。
http请求默认值,Web服务器的协议设置为:http,服务器名称或ip设置为:ac.nowcoder.com,端口号设置为80
http信息头管理器配置需要的请求头信息,基本配置如下图:
图3-3 信息头管理器
添加循环控制器,并在里面添加HTTP请求,并配置HTTP请求的方法为get,路径为/new_details.html?newsid=241397&_t=1635995394
添加请求的参数,caUserName=20190507223,具体配置如下图:
图3-4 添加循环控制器
最后添加用于查看测试结果的监听器,如下图:
图3-5添加监听器
根据以上对米莱虾の作品展示小屋网站的实际应用场景的分析,用户主要操作为,登录,查询,所以总结测试流程为:模拟多用户,在短时间内,同时进行登录网站的操作。
表3-6性能测试用例
编号 |
描述 |
测试用例Ⅰ |
用户进入米莱虾の作品展示小屋首页 输入账号、密码进行操作 模拟10个用户,在10秒内完成登录操作 |
测试用例Ⅱ |
用户进入米莱虾の作品展示小屋首页 输入账号、密码进行操作 模拟100个用户,在10秒内完成登录操作 |
测试用例Ⅲ |
用户进入米莱虾の作品展示小屋首页 输入账号、密码进行操作 模拟1000个用户,在10秒内完成登录操作 |
测试用例Ⅳ |
用户进入米莱虾の作品展示小屋首页 输入账号、密码进行操作 模拟1000个用户,在100秒内完成登录操作 |
测试用例Ⅴ |
用户进入米莱虾の作品展示小屋首页 输入账号、密码进行操作 模拟2000个用户,在100秒内完成登录操作 |
首先在“xzit”线程组,根据测试用例1设置Number of Threads(线程数)为10,Ramp-up period(持续运行时间)=10,Loop Count(循环次数)=1;
然后,点击运行按钮,等待结果的生成;
测试用例1完成之后,再根据测试用例2,在xzit线程组内设置Number of Threads(线程数)为100,Ramp-up period(持续运行时间)=10,Loop Count(循环次数)=1,点击运行按钮,等待运行完成,产生结果;重复以上操作,直至测试用例5完成测试,生成结果。
下面通过5个测试用例,对自己制作的网站——米莱虾の作品展示小屋首页进行性能测试,并通过聚合报告、图形结果和TPS的方式展示出来。
(1)聚合报告
如图3-7为测试用例1的聚合报告,从图中可以看出,在10个用户10秒钟内同时请求网站时,系统的吞吐量为2.2/min,最小响应时间为302,最大响应时间为1945,平均响应时间是662,错误率是0。此时系统十分流畅,没有出现性能上的问题,满足用户的使用需求。
......
图太多了,就不贴了
根据以上的五条测试用例的执行结果,可以得出下表,从表中可以看出在请求数量较小时,请求的错误率比较小,同时响应时间也最小:
表3-22性能测试结果
测试用例Ⅰ |
测试用例Ⅱ |
测试用例Ⅲ |
测试用例Ⅳ |
测试用例Ⅴ |
|
吞吐量 |
2.2/min |
9.6/min |
70.0/sec |
10.0/sec |
4.4/sec |
错误率 |
0 |
0.85% |
0 |
0 |
0 |
最大响应时间 |
1905 |
21060 |
5443 |
6379 |
9771 |
最小响应时间 |
302 |
296 |
300 |
279 |
269 |
平均响应时间 |
662 |
857 |
609 |
431 |
541 |
为了更形象的展示数据的变化,根据上表,可以用下图表示出系统的吞吐量、错误率和平均响应时间的变化趋势。
图3-23性能变化
用例1、用例2和用例3都是用户在10秒内发起请求,不同的是请求数量不同,从图表中可以看出,在不断增加请求数的时候,系统的错误率和吞吐量是在不断地增加的,同时系统的响应时间也在增大,可以看出1000个用户同时在10秒内对网站发起请求,出现了请求失败的情况,网站可能存在崩溃的可能,如果在实际应用中,则表现为部分用户无法登陆网站,出现了网页丢失等情况。
用例3和用例4,是相同数量的请求,但是请求时间不一样,可以看出,当请求数量相同时,如果时间越长,那么系统的响应时间和吞吐量都有减少,但相反的是,请求的错误率增大了。
用例4和用例5,相同时间内,请求数量不一样,此时网站的吞吐量随着请求数量的增大而减小,错误率和平均响应时间随着请求数量的增大而增大,并且,当请求数量很大的时候,网站的性能出现了严重的问题,请求错误率极高。如果在实际使用情况中,网站会出现很大的问题,很大一部分的用户无法登陆网站,从而导致用户对网站失去信心。
通过对米莱虾の作品展示小屋首页网站的性能测试,可以得出结论,随着不断地增加用户并发数,网站的吞吐量也在不断地下降,同时请求失败的概率也在不断增加,在1000个用户并发的时候,网站存在崩溃的可能。根据结果可以看出,请求的平均响应时间也是和并发数存在关系的,在负载较高的情况下,响应时间会逐渐增加。
下面将以自己创建的网站“米莱虾の作品展示小屋”为例,进行接口测试。由于网站的接口有很多,所以首先需要扫描收集网站的接口,收集接口的信息,包括接口请求方式,请求头,参数等,然后根据这些接口去编写测试用例,再根据测试用例去编写测试脚本,最后执行测试。
1.准备安装包
安装Jmeter
2.编写脚本
创建工程:运行Jmeter,添程组:测试计划>>添加>>Threads(Users)>>线程组
添加循环控制器>>添加HTTP请求>>添加断言>>添加分析图
创建测试套件:在新建的工程内创建测试套件
在编写测试用例之前,我们需要先收集网站中的接口信息,如图4-3所示。接口的信息包括接口请求方法,请求地址,请求头信息,以及接口响应信息,得到以上的接口信息之后,再编写接口测试用例,这里主要列举了包括查询相关的接口。
使用jmeter直接传参进行测试,测试方法为post:
图 测试脚本
下图为接口测试结果树图。100条测试用例,全部pass,测试报告如下:
图 接口测试结果树
下图是接口测试聚合报告。我们可以清晰地看到最小值为43,最大值为1332,平均值为231,吞吐量为49.5/min,错误率为0,显然符合客户的需求。
图 接口测试聚合报告
下图是接口测试图形结果。从图中可以清晰地看出,网站的吞吐量,平均响应时间,偏离,中值等指标变化趋势,可以看出网站的吞吐量几乎处于固定斜率逐渐上升的势头。但由于样例数据不足,还是没有能看到较为全面的变化和状态。除此之外,平均值Average和中值Mid也呈上升趋势且状态和吞吐量相似。
图 接口测试图形结果
下图是对应用例数的接口测试TPS。可以清晰地看到,系统每秒处理事务的最大能力达到19,最小为1。除此之外,一开始处于最大值,然后迅速下降,中途骤然上升而后陡然下降,最后波动趋于平缓。
图 接口测试TPS
由于自己制作的网站——米莱虾の作品展示小屋中,登录方式是扫码登录且附加的账号密码登录是小窗口且需要验证码,登录方式过于复杂,在对应的html代码下,难以找到其具体的位置,所以下面将以牛客竞赛网站为例进行网站界面测试。
首先需要了解我们需要测试的页面,分析页面的元素,知道如何将页面元素定位,并了解元素的作用,然后设计测试用例,编写测试脚本,最终执行测试。
1.准备安装包
首先界面测试使用的Robot framework框架,以及它的UI工具ride,Robot framework是基于Python的,所以先安装Python,需要事先准备好以下安装包
表5-1安装包
版本号 |
约束版本 |
安装包 |
Python |
2.7.10 |
python-2.7.10.msi |
Robot Framework |
3.0.2 |
robotframework-2.8.1 .tar.gz |
selenium2library |
1.8.0 |
robotframework-selenium2library-master .zip |
pywin32 |
217 |
pywin32-217.win32-py2.7.exe |
selenium |
2.9.0 |
selenium-2.9.0 .tar.gz |
依次安装以上安装包,然后配置环境,最终即可使用ride。
由于Robot framework默认支持的是火狐浏览器,所以还需要安装浏览器驱动,实现对高版本的浏览器测试支持,下载完驱动之后,将文件放入Python安装目录以下即可。
表5-2浏览器驱动
浏览器 |
驱动名称 |
下载地址 |
谷歌浏览器 |
chromdriver.exe |
http://chromedriver.storage.googleapis.com/index.html |
2. 编写脚本...
3. 添加测试库
在正式开始编写脚本之前,还需要添加测试库,因为Robot framework是基于关键字驱动的,所以需要添加我们所需要的使用的库,从而才能使用关键字。除了第三方库,测试人员自己也可以将自己所需要的脚本封装成关键字,供后续使用。在接口测试中,使用的库如下图5-6所示。
通过对网站进行分析,分析网站的功能,选取了登录页、题库页、课程页、讨论区页进行网站界面测试,并编写了以下六个测试用例。如表5-7。
表5-7测试用例
编号 |
描述 |
测试用例1 |
用户打开登录页,输入正确的账号、密码,点击登录,查看页面是否正常跳转 |
测试用例2 |
用户打开登录页,输入正确的账号,错误的密码,点击登录,查看页面是否跳转 |
测试用例3 |
用户打开登录页,输入错误的账号,正确的密码,点击登录,查看页面是否跳转 |
测试用例4 |
用户进入牛客竞赛OJ网站首页,点击题库,查看页面是否跳转至题库页 |
测试用例5 |
用户进入牛客竞赛OJ网站首页,点击课程,查看页面是否跳转至课程页 |
测试用例6 |
用户进入牛客竞赛OJ网站首页,点击讨论区,查看页面是否跳转至讨论区 |
界面测试主要进行了五个页面的测试,分别为登录页、题库页、课程页、讨论区页,主要通过这些页面的测试,了解网站的功能是否完善,页面的操作是否符合用户正常使用习惯。
图 测试脚本
关键字open browser,打开浏览器。这里使用的是chrome浏览器,所以在第一行最后输入chrome,然后再在浏览器地址栏,输入牛客竞赛OJ_ACM/NOI/CSP/CCPC/ICPC_信息学编程算法训练平台,表示打开的网址是这个,如图5-9第一行。
关键字sleep,让网页等待一秒钟,直到响应完成,如图5-9第二行。
关键字click element,点击登录按钮,登录按钮的Xpath路径为Xpath=/html/body/div[1]/div[1]/div/div/a[1],如图5-9第三行。
关键字sleep,让网页等待一秒钟,直到响应完成,如图5-9第四行。
关键字Input Text,输入文字,在浏览器内打开网站,然后再控制台内找到用户名文本框的位置,得到文本框的Xpath路径为Xpath=/html/body/div/div[2]/div/div[2]/div[2]/form/div[1]/div/div/input,并在文本框内输入用户名,如图5-9第五行。
关键字sleep,让网页等待一秒钟,直到响应完成,如图5-9第六行。
关键字Input Password,输入文字,在浏览器内打开网站,然后再控制台内找到密码文本框的位置,得到文本框的Xpath路径为Xpath=/html/body/div/div[2]/div/div[2]/div[2]/form/div[2]/div/div/input,并在文本框内输入密码,如图5-9第七行。
(8)关键字close all browsers,关闭所有的浏览器,在上面的步骤全部通过的情况下,打开的浏览器便会被关闭。相反,如果用例不通过,浏览器不会被关闭,如图5-9第八行。
下面通过4个页面对网站进行界面测试分析,主要为以下几个页面:
表5-10测试结果
用例总数 |
通过的用例数 |
失败的用例数 |
|
登录 |
9 |
7 |
2 |
题库 |
16 |
14 |
2 |
课程 |
15 |
12 |
3 |
讨论区 |
17 |
16 |
1 |
在对米莱虾の作品展示小屋进行自动化测试的过程中,对软件测试和自动化测试有了更深的认识和了解。本文通过对米莱虾の作品展示小屋进行分析,并利用自动化测试软件,对这个网站,分为性能测试、接口测试、界面测试(由于自己设计的网站登录方式过于复杂,用牛客竞赛网站进行了替代)三个方面进行了测试。
在性能测试过程中,通过模拟不同数量的用户,同时对网站发起访问,尽量模拟更加真实的使用场景,组合出更真实的场景,最终收集整理测试数据。在测试的过程中,首先需要搭建测试场景,设计测试场景,最后运行,每一步都需要细心的去完成。最终得出结论,米莱虾の作品展示小屋在1000个用户同时在较短的时间内,并发登录的时候,服务器的响应就会出现问题,出现请求失败的情况。而且随着并发数量的增大,服务器的响应时间也逐渐增大。服务器的局限性和性能,限制了网站的性能。
接口测试和界面测试则更接近于用户实际的操作,通过对不同接口和页面的测试,可以看出米莱虾の作品展示小屋的基本功能比较完善,符合用户实际的使用场景。
通过对米莱虾の作品展示小屋的自动化测试,我发现之前对于自动化测试还是存在很大的误区,认为软件测试是一件非常简单的工作,只要学会一些操作,会写脚本即可,但通过对这个网站的实际操作,我发现软件测试其实不是一件简单的工作,特别是自动化测试。对于自动化测试,我还有很多需要学习。在做测试之前,首先需要对网站有足够的了解,将网站分析透彻,只有这样,才能够开始测试任务,从编写测试方案,编写测试用例,再到最终的执行测试,执行完测试之后,还需要对测试结果进行分析整理,对测试过程进行总结,只有这样才能不断地进步。
软件的自动化测试,对社会有着深远的影响,自动化能节省人力、物力和财力,在节约资源的同时,实现资源的最大化利用。法律上,自动化测试工具的使用,使测试人员更加的专业化,更加的遵守法律法规。
对于米莱虾の作品展示小屋的自动化测试是分步完成的,本文利用自动化测试工具对网站进行了自动化的测试,还有很多不足之处,今后不断学习。
[1]杨沁晓,郝小敏,严航.浅谈手机软件测试用例的设计方法及技巧[J].电子测试,2021(21):123-124+67.
[2]姚香娟,田甜,党向盈,孙百才,巩敦卫.智能优化在软件测试中的应用综述[J/OL].控制与决策:1-10[2021-11-17].https://doi.org/10.13195/j.kzyjc.2021.1361.
[3]仵引波,马俊臣.基于锐华和麒麟操作系统应用软件开发及测试系统设计[J].中国科技信息,2021(21):89-90.
[4]齐齐乐.关于嵌入式计算机软件测试关键技术的研究[J].电子制作,2021(21):99-100+78.
[5]胡凡玮,谢静思.网络软件工程技术的发展研究[J].中国信息化,2021(10):49-50.
[6]王芬.软件测试工具在超星教学系统的应用研究[J].电脑编程技巧与维护,2021(10):35-36.
[7]张竞文.软件单元测试阶段指针的验证[J].电脑编程技巧与维护,2021(10):57-59.
[8]张辉.Web系统的性能测试技术研究[J].计算机时代,2021(10):28-31.
[9]罗浩榕,朱卫星,史涯晴,万进勇.知识库系统在软件测试复用中的应用研究[J].软件导刊,2021,20(10):242-246.
[10]陈惠红,杨鹏.高职软件测试人才培养的产业连通育人实践[J].计算机教育,2021(10):107-112.
[11]周璨.基于人工智能软件测试的探索[J].信息记录材料,2021,22(10):239-240.
[12]李想.计算机软件开发中的数据库测试技术研究[J].电子技术与软件工程,2021(19):39-40.
[13]彭珲,张晓娜,张翔,李晓利.基于1553B总线的机载显示器嵌入式软件测试技术研究[J].数字通信世界,2021(10):85-86.
[14]魏波,张慧颖,司倩然.基于数据源识别和驱动分析的软件系统测试方法[J].计算机测量与控制,2021,29(09):73-77.
[15]陈君,冯飞.嵌入式软件自动化测试研究[J].工业控制计算机,2021,34(09):15-16.
[16]张超永,王振,王鹏,浮明军.人工智能电缆隧道移动巡检软件测试研究及实施[J].工业控制计算机,2021,34(09):34-36.
[17]杜以团,严彬宾,王今朝.软件测试在软件质量提升中的价值探讨[J].电子质量,2021(09):85-88.
[18]郭园园.计算机软件测试及风险管理[J].软件,2021,42(09):107-109.
[19]郭栋,刘文红,陈聪,彭普,周东红.开发过程和测试结果的软件质量评价研究[J].品牌与标准化,2021(05):45-48.
[20]师洛蓓.基于软件测试的质量度量应用[J].电子技术与软件工程,2021(18):38-39.
[21]姜琼妃.基于嵌入式计算机软件测试关键性技术研究[J].电子测试,2021(17):88-90.
[22]丘文胜.浅谈智能网联系统自动化测试[J].时代汽车,2021(18):10-11.
[23]金培勋.软件工程中软件测试技术的研究[J].信息记录材料,2021,22(09):98-99.
[24]Esnaashari Mehdi,Damia Amir Hossein. Automation of software test data generation using genetic algorithm and reinforcement learning[J]. Expert Systems With Applications,2021,183:
[25]Dirk Beyer. First international competition on software testing[J]. International Journal on Software Tools for Technology Transfer,2021(prepublish):
[26]Memon Atif M.,Cohen Myra B.. The IEEE 12th International Conference on Software Testing, Verification & Validation[J]. Software Testing, Verification and Reliability,2021,31(4):
[27]Sun Tingting,Lv Xingjun,Cai Yakun,Pan Yuqing,Huang Jianchang,Satapathy Suresh Chandra,Agrawal Rashmi,García Díaz Vicente. Software test quality evaluation based on fuzzy mathematics[J]. Journal of Intelligent & Fuzzy Systems,2021,40(4):
[28]Min J L,Rajabi N,Rahmani A. Comprehensive study of SIR: Leading SUT repository for software testing[J]. Journal of Physics: Conference Series,2021,1869(1):
[29]Nuh Jamal Abdullahi,Koh Tieng Wei,Baharom Salmi,Osman Mohd Hafeez,Kew Si Na. Performance Evaluation Metrics for Multi-Objective Evolutionary Algorithms in Search-Based Software Engineering: Systematic Literature Review[J]. Applied Sciences,2021,11(7):