selenium+chrome+testng+ant 实现lin
2018-12-11 本文已影响0人
边走边玩FREE
window平台下的 自动化测试很好处理,但有些特殊情况需要在linux下进行测试,并且是在脚本命令下执行时。就需要无界面的操作了。具体如下:
一 软件安装部署
使用的软件版本如下:
chrome:66 下载地址:自己找
Seleniume:3.11 下载地址:http://selenium-release.storage.googleapis.com/index.html
ChromeDriver:2.38 下载地址:http://npm.taobao.org/mirrors/chromedriver/
TestNG: 6.9.9
注:官方网站下载速度慢,这里提供个人资源下载链接:
- 安装chrome
自己百度
2.安装chromedriver
解压下载的文件,将文件复制到/usr/bin/ 目录下,然后更改添加执行权限,具体操作如下:
#unzip chromedriver_linux64.zip
#cp chromedriver /usr/bin/
# chmod +x /usr/bin/chromedriver
- 安装ant
自己百度
二 代码编写
这里是基于java的自动化测试,因此现在Eclipse编写测试的代码,最后再整理到Linux平台运行。
- 导入项目中需要用到的jar包,包括selenium 下的所有jar包,以及testng-6.9.9jar包。
- 创建测试文件,代码如下:
@Test
public void TestOne()
{
System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver"); //设置浏览器驱动位置
System.setProperty("webdriver.chrome.bin", "/opt/google/chrome/chrome"); //设置浏览器运行文件位置
ChromeOptions options = new ChromeOptions();
options.addArguments("headless"); //无界面化
options.addArguments("no-sandbox"); //禁用沙箱
WebDriver diver = new ChromeDriver(options); //启动浏览器
diver.get("http://www.baidu.com"); //访问百度
System.out.println(diver.getTitle()); // 输出title
}
- 生成testng文件。在Eclipse中选择项目,右键 TestNG-》Convert to TestNG,可以自动生成testng.xml文件(需要Eclipse安装testng插件); 自己新建一个xml文件,自己补充参数。tesng.xml实例文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
<test name="Test">
<classes>
<class name="Test1">
<methods>
<include name="TestOne"></include>
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
-suite: TestNg执行的单元
-classes: 执行的类列表,当有多个类需要执行时,在该处配置
-class:执行的类,改成自己的实际的类名
-methods:执行的方法,在methods中添加include,包含的测试方法,都会顺序执行。
- 创建build.xml文件。可以通过Eclipse自动导出,也可以自己创建。执行testng.xml 代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Test" default="Test" basedir=".">
<property name="testng.output.dir" value="test-output"/>
<property name="testdir" location="testdir"/>
<property name="srcdir" location="src" />
<property name="testng.file" value="testng.xml"/>
<property name="libdir" location="${basedir}/libs" />
<property name="full-compile" value="true" />
<taskdef resource="testngtasks" classpath="${libdir}/testng-6.9.9.jar"></taskdef>
<!-- Define<testng> task -->
<!-- 定义库目录路径 -->
<!-- path元素用来表示一个类路径 refid:对当前构建文件中某处定义的一个path的引用 location:表示一个文件或目录,ant在内部将此扩展为一个绝对路径-->
<path id="classpath.base"/>
<path id="classpath.test">
<!-- fileset定义一组文件,dir:表示fileset的基目录 includes:需要包含的文件模式列表 -->
<fileset dir="${libdir}" includes="*jar"/>
<pathelement location="${testdir}" />
<path refid="classpath.base" />
</path>
<!-- target标签,name:目标名称,必须有 depends:依赖的目标 -->
<target name="clean" >
<!-- delete标签,删除一个文件或一组文件。verbose:指定是否列出所删除的文件,默认不列出 -->
<delete verbose="${full-compile}">
<fileset dir="${testdir}" includes="**/*.class" />
</delete>
</target>
<target name="compile" >
<mkdir dir="${testdir}"/>
<!-- javac标签,用于编译一个或一组java文件。srcdir:源程序的目录 destdir:class文件的输出目录 verbose:表示提供详细的输出信息 classpath:所使用的类的路径-->
<javac srcdir="${srcdir}" destdir="${testdir}" includeantruntime="off" debug="on" debuglevel="lines,vars,source"
verbose="${full-compile}">
<classpath refid="classpath.test"/>
<compilerarg line="-encoding UTF-8 "/>
</javac>
</target>
<!-- outputdir testng执行的报告输出目录 classpathref 引用的的类 -->
<target name="Test" depends="compile">
<testng outputdir="${basedir}\test-output" classpathref="classpath.test" delegateCommandSystemProperties="true">
<xmlfileset dir="${basedir}" includes="testng.xml"/>
</testng>
</target>
</project>
- 整理代码,在项目目录下,删除其他的文件,只留下 src,libs,testng.xml,build.xml即可。 将代码打包到linux平台下,通过ant执行,如下:
ant -f build.xml //需要提前安装好ant,才能执行