zoukankan      html  css  js  c++  java
  • java testng框架的windows自动化-自动运行testng程序上篇

      本文旨在让读者简单了解testng的自动运行

      怎么说呢,在网上已经有了各个前辈进行代码演示以及分享,我力争说到点子上

      接上文,之前讲的大部分是juint的自动化代码运行,从未涉及到testng,但是在测试领域,如果使用java代码,一般都是juint或者testng,总得来说,我都用过,深深的感觉,确实testng比juint功能更加的强大,不过也没有说到了完全望尘莫及的程度,能用juint做的,testng也能做,能用testng做的,用juint也一定能做,只是比较累而已,,,testng的话我确实感觉到是juint的进化版本,就像是一个人多年使用juint并发现其中的问题,然后重新改写源码来做的新的框架,但是,修改之后的testng的问题也在于,由于代码注释和xml等比juint复杂得多,它的入门和使用的门槛,略高于juint,需要对java,ant等有一定了解。

      https://blog.csdn.net/luozhuwang/article/details/14646839 这个博文对junit和testng做出了表面的比较,怎么说呢,说的很在理,但是测开有几个人只会juint和testng呢?其他的过河桥,可以使得两者的差异并不明显。不过我认为,读这样的文章很重要,可以有一个较为粗浅的认识

      如果你看完了之前的博客,就会发现juint并不依赖于java编译,它往往会使用已经编译好的class文件来执行(当然,你也可以使用ant命令使得java文件编译为class),下图是我画的大概框图

      总得来说这样的xml会直接在里面指定执行的东西的位置,再由执行的位置来定位执行的方法等等

      但是我们不禁要想到以下问题

    1,如果系统中要求只执行一部分代码,比如执行查询接口,或者只执行插入接口,如何去做

    2,如何让每个class,甚至每个方法,按照一定的方式优先级来执行

    3,方法的依赖问题,又该如何处理

    4,如果需要一个或者多个变量(如cookie),如何在代码中传输,使得今天和明天使得都是能用的不同的参数

    5,,,

      以上问题都是在面试中面试人员问过我的,,,我一般都能说出来实现方式junit版本,不过估计不是他们想要的答案,说实话,都能解决,但是都比较的取巧吧,而且费劲

      testng在这些方面都要做的更好,本文逐一演示,下面是testng的大概思路

      testng和juint比较大的区别在于,它相当于又多了一个xml文件来管理,ant的build.xml只需要指定一个路径,然后不需要修改,而执行哪些方法和class,如何执行,完全由testng自身定义的一个xml来规定,在juint中,这一件事情完全由build.xml和配置文件来完成

      首先下载好testng的包,并采用标准的非mvn结构把包放到lib文件夹之下,现在代码里面开一个zlr3的文件,他的目录结构以及运行效果是这样的(读了这么多我的博客,我相信各位一定已经不用再花一个博文的篇幅来介绍这些内容了,直接略过)

       然后我new一个文件,可以叫做testNG.xml,与src同级目录,如图所示

    里面写上如下代码

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="framework_testng">
    <test verbose="2" name="TestGroups">

    <classes>
    <class name="zlr.zlr3" />
    </classes>
    </test>
    </suite>
    这个方法是直接运行整个class,其中name要指定要运行的class然后点击执行即可

    这里是使用java自身的代码处理的效果,如果读者能做到这个程度,就可以开始尝试进行下一步操作,使用ant来执行
    在自己的系统中再创建一个xml,比如叫做build.xml,然后在其中写下如下代码

    <?xml version="1.0"?>
    <project name="Demo" default="run" basedir=".">
    <echo message="Start selenium Grid" />
    <echo message="import libs" />
    <path id="run.classpath">
    <fileset dir="${basedir}">
    <include name="lib/*.jar" />
    </fileset>
    </path>
    <taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="run.classpath" />
    <target name="clean">
    <delete dir="build"/>
    </target>
    <target name="compile" depends="clean">
    <echo message="mkdir"/>
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes" debug="on" encoding="UTF-8">
    <classpath refid="run.classpath"/>
    </javac>
    </target>
    <path id="runpath">
    <path refid="run.classpath"/>
    <pathelement location="build/classes"/>
    </path>
    <target name="run" depends="compile">
    <testng classpathref="runpath" outputDir="test-output"
    haltonfailure="true"
    useDefaultListeners="false">
    <xmlfileset dir="${basedir}" includes="testNG.xml"/>
    <jvmarg value="-Dfile.encoding=UTF-8" />
    <sysproperty key="org.uncommons.reportng.title" value="AutoMation TestReport" />
    </testng>
    </target>
    </project>

    其中,笔者由于build.xml也在该工程下,所以 basedir=".",指的是当前目录
    代码中分为clean->compile->run,其中lib/*.jar会把所有的jar都加载,而<xmlfileset dir="${basedir}" includes="testNG.xml"/>这一行需要指明
    includes="testNG.xml"这样的参数来直接写出刚刚的xml直接调用,其中的打包啥的都可以修改路径,请自行摸索,下图是执行效果

      可以看到,正确打印出了zlr,而且内容中也正常运行了代码,真的很不错
      总得来说testng的代码,外面这个build.xml是不需要改动的,改动的只是代码中的xml,从这个xml中会指定运行的方法以及代码模块,这样的话代码上只需要对xml和java的代码这方面进行一系列讲解就好,虽然比junit代码更加的复杂一些,不过也还好,让程序员更专注的写xml,比如发邮件等工作会放在外面的xml中,而传参的代码写到里面的xml中,怎么说呢,虽然说得很费劲和绕,不过更加的各司其职,还好啦
      至于如何自动运行ant程序,其实实际上和juint一样,有兴趣的读者可以从https://www.cnblogs.com/xuezhezlr/p/7725301.html这里看一下大概流程本文不做赘述
      其中testng的代码结构又细分为多种,下一篇博客进行详细讲解,主要是说一下xml和一些相关的test文件目录

  • 相关阅读:
    chrome扩展程序开发之在目标页面运行自己的JS
    微信JSSDK接口,previewImage
    js加减乘除丢失精度
    java jdbc/ojdbc 链接oracle的三种方式
    Navicat 提示Cannot create oci environment 解决方案
    jquery ajax 回调函数
    时间日期标识符
    SSIS从理论到实战,再到应用
    Business Intelligence——SSIS项目从创建到部署的简单总结(二)
    Business Intelligence——SSIS项目从创建到部署的简单总结(一)
  • 原文地址:https://www.cnblogs.com/xuezhezlr/p/9213456.html
Copyright © 2011-2022 走看看