使用Maven进行硒测试自动化

今天,我想帮助您更好地管理自动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验证甚至mvn clean安装 ,都会运行测试并将报告存储在目标目录中。 这也将由您的CI工具完成。

结论

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

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

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

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

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

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

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

相关文章

js小练习题

1.2018年01月5日 11:40:30 星期三 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>Title</title>6 <script>7 8 function getCurrentDate(){9 //1. …

OC之OBJC2_UNAVAILABLE

OC之OBJC2_UNAVAILABLE】 1、What is OBJC2_UNAVAILABLE macro mean&#xff1f; 意即在OBJC2.0中&#xff0c;这些东西将被删除。 转自 https://www.cnblogs.com/tekkaman/archive/2013/04/24/3040727.html转载于:https://www.cnblogs.com/-WML-/p/9269067.html

使用prismjs为网站添加代码高亮功能

prismjs 是一款轻量、可扩展的代码语法高亮库&#xff0c;使用现代化的 Web 标准构建&#xff0c;使用 Prismjs 可以快速为网站添加代码高亮功能&#xff0c;支持超过113中编程语言&#xff0c;还支持多种插件&#xff0c;是简洁、高效的代码高亮解决方案。科技爱好者博客就是使…

Mockito – JAXB的RETURNS_DEEP_STUBS

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

协作机器人(Collaborative-Robot)安全碰撞的速度与接触力

协作机器人&#xff08;Collaborative-Robot&#xff09;的安全碰撞速度和接触力是一个非常重要的安全指标。在设计和使用协作机器人时&#xff0c;必须确保其与人类或其他物体的碰撞不会对人员造成伤害。 对于协作机器人的安全碰撞速度&#xff0c;一般会设定一个上限值&…

jackson - @JsonProperty的使用

jackson的maven依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.3</version> </dependency> 所以引入这一个依赖就可以了 JsonProperty 此注解用于属…

python 表达式求值数据结构_python 数据结构与算法

python 数据结构与算法1 python常见数据结构性能1.1 List1.1.1 安索引取值和赋值1.1.2 列表append和__add__()1.1.3 使用timeit模块测试执行时间1.1.4 List基本操作的大O数量级1.2 Dict1.2.1 dict数据类型2 线性结构 Linear Structure2.1 栈Stack2.1.1 抽象数据类型Stack2.1.2 …

CSS3新特性罗列

接触CSS3这么久了&#xff0c;总是到要用的时候直接拿来用&#xff0c;却没有好好地总结归纳一下&#xff0c;那就在这里好好梳理一下吧。 CSS3边框&#xff1a; 圆角边框&#xff1a; 关键&#xff1a;border-radius <!DOCTYPE html> <html> <head> <…

Log4j 2:性能接近疯狂

最近&#xff0c;Apache社区中一位受人尊敬的成员尝试了Log4j 2并在Twitter上写道&#xff1a; TheASF &#xff03;log4j2摇摇欲坠 &#xff01; 性能接近疯狂^^ http://t.co/04K6F4Xkaa — Mark Struberg&#xff08;struberg&#xff09; 2013年5月7日 &#xff08;来自M…

Uncaught SyntaxError: Invalid Unicode escape sequence异常处理

今天碰到一个问题&#xff0c;页面报错&#xff1a;Uncaught SyntaxError: Invalid Unicode escape sequence ,{index:operate,name:operate,label:<s:text name"com.vrv.cems.ptp.installSoft.operate"></s:text>,width:getPerWidth(0.1),formatter:fun…

26、jQuery

一. jQuery简介 (一) jQuery是什么&#xff1a; 是一个javascript代码仓库 是一个快速的简洁的javascript框架&#xff0c;可以简化查询DOM对象、处理事件、制作动画、处理Ajax交互过程。 (二) jQuery优势 体积小&#xff0c;使用灵巧(只需引入一个js文件)方便的选择页面元素(模…

玩转ajax

1.什么是ajax&#xff1f; Ajax 是 Asynchronous JavaScript and XML&#xff08;以及 DHTML 等&#xff09;的缩写。 2.ajax需要什么基础? HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。 JavaScript 代码是运行 Ajax 应用程序的核心代码&#xff0c;帮助改…

Spring MVC:验证器和@InitBinder

很难想象没有针对用户数据的验证逻辑的Web应用程序。 几乎所有用户的数据都有一些限制&#xff0c;例如&#xff0c;出生日期应由日&#xff0c;月&#xff0c;年等组成。SpringMVC拥有自己的数据验证解决方案&#xff0c;并且在Validator界面的帮助下可用。 Spring MVC Vali…

ADB 调试

1、adb简介 adb的全称为Android Debug Bridge&#xff0c;就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序&#xff0c;说白了就是debug工具。adb的工作方式比较特殊&#xff0c;采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯&#xff…

margin折叠-从子元素margin-top影响父元素引出的问题

正在做一个手机端电商项目&#xff0c;顶部导航栈的布局是一个div包含一个子div&#xff0c;如果给在正常文档流中的子div一个垂直margin-top&#xff0c;神奇的现象出现了&#xff0c;两父子元素的边距没变&#xff0c;但父div跟着一起往下走了&#xff01; html代码&#xff…

Flexible 弹性盒子模型之CSS flex-shrink 属性

实例 让第二个元素收缩到其他元素的三分之一&#xff1a; 效果预览 div:nth-of-type(2){flex-shrink:3;}浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本号。 紧跟在 -webkit-, -ms- 或 -moz- 后的数字为支持该前缀属性的第一个版本。 属性 flex-shrink29.021.…

idea 新建的java项目没发run_IntelliJ IDEA创建普通的Java 项目及创建 Java 文件并运行的教程...

最近突然看到这篇几年前随手记录的文章&#xff0c;居然浏览量那么高。看来很多小伙伴也开始从 Eclipse 转到 IDEA&#xff0c;这里为了让大家更好的掌握 IDEA 的使用&#xff0c;我建议大家可以看看下面这个 IDEA 教程。首先&#xff0c;确保 IDEA 软件正确安装完成&#xff0…

如何在Maven中运行Ant目标?

maven-antrun-plugin允许我们在各种maven构建阶段中运行ant目标。 我将专门为具有开发环境的开发人员解释maven-antrun-plugin的非常实际的用法。 通常&#xff0c;使用maven build&#xff0c;您会将项目捆绑到war文件或ear文件中。 您可以使用maven-antrun-plugin直接将此w…

PHP基本知识

php为服务端的脚本语言&#xff0c;它的使用需要打开WAMP的开发环境&#xff0c;php也可以用制作网页的DW制作&#xff0c;文件需保存在wamp文件夹内的www文件夹里面。 嵌入php代码所使用的标签&#xff1a;<?php ?>&#xff1b; 运行php条件&#xff1a; 1.电脑上需…

java semaphore 等待_Java并发编程系列之Semaphore详解

简单介绍我们以饭店为例&#xff0c;假设饭店只有三个座位&#xff0c;一开始三个座位都是空的。这时如果同时来了三个客人&#xff0c;服务员人允许他们进去用餐&#xff0c;然后对外说暂无座位。后来的客人必须在门口等待&#xff0c;直到有客人离开。这时&#xff0c;如果有…