java testng框架的windows自动化-自动运行testng程序下篇

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

  接上文https://www.cnblogs.com/xuezhezlr/p/9213456.html,文章大致把testng中比较特殊的两个xml形式说了一下,读者可以这样认为,ant的那个xml中的代码,因为只是控制了打包和指定testng的xml路径,然后获取执行结果想方法展示,而testng的xml直接控制了运行代码的顺序,包类等参数,直接控制了运行的过程,所以,如果工程主体变动不大,只需要对testng的xml进行改造,从而控制执行的方法,达到不同的测试目的

  故本文也是,上文中的ant的那个xml不会有变化,主要说一下testng中的xml和对应的class类和执行结果,一一解决一下上文说到的问题

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

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

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

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

  上述问题在junit中也可以解决,testng中的解决方式更加的优雅和高雅一点罢了~,下面准备两个文件还是原先的工程,一个是zlr.java

package zlr;

import org.testng.annotations.Test;

@Test(groups = {"group-class"})public class zlr {    @Test(groups = { "group-a","group-b" },priority = 2)    public void cccMethod() {        System.out.println("Method---ccc");    }

@Test(groups = { "group-b"} ,priority = 3)    public void bbbMethod() {        System.out.println("Method---bbb");    }

@Test(groups = { "group-b"},priority = 2 )    public void dddMethod() {        System.out.println("Method---ddd");    }    @Test(groups = {"zlr"} )    public void zlrMethod() {        System.out.println("Method---ddd");    }    @Test(groups = { "group-a" },priority = 3)    public void aaaMethod() {        System.out.println("Method---aaa");    }    @Test(dependsOnMethods = {"aaaMethod" })    public void method1() {        System.out.println("zlr");    }    @Test(groups = { "init" },priority = 3)    public void xMethod() {        System.out.println("Method---aaa");    }    @Test(groups = { "group-c" },priority = 3)    public void cMethod() {        System.out.println("Method---c");    }    @Test(groups = { "init" },priority = 3)    public void yMethod() {        System.out.println("Method---aaa");    }    @Test(groups = { "ss" },dependsOnGroups  = { "group-b","group-a" },alwaysRun=true)    public void method3() {        System.out.println("zlr");    }    @Test(dependsOnGroups = { "init" })    public void method2() {        System.out.println("zlr");    }}一个是zlr2.java
package zlr;

import org.testng.annotations.Parameters;import org.testng.annotations.Test;

/** * Created by zouleiran on 2018/6/22. */public class zlr2 {    @Test(groups = { "functest", "checkintest" })    public void testMethod1() {        System.err.println("groups = { functest, checkintest }");    }

@Test(groups = { "functest", "checkintest" })    public void testMethod2() {        System.err.println("groups = { functest, checkintest }");    }

@Test(groups = { "functest" })    public void testMethod3() {        System.err.println("groups = { functest }");    }    @Parameters({"URL","PORT"})    @Test(groups = { "checkintest" })    public void testMethod4(String URL,String PORT) {        System.err.println("groups = { checkintest }"+URL+PORT);    }}首先说一下,如果要执行整个class的话,可以把xml写成上一篇博客那样的就可以正常使用了,那是以class为维度来执行,而testng也支持以group和method为维度来执行方法和代码

  一、针对第一个问题,testng声明了一个叫做group的东西,我们可以认为是一个组,这个组可以是查询组,可以使插入组,也可以是其他分组,下面使用zlr2那个java文件演示,在zlr2中我们看到有4个test类,每一个的后面都标记了 (groups = { "checkintest" })和(groups = { "functest" })可以认为,把所有test分为两个大组,一组是checkintest另一组是functest,一个test可以属于一个组或者多个group,比如上文中的testMethod4就是checkintest小组的方法,然后可以写下xml如下

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

<groups>            <run>                <include name = "functest" />                <exclude name="checkintest" />            </run>        </groups>        <classes>            <class name = "zlr.zlr2"/>        </classes>    </test></suite>执行结果是

可以看到与之前的差别是xml中多了
<groups>            <run>                <include name = "functest" />                <exclude name="checkintest" />            </run>        </groups>这两行的意思是,执行group为functest而不是checkintest的小组代码那么会执行,只属于functest的代码,即便是一个class同时属于两者也不会执行

  二、testng中存在可以设置优先度,使得代码按照优先度来执行,也可以使用xml的方式来控制执行顺序

xml中可以说明执行的method,如果我们在xml中写出以下代码

<suite name="Suite1"    verbose="1" >    <test name="Regression1">

<classes>            <class name="zlr.zlr">                <methods>                    <include name="aaaMethod" />                    <include name="bbbMethod" />                </methods>            </class>        </classes>    </test></suite>代码会先执行aaaMethod在执行bbbMethod,反过来如果写作这样
<include name="bbbMethod" /><include name="bbbMethod" />
代码会先执行bbbMethod在执行aaaMethod,用以实现对代码的控制

另一方面,在代码中也可以以@Test(priority = 3)的方式来说明优先度,比如一个方法priority = 2,另一个priority = 3,那么如果在xml中都需要执行,也会先执行priority = 2的高优先度的方法(如果没有声名优先度,视为优先度最低,即先执行有优先度的方法),比如在xml中写上如下代码

<suite name="Suite1"    verbose="1" >    <test name="Regression1">

<classes>            <class name="zlr.zlr">                <methods>                    <include name="aaaMethod" />                    <include name="dddMethod" />                </methods>            </class>        </classes>    </test></suite>代码会先执行dddMethod

三、testng存在一个依赖函数的方式来让代码执行,方式就是

@Test(groups = { "ss" },dependsOnGroups  = { "group-b","group-a" })这样在test中加上参数,这是说本方法会依赖于另外的Groups a和b来执行,在实际执行中会先执行a再执行b,然后都成功了之后在执行本方法依赖还可以依赖于method为维度的,那样的话dependsOnGroups需要写作dependsOnMethods
说实话在实际运用中这个使用率并不高,由于有before和更前面的beforeclass,甚至说可以把某一个方法写到代码里面,所以依赖的事情并不长用到,下面是实例的xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suite name="Suite1"    verbose="1" >    <test name="Regression1">

<groups>            <run>                <include name = "ss" />            </run>        </groups>        <classes>            <class name = "zlr.zlr"/>        </classes>    </test></suite>

四、这一点是我觉得testng非常赞的一点~~~真心棒,testng存在一种方式,使得用户可以在testng的xml文件中声名变量并直接传入代码中,不过也有弊端,如果忘记传了,,,代码会直接忽略这个方法

  具体的是这样

@Parameters({"URL","PORT"})@Test(groups = { "checkintest" })public void testMethod4(String URL,String PORT) {    System.err.println("groups = { checkintest }"+URL+PORT);}
在test方法前声名多个变量,在方法中可以作为参数传进来并使用它们,然后在xml中传进来,xml如下
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" ><suite name="suite1">    <test name="test1">        <!--parameter标签中写要传入的参数  -->        <parameter name="URL" value="https://www.baidu.com"></parameter>        <parameter name="PORT" value="443"></parameter>        <groups>            <run>                <include name = "checkintest" />
            </run>        </groups>        <classes>            <class name="zlr.zlr2" />        </classes>    </test></suite>运行结果如图

可以看到代码中的url和port确实已经传进来了,如果在xml中不传的话代码会说因为没有传这两个参数,导致这个方法不运行,以忽略来处理

原文地址:https://www.cnblogs.com/xuezhezlr/p/9227429.html

时间: 2024-10-09 00:54:53

java testng框架的windows自动化-自动运行testng程序下篇的相关文章

java juint框架的windows自动化-自动运行juint程序简述

在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是junit框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一,与testng差不多平分秋色(好吧,其实是稍微差一点)在上文http://www.cnblogs.com/xuezhezlr/p/7773614.html简单介绍了junit框架后,这里作一个简单的比较 junit框架与传统main函数的主要区别:1junit框架其实质包含多个main函数,相互间

Atitit.Java&#160;exe&#160;bat&#160;&#160;作为windows系统服务程序运行

Atitit.Java exe bat  作为windows系统服务程序运行 1. 使用SC命令+srvany.exe (不错,推荐)+net start1 1.1. First 创建一个java的运行bat1 1.2. 配置srvany 做serv wrapper1 1.3. 使用sc 创建/del服务1 1.4. 启动start/stop服务  Sc \\127.0.0.1 start ServicenameAti22 2. 1.修改注册表 主要有两种方法…… 还有一个好用的命令:sc de

Windows 开机自动运行

一.启动菜单中 二.开始->运行->msconfig 启动选项卡 三.开始->运行->regedit HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\Run 四.开始->运行->services.msc 设置为自动 五.开机批处理 例如: 开机启动Windows Time 服务 1. 编写批处理文件 @echo off net stop w32time net start w32time

webstorm git 怎么断开版本控制 webstorm git for windows 禁止 自动运行

也是无语啊,今天装了下最新版本的webstorm ,  发现特别卡,老动不动就卡死, 看了下进程, 牛X 啊,  git for windows 一直蹭蹭蹭的疯狂增长,一开始的一点到后来的庞然大物. 一会就 这电脑能不卡死吗...... 手动关闭下进程,明显不卡,不过一会又出来了,很郁闷..... ----------------------------------------------------- 网上搜了下,怎么 禁用 这个进程   webstorm git for windows 禁止

ubuntu14.04 开机自动运行应用程序

ubuntu14.04 开机自动运行应用程序 - ydt_lwj的专栏 - 博客频道 - CSDN.NET ubuntu下有很多中开机自动运行程序的方法,在开机的不同过程中可以启动不同的程序.如在开机启动时自动运行程序,是通过修改放置在 ???? /etc/rc或 ???? /etc/rc.d 或 ???? /etc/rc?.d ?? 目录下的脚本文件,可以使init自动启动其它程序.例如:编辑 ???? /etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本), 也可以在用

java的mac自动化-自动运行java程序

本文旨在帮助读者介绍,如果一个测试工程师拿到了mac本,该如何在本地自动运行java代码 首先如图所示写下如下一段代码 package zlr; import org.junit.Test;public class zlrshiyan { @Test public void test123() throws Exception{ System.out.print (123); }}所在文件的路径是/Users/zlr/IdeaProjects/zlr/src/zlr,如下图,本地代码也可以正常运

Windows开机自动运行软件及自动重启

突发奇想,想测试下软件在开关机时的稳定性,手动的话费时又费力,如何让电脑自动执行呢... 设置起来比较简单,过程记录如下: 1:新建一个bat文件(写字板文件直接改后缀即可) 2:bat文件中添加如下指令: shutdown –r –t 15 注:("-r"表示restart,重启:"-t"表示time,重启操作执行前等待的时间,秒为单位.该命令表示15秒后计算机将重新启动) 3:  windows7中  开始->所有程序->启动,右键点击浏览,将要开机

Java爬虫框架SeimiCrawler的工程自动打包工具使用

为了便于开发者对使用SeimiCrawler框架开发的爬虫工程的打包部署,SeimiCrawler现已推出maven-seimicrawler-plugin,一个maven工程的自动化打包插件.下面简要介绍下他的使用. 开始 pom添加添加plugin <plugin> <groupId>cn.wanghaomiao</groupId> <artifactId>maven-seimicrawler-plugin</artifactId> <

在Windows上远程运行Linux程序

1.在Windows主机上安装X Server软件,如Cygwin带的XWin Server 2.在Windows主机上启动X服务器,并将Linux主机设为允许访问该Windows主机上的X服务器. #xhost +[IP of Linux host] 或 #xhost + //允许所有主机访问 3.在Windows主机上用SecureCRT远程登录Linux主机 下面的步骤有两种方法可实现: 一.设定DISPLAY环境变量 4.设置DISPLAY环境变量,即设定X Server的地址和显示接口