Selenium自动化测试框架(附教程+源码)

说起自动化测试,我想大家都会有个疑问,要不要做自动化测试? 自动化测试给我们带来的收益是否会超出在建设时所投入的成本,这个嘛别说是我,即便是高手也很难回答,自动化测试的初衷是美好的,而测试工程师往往在实现 过程中花费了很多成本、精力,而最终以失败告终。 失败的原因会很多,我总结几项:

  1. 太过依赖测试工具,高估了工具的力量,最终会以失望告终。
  2. 项目紧急的情况,为了规避那些多余的环节,干脆人工测试,结果整个链路中断。
  3. 研发和测试人员不能很好的交互,如果这两个角色之间有了一道防火墙,那别说自动化测试了,手工测试也不会有好的效果。测试人员可以把研发想象成自己的女朋友,努力培养相互之间的感情。
  4. 自动化测试人员实力被低估而导致的情绪低落,这个问题在所有岗位上都会发生,当然要看领导重视程度了。
  5. 资源不够,公司不舍得资源投入,或者蹑手蹑脚,那就不要浪费时间了。
  6. 太高的期望,过低的回报。

现在国内没有几家公司说能玩转自动化测试的,在看国外那些耳熟能详的企业像google,Microsoft,它们反而搞得热火朝天的。可笑的是在微软中国的测试部门工 作过几年的测试经理,出来搞个什么《微软自动化测试体系最佳实践课程》,就能忽悠国内的那些知名的企业掏钱去听,我这也不是说他们的东西不好, 只是希望我们自己也能够重视起来,要知道人家“卓越”体系也是由那些“专业团队”花了很多的时间和精力才搭建起来的,所以先不说收益如何,即便是为了这一 个美好的初衷,我们也应该去尝试一下,即使是失败。

我也做了几年的测试,但也是最近才开始研究自动化测试的,在工作中多多少少接触过几种常见的工具,如silktest和Selenium,搞过测试的应该都听过,我最近刚刚为现有项目搭建了一个测试框架,为其中的部分模块编写了一些测试case,收益还是颇丰的,先说说这两种工具吧。

SilkTest是商业工具,想使用是需要花钱的,但是有现成的平台和框架,也比较容易学习,可以基于windows,unix平台。ie,firefox(部分)浏览器。可以录制回放,对象识别或者手工编程,也能基于数据驱动,关键字驱动等等测试框架。SilkTest里面的语言4test其实是类C(也有Silk4J,用Java写),编程能力相对较强。

Selenium是免费的,需要有类似ide(如eclipse),原先是thoughtworks的几个牛人开发的,现在google维护(人都跳槽过去了)。可以基于windows,unix,mac等平台。ie,firefox等浏览器。 测试团队,经费不足,能力很强(Java上面),有对测试平台和环境要求比较高(ie,firefox,safari等等),那么Selenium是很不错的选择。

今天我就简单入个门,先介绍通过junit+selenium+Coverlipse+ant来搭建一整套自动化测试框架,开始之前我先提出几个问题,请大家根据下面的问题来阅读本篇文章。

  1. 如何录制脚本?
  2. 如何转换成junit脚本?
  3. 如何生成junit日志?
  4. 如何回放selenium及查看回放日志?
  5. 如何查看代码的覆盖率?

同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

软件测试视频教程观看处:

2024年Python自动化测试全套保姆级教程,70个项目实战,3天练完,永久白嫖...

一、工具准备

二、Junit的安装

1. Eclipse本身会自带Junit.jar包,所一般情况下是不需要额外下载junit的。

2. 将junit3的library添加到工程的buildPath中

3. 因为junit的日志是通过Ant来生成的,所以一定要将Junit.jar添加到ant_home里

三、selenium的安装

1. 安装seleniumIDE,打开火狐浏览器,然后进入工具—>添加附件,搜索seleniumIDE

2. 查询出对应的IDE后,点击直接安装,安装结束后重启FireFox,看到下面的菜单说明安装成功

3. 安装selenium-rc,先去http://www.openqa.org/selenium/下载selenium包。用命令行来到解压到文件夹下:d:/autoTesting/selenium-server-standalone-2.0b1.jar目录下

4. 运行java -jar selenium-server-standalone-2.0b1.jar,启动selenium server。为了在运行时应用运行的浏览器与selenium服务的浏览器分开可在其后面加–multiWindow。

5. 在Eclipse创建一个项目,在项目的build path里面加上elenium-server-1.0-beta-1下selenium-server.jar、selenium-java-client-driver-1.0-beta-1下selenium-java-client-driver.jar(这两个在刚解压的包里面)和eclipse/plugins/org.junit_3.8.1下junit.jar。

6. 将制定的Jar包导入到工程里,然后你就可以集成并使用相应的API,编写自己的测试CASE了。

四、Coverlipse的安装

1. 直接通过Eclipse即可安装,步骤如下

  • In Eclipse, click Help -> Software Updates -> Find and Install.
  • In the dialog, select Search for new features to install, then Next.
  • In the next step, add a New Remote Site. Name it "Coverlipse update site", the URL is "http://coverlipse.sf.net/update/".
  • Press Finish. Eclipse now searches for the Coverlipse feature to install and shows that to you.

2. 配置Coverlipse以获取代码覆盖

3. 一旦单击了Run,Eclipse会运行Coverlipse并在源代码(如图7所示)中嵌入标记,该标记显示了具有相关JUnit测试的代码部分

4. Coverlipse生成的具有嵌入类标记的报告

5. 正如您所见,使用Coverlipse Eclipse插件可以更快地确定代码覆盖率。例如,这种实时数据功能有助于在将代码签入CM系统前更好地进行测试。

五、ANT安装,eclipse自带,只需要配置环境变量ant_home即可。

六、创建一个案例

1. 创建一个工程testSelenium安装下面目录结构

2. 录制脚本,打开Firefox浏览器,进入selenium IDE菜单 

3. 输入相应录制的地址,点击红色按钮,开始录制

4. 将脚本转换成junit代码,然后将其拷贝到测试类中做为测试CASE编码的雏形。

七、如何查看日志,这里日志分两类

  • Junit日志,通过junit写的断言,和标准输出,这些操作产生的日志记录。
  • Selenium日志,当运行junit脚本时,selenium相关的脚本就会产生回放日志,例如打开界面的url,标准输入,输出等信息。

虽然这两种日志没有交集,需要分开查看。但一般情况下我们只需要观察Selenium日志已经足够用了,与其相比Junit日志更适用于编码阶段。

1. Junit日志,只需要配置脚本build-selenium.xml,如下

<project name="seleniumTest"default="junit" basedir=".">
 
      <propertyenvironment="env" />
 
      <conditionproperty="ia.home" value="${env.IA_HOME}">
 
             <issetproperty="env.IA_HOME" />
 
      </condition>
 
      <propertyname="run.classpath" value="../class">
 
      </property>
 
      <propertyname="run.srcpath" value="../testSelenium">
 
      </property>
 
      <propertyname="test.xml" value="../xml">
 
      </property>
 
      <propertyname="test.report" value="../report">
 
      </property>
 
      <propertyname="lib.dir" value="../lib" />
 
      <pathid="compile.path">
 
             <filesetdir="${lib.dir}">
 
                    <includename="junit.jar" />
 
                    <includename="ant.jar" />
 
             </fileset>
 
      </path>
 
      <targetname="init">
 
             <deletedir="${run.classpath}" />
 
             <mkdirdir="${run.classpath}" />
 
             <deletedir="${test.report}" />
 
             <mkdirdir="${test.report}" />
 
             <deletedir="${test.xml}" />
 
             <mkdirdir="${test.xml}" />
 
      </target>
 
      <targetname="compile" depends="init">
 
             <javacdestdir="${run.classpath}" srcdir="${run.srcpath}" />
 
      </target>
 
      <targetname="junit" depends="compile">
 
             <junitprintsummary="false">
 
                    <classpathpath="${run.classpath}">
 
                           <pathrefid="compile.path" />
 
                    </classpath>
 
                    <formattertype="xml" />
 
                    <batchtesttodir="${test.xml}">
 
                           <filesetdir="${run.classpath}">
 
                                  <includename="**/Test*.class" />
 
                                  <includename="**/*Test.class" />
 
                           </fileset>
 
                    </batchtest>
 
             </junit>
 
             <junitreporttodir="${test.xml}">
 
                    <filesetdir="${test.xml}">
 
                           <includename="TEST-*.xml" />
 
                    </fileset>
 
                    <reportformat="frames" todir="${test.report}" />
 
             </junitreport>
 
      </target>
 
</project>

2. 运行ant脚本以后,就可以生成相应的junit日志。

3. selenium日志

当运行junit脚本时,selenium相关的脚本就会产生回放日志,但默认记录的东西可读性太差了,所以我们使用loggingSelenium(LoggingSelenium - Usage) ,可以将每个case可以生成记录selenium命令的html格式的result了。

4. plugin的下载地址:

Download logging-selenium-1.2.jar (LoggingSelenium)

5. 安装方法:只需要将下载的logging-selenium-1.2.jar导入到工程里即可。

6. 编写代码如下

@Before
 
public void setUp() {
 
   finalString resultPath ="absolute-path-to-where-your-result-will-be-written";
 
   finalString resultHtmlFileName = resultPath + File.separator +"result.html";
 
   finalString resultEncoding = "UTF-8"
 
   loggingWriter = LoggingUtils.createWriter(resultHtmlFileName,resultEncoding);
 
 
 
   LoggingResultsFormatter htmlFormatter =
 
       newHtmlResultFormatter(loggingWriter, resultEncoding);
 
   htmlFormatter.setScreenShotBaseUri(""); // this is for linkingto the screenshots
 
   htmlFormatter.setAutomaticScreenshotPath(resultPath);
 
   // wrapHttpCommandProcessor from remote-control
 
   LoggingCommandProcessor myProcessor =
 
       new LoggingCommandProcessor(newHttpCommandProcessor(your-configs), htmlFormatter);
 
   selenium= new LoggingDefaultSelenium(myProcessor);
 
   selenium.start();
 
}
 
@After
 
public void tearDown() {
 
   selenium.stop();
 
   try {
 
       if(null != loggingWriter) {
 
           loggingWriter.close();
 
       }
 
   } catch(IOException e) {
 
       //do nothing
 
   }
 
}

7. 运行成功以后在指定的目录中生成相应的reports

八、框架优势

1.记录测试的过程,所见即是所得,selenium的所有内部程序都是用Javascipt编写的,比较灵活;

2.可以通过selenium IDE录制脚本,脚本可以回放,可以作为junit编码的雏形;

3.支持多种操作系统;

4.支持多种编码语言。JAVA,.NET, Perl,Python, Ruby

九、框架劣势

1.selenium的录制工具只能安装在firefox浏览器上, 如果系统界面不被firefox支持,那就要花费一定的时间去手写case。 不过最近听说有一个工具叫360WebTester ,可以支持IE的录制,而且是国产的评价还不错,有时间我要研究一下。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/269502.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏行业变天,游戏股遭暴击,腾讯网易等股票还能投资吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 国家新闻出版署发布游戏新规 12月22日国家新闻出版署发布了《网络游戏管理办法》&#xff08;草案征求意见稿&#xff09;&#xff0c;其中提到网络游戏不得设置每日登陆、首次充值、连续充值等诱导性奖励&#xff0c;而且…

Ubuntu 22.04.3 Server 设置静态IP 通过修改yaml配置文件方法

目录 1.查看网卡信息 2.修改yaml配置文件 3.应用新的网络配置 4.重新启动网络服务 文章内容 本文介绍Ubuntu 22.04.3 Server系统通过修改yaml配置文件配置静态 ip 的方法。 1.查看网卡信息 使用ifconfig命令查看网卡信息获取网卡名称​ 如果出现Command ifconfig not fo…

A股风格因子看板 (2023.12第14期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第14期&#xff0c;指数组合数据截止日2023-11-30&#xff0c;要点如下 近1年A股风格因子检验统…

Gradle下载地址

Gradle下载地址 Gradle是一个基于JVM的构建工具&#xff0c;是一款通用灵活的构建工具&#xff0c;Gradle也是第一个构建集成工具&#xff0c;与ant、maven、ivy有良好的相容相关性。支持maven&#xff0c; Ivy仓库&#xff0c;支持传递性依赖管理&#xff0c;而不需要远程仓库…

涵盖多种功能,龙讯旷腾Module第七期:超快动力学过程

Module是什么 在PWmat的基础功能上&#xff0c;我们针对用户的使用需求开发了一些顶层模块&#xff08;Module&#xff09;。这些Module中的一部分是与已有的优秀工具的接口&#xff0c;一部分是以PWmat的计算结果为基础得到实际需要的物理量&#xff0c;一部分则是为特定的计…

SSRF中Redis的利用

1. SSRF 1.1 什么是SSRF SSRF(Server-Side Request Forgery,服务器请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况下,SSRF攻击的目标是外网无法访问的内网系统(因为请求是由服务端帮我们发起的&#xff0c;所以我们可以通过它来向其所在的内网机器发起…

[音视频]H264码流分析工具

[音视频]H264码流分析工具 CTI-TS EasyICE Elecardstreameyetools VideoEye H264VideoESViewer 学习H264码流&#xff0c;H264码流进行分析 http://blog.csdn.net/leixiaohua1020/article/details/17933821 H264BSAnalyzer https://github.com/latelee/H264BSAnalyzer.g…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中&#xff0c;我们经常会用到事件总线&#xff0c;SpringBoot通过事件多播器的形式为我们提供了一个事件总线&#xff0c;但是在开发中我们经常会用到其他的实现&#xff0c;比如Guava、Disruptor的。我们将基于Spri…

社交媒体的力量:独立站如何利用海外社媒进行引流

随着全球数字化的浪潮&#xff0c;社交媒体已经成为连接世界的纽带&#xff0c;为企业和个人提供了无限的可能性。对于独立站而言&#xff0c;通过善用海外社交媒体平台&#xff0c;不仅能够拓展用户群体&#xff0c;还能够实现更广泛的品牌曝光和业务引流。本文Nox聚星将和大家…

labelme目标检测数据类型转换

1. labelme数据类型 LabelMe是一个开源的在线图像标注工具&#xff0c;旨在帮助用户创建和标记图像数据集。它提供了一个用户友好的界面&#xff0c;让用户可以直观地在图像上绘制标记框、多边形、线条等&#xff0c;以标识和注释图像中的对象或区域。 GitHub&#xff1a;http…

孔夫子二手书采集

文章目录 项目演示软件采集单本数据网页搜索数据对比 使用场景概述部分核心逻辑Vb工程图数据导入与读取下拉框选择参数设置线程 使用方法下载软件授权导入文件预览处理后的数据 项目结构附件说明 项目演示 操作视频详见演示视频&#xff0c;以下为图文演示 软件采集单本数据 …

unity中使用protobuf工具将proto文件转为C#实体脚本

unity中使用protobuf工具将proto文件转为C#实体脚本 介绍优点缺点Protobuf 为什么比 XML 快得多&#xff1f;Protobuf的EncodingProtobuf封解包的过程通常编写一个Google Protocol Buffer应用需要以下几步&#xff1a; Protostuff是什么Protobuf工具总结 介绍 protobuf也就是G…

设计模式--适配器模式

实验8&#xff1a;适配器模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解适配器模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用适配器模式解决实际问题。 [实验任务]&#xff1a;双向适配器 实现一个双向…

Java学习时间和日期

1 常用类 1.1 Date 表示日期 具体类 设置时间 1.2 Calendar 表示日历 抽象类 设置日历的设定日期 void set(int year,int month,int date); void set(int year,int month, int date, int hour, int minute,int second); void setTime(Date d); int get(int field)&#…

直播的内容多样性

直播&#xff0c;作为一种新兴的媒体形式&#xff0c;已经深入到我们生活的方方面面。其内容多样性是吸引观众的关键因素之一。以下是直播内容多样性的几个主要方面: 1.主题多样性:直播涵盖的主题非常广泛&#xff0c;包括但不限于娱乐、游戏、体育、教育、招聘、新闻、金融、…

VS2020使用MFC开发一个贪吃蛇游戏

背景&#xff1a; 贪吃蛇游戏 按照如下步骤实现:。初始化地图 。通过键盘控制蛇运动方向&#xff0c;注意重新设置运动方向操作。 。制造食物。 。让蛇移动&#xff0c;如果吃掉食物就重新生成一个食物&#xff0c;如果会死亡就break。用蛇的坐标将地图中的空格替换为 #和”将…

Druid源码阅读-DruidStatInterceptor实现

上次我们在druid-spring-boot-starter里面看到有一个DruidSpringAopConfiguration的配置类&#xff0c;然后引入了DruidStatInterceptor这样一个切面逻辑。今天我们就来看一下这个类的实现。 DruidStatInterceptor 这个类的包路径下入com.alibaba.druid.support.spring.stat。…

DC电源模块有哪些注意事项和使用技巧?

BOSHIDA DC电源模块有哪些注意事项和使用技巧&#xff1f; DC电源模块的注意事项和使用技巧包括以下几点&#xff1a; 1. 选择适当的电源模块&#xff1a;根据需要选择合适的电源模块&#xff0c;考虑电压、电流和功率等参数。确保模块能够满足所需的电力要求。 2. 输入电压范…

销售如何挖掘客户?有哪些方法?

在当今竞争激烈的市场环境中&#xff0c;客户资源的挖掘已经成为企业生存和发展的关键。销售人员需要掌握一定的技巧和方法&#xff0c;以有效地发掘潜在客户&#xff0c;提高销售业绩。以下分享一些挖掘客户的常用方法&#xff0c;帮助销售人员更好地开展业务。 一、了解客户需…

IP编址,IP地址介绍与子网划分方法

网络层位于数据链路层与传输层之间。网络层中包含了许多协议&#xff0c;其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外&#xff0c;还必须理解IP编址以及如何合理地使用IP地址来设计网络。 上层协议类型 以太网帧中的Typ…