Docker下使用selenium+testng实现web自动化

Stella981
• 阅读 783

Windows下selenium+testng的web自动化环境搭建

做过自动化的人,肯定对selenium web环境的搭建非常熟悉了,特别是selenium在java中的使用。

先搭建好安装好JDK,配置好java开发环境(这个如果还是不知怎么操作的话可是要打PP了)。然后从官网下载对应selenium的jar包,加载到项目里;或者是使用maven,修改pom.xml文件直接加载selenium的依赖包即可:

1 <dependency>
2     <groupId>org.seleniumhq.selenium</groupId>
3     <artifactId>selenium-java</artifactId>
4     <version>3.14.0</version>
5 </dependency>

接着加上对应的浏览器驱动文件,就基本搞定环境了,可以开始自动化测试代码之路了。

当然大家在编写代码的过程中也会用到现在流行的单元测试框架testng。如何在这基础上增加testng环境?其实这也不是什么难事,在testng的官网(https://testng.org/doc/index.html)提供了Eclipse、IEDA等编辑器下如何安装插件,比如Eclipse直接进入Market搜索testng安装即可,使用maven则需要在pom.xml中添加依赖包:

1 <repositories>
 2   <repository>
 3     <id>jcenter</id>
 4     <name>bintray</name>
 5     <url>http://jcenter.bintray.com</url>
 6   </repository>
 7 </repositories>
 8 
 9 <dependency>
10   <groupId>org.testng</groupId>
11   <artifactId>testng</artifactId>
12   <version>6.10</version>
13   <scope>test</scope>
14 </dependency>

无脑等待下载安装完成,后续就是写代码了,然后就可以自由的挥洒了。
但是今天要介绍的不是上面这些,这种环境的搭建非常简单,大多数人其实都会,坑也不多,只是个代码环境而已。

我们这次要处理的麻烦事是什么呢?在现在日益发达的docker模式下,上述的编译环境没法在linux系统上跑了,没了代码编辑器、没了界面、也没了浏览器,那应该如何操作呢?让我们来看一看。

Docker的安装与使用

同样的,还是需要java+selenium+testng,只不过环境从windows变成了linux。

关于docker的使用这里稍稍给大家介绍一下安装、启动过程:

直接使用yum install docker命令安装;

service docker start启动docker服务;

然后docker pull centos搞定centos版本下最基本的docker镜像;

通过docker images命令可以列出当前所有镜像;

查看到linux的镜像后,使用docker run -it -d 镜像名称,让linux的容器跑起来(注意-it -d的参数,如果没有容器一闪而过就挂起了);

进入容器可先通过docker ps查看当前所有运行的容器,如果查不到,说明容器并没有启动,或者已经关闭了,docker ps会列出容器的id;

使用docker attach 容器id即可登录到容器中的linux了。

Docker下java环境搭建

容器里的linux其实和普通的linux操作是一样的了。

首先是安装jdk:

下载 jdk-8u181-linux-x64.tar.gz 包;

tar -xzvf jdk-8u181-linux-x64.tar.gz 解压,得到jdk1.8.0_181 目录(假设存放为/root/java/ 目录);

配置java的环境变量:

编辑环境变量文件:vi /etc/profile

加入内容:

1 export JAVA_HOME=/root/java/jdk1.8.0_181  
2 export JRE_HOME=${JAVA_HOME}/jre
3 export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
4 export PATH=${JAVA_HOME}/bin:$PATH

如果对软件测试、接口测试、自动化测试、性能测试、LR脚本开发、面试经验交流。感兴趣可以175317069,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

刷新环境变量配置:

source /etc/profile

确认java版本是否生效:

java -version

到这里java环境算是解决了,也没什么特别的难度,一步步来即可。

Docker下testng环境配置

接下来就是testng了,因为环境类似java而且也和环境变量有关系,所以优先解决:

下载 testng-6.14.3.jar 包;

tar -xzvf testng-6.14.3.jar解压得到testng目录(假设放在 /root/java/testng/ 目录下) ;

继续编辑环境变量文件:

vi /etc/profile

加入内容:

export TESTNG_HOME=/root/java/testng
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH:$TESTNG_HOME/testng-6.14.3.jar

刷新环境变量配置:

source /etc/profile

注意这里的testng环境变量,其中的 CLASSPATH 是在java环境的基础上追加的,如果大家是在windows上配置,分隔符要换成 ; 且环境变量的互相调用形式不同,这是有一些区别的。

好了,可能有人会觉得,这不是很简单吗?
但是,如果这时候继续去执行的话,会发现开始报错了,也就是深坑来了,这是因为脱离了整个开发环境。

先提一下testng的执行步骤,假设自己写个test.java,记住要最简单的,别参合其他jar包之类的,其中包含包名为 simple ,类名为 test:

export TESTNG_HOME=/root/java/testng
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH:$TESTNG_HOME/testng-6.14.3.jar

看似非常简单,但是执行起来,到处都是错误,执行javac test.java,常见错误为:

java.lang.NoClassDefFoundError: com/beust/jcommander/

这是缺少因为缺少编译时用到的jar包,需要下载 jcommander-1.72.jar,我们将它放置在testng的jar包一起(假设放置在/root/java/testng/目录):

环境变量的CLASSPATH需要追加 :

CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH:$TESTNG_HOME/testng-6.14.3.jar:$TESTNG_HOME/jcommander-1.72.jar

继续刷新环境配置:

source /etc/profile

这之后一般就可以顺利编译,出现 test.class 文件了。

如果出现其他错误,比如与testng相关的包不存在等等,请检查环境变量配置是否正确。

最后就是运行的环节了,也是大家会遇到问题点最多的点了。

先提一下结构,比如上面 simple.test 的类,那么需要建立文件夹 simple 里面存放test.java。

CLASSPATH的环境变量里,需要有testng代码文件和包的顶级目录追加添加,假设为

1 /root/java/testng/
2 /root/java/testng/simple/test.java

如果对软件测试、接口测试、自动化测试、性能测试、LR脚本开发、面试经验交流。感兴趣可以175317069,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

有了这样的结构前提,就可以通过命令执行了:

java org.testng.TestNG -testclass simple.test

出现结果,意味着运行成功了:

Total tests run: 1, Failures: 0, Skips: 0

如果你的代码中有测试用例@Test,但run出现0的话,说明还是失败的,只是没有给明确的报错而已。

当然到这里还没意味着结束。

因为你可能还会遇到缺乏各种依赖的jar包的问题:

可以通过参数将这些jar包都引入

javac -Djava.ext.dirs=/root/java/jar test.java
java -Djava.ext.dirs=/root/java/jar org.testng.TestNG -testclass simple.test

远程调用windows下浏览器

以为这就搞定环境,万事大吉了么?再补一刀,浏览器呢?没有浏览器得问题应该怎么解决呢?

请使用selenium自带的server部署到windows机器上。

这个问题的解决反而是比较简单的:

下载 selenium-server-standalone-3.14.0.jar 包;

放在指定目录(比如放在C盘根目录);

cd到该目录下:cd C:\

执行命令打开selenium remote服务:

java -jar selenium-server-standalone-3.14.0.jar -port 6666

接下来有人会问怎么指定浏览器?

只需要在java代码里,使用下面语句就可以对刚才在windows启动的服务进行调用了:

WebDriver driver = new RemoteWebDriver("http://ip:6666/wd/hub/", DesiredCapabilities.chrome());

另外注意服务器上还是需要浏览器的driver驱动文件,无脑一点就和jar包放一起就完事了,爱折腾的可以自己研究一把,区别只是启动服务时需要带上一些参数。

整个docker下使用selenium+java远程调用widows下Chrome浏览器,实现web自动化的环境搭建完毕。

原文:https://blog.csdn.net/TestingGDR/article/details/83184235

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这