使用Maven进行Selenium测试自动化

今天,我想帮助您更好地管理自动GUI测试(Selenium)。 在过去,我已经看到人们处理此问题的许多不同方式。 有些人只是用Selenium-IDE编写普通HTML TestCases,将其存储在HDD上的某个位置,并在需要时手动运行。 其他人甚至不使用Selenium-IDE。 他们为Example编写纯Java,并使用JUnit自动执行。 我今天的解决方案介于两者之间。

前提

  • 我想要用Selenium-IDE创建的纯HTML TestCases。 这样一来,几乎没有编程技能的人仍然可以创建它们。
  • 我希望这些GUI测试在构建过程中自动运行,因此我的CI工具可以在发生错误时通知我。
  • 由于测试随源一起增长,因此我还希望项目存储库中的Versioncontrol下的所有TestCases。
  • 我希望付出最少的努力,取得最高的结果。 因此,我不想从HTML TestCases中导出JUnit测试,因为它可能是重复的,并且我想坚持DRY原则。

首先,我在我的项目中为Selenium-Tests创建一个文件夹。

资料夹结构

文件夹结构

TestSuite示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><meta content="text/html; charset=UTF-8" http-equiv="content-type"/><title>Test Suite</title>
</head>
<body>
<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody><tr><td><b>Test Suite</b></td></tr><tr><td><a href="./SomeTest1.html">SomeTest1</a></td></tr><tr><td><a href="./SomeTest2.html">SomeTest2</a></td></tr></tbody>
</table>
</body>
</html>

示例测试

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><link rel="selenium.base" href=""/><title>SomeTest1.html</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1"><thead><tr><td rowspan="1" colspan="3">SomeTest1</td></tr></thead><tbody><tr><td>open</td><td>/</td><td></td></tr><tr><td>waitForElementPresent</td><td>//div[@id='someId']</td><td></td></tr><tr><td>click</td><td>css=button.create</td><td></td></tr><!-- Some Steps --><tr><td>assertText</td><td>//div[@id='someId']</td><td>${expectedText}</td></tr></tbody>
</table>
</body>
</html>

设置Web服务器

所以我有我的TestSuite。 但是我该如何运行它们? 最重要的是,它应该在Maven Build Process中运行,因此它也可以在Jenkins-CI或其他任何版本上运行。 在针对实际运行的WebApp进行测试时,这是每个定义的IntegrationTest。 在Maven中,我们有机会在集成测试阶段中运行此类测试。 如果您想了解有关Maven Build生命周期及其各个阶段的更多信息,请查看this 。 因此,我们需要某种WebServer来运行我们的WebApp,否则测试将无法进行。 WebServer应该在集成测试阶段之前启动,然后再停止。 例如,我们可以使用Tomcat7或Jetty 。 在此示例中,我将使用tomcat7-maven-plugin。 我将pom.xml配置为启动Tomcat7 pre-integration-test

<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.0</version><executions><execution><id>tomcat-run</id><goals><goal>run-war-only</goal></goals><phase>pre-integration-test</phase><configuration><port>8080</port><fork>true</fork></configuration></execution><execution><id>tomcat-shutdown</id><goals><goal>shutdown</goal></goals><phase>post-integration-test</phase></execution></executions>
</plugin>

如果在CI服务器上运行多个项目,则可以考虑为每个项目使用不同的端口号。

最后:运行测试

最后但并非最不重要的一点是,我们需要运行测试。 幸运的是,有可用的selenium-maven-plugin可以完成这项工作。

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>selenium-maven-plugin</artifactId><version>2.3</version><configuration><browser>*firefox</browser><suite>src/test/selenium/TestSuite.html</suite><startURL>http://localhost:8080</startURL></configuration><executions><execution><id>run-selenium-tests</id><phase>integration-test</phase><goals><goal>selenese</goal></goals></execution></executions>
</plugin>

现在,每当我们在控制台中执行mvn clean verify或什至mvn clean install时,都会运行测试并将报告存储在目标目录中。 这也将由您的CI工具完成。

结论

我们确实有完整干净的安装程序。

  • 我们有一个地方可以存储我们的测试,
  • 它们在Sourcecode和Version控件内
  • 它们可以由CI-Tools自动运行
  • 甚至非开发人员也可以添加新的TestCases

顺便说一句:如果某些事情没有按预期进行,请不要放弃。 Selenium似乎有点小问题,有时您必须掏点钱才能解决问题。 但它确实有效,我想通了。

参考: Be Be a Better Developer博客上的JCG合作伙伴 Gregor Riegler 提供的MavenSelenium测试自动化 。

翻译自: https://www.javacodegeeks.com/2013/07/selenium-test-automation-with-maven.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年工业机器人销量排位_长安-2018年11月汽车销量 细分销量

根据盖世汽车社区-销量数据库查询&#xff0c;为广大汽车行业人士整理了长安-2018年11月细分销量(按变速箱)数据如下:变速箱类型九月十月十一月累计4AT[TS-40/Ss-II]4,6554,0545,34814,0575AMT[AF512]11711202295DCT[DF515]56955139915195MT[MF510]2,34298475040765MT[MF515/TM…

OFDM技术及其应用

OFDM简介 OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术&#xff0c;实际上OFDM是MCM(Multi Carrier Modulation)&#xff0c;多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰弱的能力&#xff0c;能够支持多用户接入…

Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

在了解Spring框架中Repository Component &#xff0c; Service Controller &#xff0c; Repository Controller和Repository批注之间的区别之前&#xff0c;了解Component批注在Spring中的作用很重要。 在Spring的初始发行期间&#xff0c;所有bean都用于在XML文件中声明。 对…

信号与系统 chapter13 阶跃响应的定义与求法

定义 阶跃响应是阶跃函数ξ(t)\xi(t)ξ(t)所引起的***零状态响应&#xff0c;***记为g(t)g(t)g(t) 这玩意的求法与咱们前面画信号与系统框图那一部分有异曲同工之妙信号与系统chapter8 有两种方法 经典法 利用单位阶跃函数与单位冲激响应之间的关系 看一道例题&#xff1a…

语音识别插件_2D动画唇动合成,根据语音自动生成动画人物口型

蕾师师 发自 凹非寺量子位 报道 | 公众号 QbitAI只需要输入一段语音&#xff0c;代码会自动生成与之相对的动画唇形。还是毫无违和感的那种。这是一个在GitHub上拥有501星的开源项目&#xff0c;叫做Rhubarb Lip Sync。它既可以是Windows和OS X命令行工具&#xff0c;也可以作为…

位同步技术中的比相法

什么是比相法&#xff1f;与滤波法相比有什么区别&#xff1f; 滤波法与比相法都是位同步技术中的直接法。滤波法是对接收到的数字信号进行变换处理&#xff0c;经过变换处理的数字信号中含有位定时分量&#xff0c;再通过窄带滤波器提取该分量&#xff0c;从而实现位同步&…

安装指定版本pytorch_Ubuntu16.04安装pytorch(七)

Ubuntu16.04自带python 2.7.12 和python 3.5.2&#xff0c;不需要自己装python第一步&#xff1a;安装pip3sudo apt-get install python3-pip顺便安装numpypip3 install numpy第二步&#xff1a;配置pip使用的镜像源---------------------------------------------------------…

weblogic jmx_在WebLogic Server上驯服JMX

weblogic jmx让我们先假设几件事&#xff1a; 我假设您听说过Java的JMX功能并熟悉它的功能&#xff08;远程公开和管理您的服务&#xff09;。 您应该知道默认的JVM将具有一个可以注册MBean的Platform MBeanServer实例。 您可以使用JDK中的jconsole命令查看它们。 到目前为止…

基于锁相环的定时误差调整

VCO数字实现方法 可变分频法&#xff1a;使用一个高速率时钟作为抽样参考时钟&#xff0c;通过一个计数器对这个高速率时钟进行分频N\div NN&#xff0c;通过改变分频比实现控制特定的速率 抽样时钟超前&#xff1a;N→N1N\rightarrow N1N→N1分的更多 抽样时钟滞后&#xff1a…

后怎么恢复_爬山后小腿肌肉酸痛怎么办 ?这样来恢复!|新生活公社

爬山后小腿肌肉酸痛怎么办 &#xff1f;这样来恢复&#xff01;在爬山之后腿疼的话可以用热敷、按摩、泡脚、拉伸等等方法来帮助自己恢复&#xff0c;爬山之后腿疼是正常的现象&#xff0c;我们在爬山之后要及时拉伸。爬山后小腿肌肉酸痛怎么办1热敷这是很有效的又简单的方法&a…

Java 9 JShell示例:集合静态工厂方法

这篇文章继续了My My Java 9 Features博客文章中对Java9功能的探索。 在这里&#xff0c;我们在List&#xff0c;Set和Map接口中试验Java9 Collections静态工厂方法。 集合静态工厂方法 Java9使用其新的静态工厂方法使创建不可变列表更加容易 有12种Set.of和List.of方法– L…

java实现次方的运算_Java中对于位运算的优化以及运用与思考

引言随着JDK的发展以及JIT的不断优化&#xff0c;我们很多时候都可以写读起来易读但是看上去性能不高的代码了&#xff0c;编译器会帮我们优化代码。之前大学里面学单片机的时候&#xff0c;由于内存以及处理器性能都极其有限(可能很多时候考虑内存的限制优先于处理器)&#xf…

三种分集接收技术

选择性合并 在多支路信号中&#xff0c;选取信噪比最高的支路信号作为输出信号、 最大比值合并 在接收端由L个统计不相关的分集支路经过相位矫正&#xff0c;赋予适当的加权再进行相关检测&#xff0c;信噪比小的支路权重小 等增益合并 在上述最大比值合并中&#xff0c;等…

dep指定版本 go_Go 1.12 版本的新特性

Go 1.12昨天&#xff0c;Go 官方发布 1.12 版本。本文介绍下 Go 1.12 版本变更的内容。Go 1.12 正式版发布了&#xff0c;距离上个正式发布版 Go 1.11 已经过去半年。跟往常一样&#xff0c;Go 1.12 保持了 兼容性承诺&#xff0c;预期所有 Go 程序会像之前一样正常编译。新版本…

信号与系统 chapter14 卷积积分的应用

卷积的时移特性 若有一个卷积&#xff1a; f(t)f1(t)∗f2(t)f(t)f_1(t)*f_2(t)f(t)f1​(t)∗f2​(t)&#xff0c;卷积右边的函数都发生了时移&#xff0c;分别为t1,t2t_1,t_2t1​,t2​&#xff0c;则有&#xff1a; 不要管怎么来&#xff0c;记下就完事了 例题&#xff1a; …

java null转换jason_Java笔记Java常量、变量

“要成为绝世高手&#xff0c;并非一朝一夕&#xff0c;除非是天生武学奇才&#xff0c;但是这种人…万中无一”——包租婆这道理放在Java语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数&#xff0c;我们大多数人想要从java语言小白进阶到高手&#xff0c;需要经…

通信系统中的多普勒频移

多普勒现象在通信系统中的表现 当终端在运动特别是在高速运动时&#xff0c;移动终端和基站接收端的信号频率会发生变化&#xff0c;其计算公式如下图所示&#xff1a; fdfc∗v∗cosθf_d\frac{f}{c}*v*cos\thetafd​cf​∗v∗cosθ θ\thetaθ为移动台移动方向与入射方向的夹…

mockito_Mockito – JAXB的RETURNS_DEEP_STUBS

mockito很抱歉没有写一段时间&#xff0c;但是我正忙于为DZone编写JBoss Drools Refcard&#xff0c;而且我正在写一本有关Mockito的书&#xff0c;因此我没有太多时间来写博客了…… 无论如何&#xff0c;最近在我当前的项目中&#xff0c;我对使用Mockito和JAXB结构进行单元…

常见扩频序列

扩频通信就要借助扩频序列 对扩频序列的要求如下&#xff1a; 具有尖锐的自相关特性有尽可能小的互相关特性&#xff0c;最好为0序列平衡&#xff0c;0与1的数量尽可能一样多在扩频序列族中有数目足够多的序列可供选用有尽可能大的序列复杂度 常见的几种扩频序列 PN序列 第一…

python3字符串拼接_Python3基础 str + 字符串变量拼接

????? Python : 3.7.0?????? OS : Ubuntu 18.04.1 LTS?????? IDE : PyCharm 2018.2.4????? Conda : 4.5.11???typesetting : Markdown?code[email protected]:~$ source activate py37(py37) [email protected]:~$ ipythonPython 3.7.0 (defaul…