• 学习TestNG,乍暖还寒冷时


    时间:2019年2月23日,农历正月十九,星期六,天气晴,略有阳光,但下午三点多就不见阳光了。

    地点:上海

    昨夜雨疏风骤,浓睡不消残酒。
    试问卷帘人,却道海棠依旧。
    知否?知否?应是绿肥红瘦

    是的,魔都上海确实昨夜雨疏风骤,在连续下了40几天雨之后,今天魔都终于天晴了。

    也真是没谁了,除了魔都还有哪个地方能连续下40几天雨。上上周(正月初四)听广播说上一次魔都连续下了45天雨,但上一次是那一年呢,上一次是1919年,现在都2019了,100年一遇呀。

    为啥是乍暖还寒冷时,这个季节本来就是冬天还没结束春还没来,春节的尾巴。

    元宵节在本周二就过完了,然而魔都是否还是没有像往些年那么多人人人人多,难道传说中的逃离魔都在今年比往年更严重?

    好吧,开始学习TestNG.

    学TestNG是因为Selenium这个魔人小妖精需要用到TestNG。

    这里要记录的是Test NG的Suite,group,test等等在testng.xml里面的配置。

    我们下好的以@Test注解标注的方法是可以直接用Eclipse-Run As TestNG运行的。

    比如,我有一个Cat.java文件,里面有个Cat Class,Cat Class里面又三个方法,这都可以用Eclipse-Run As TestNG运行的。

    比如,一个Cat.java文件,里面有个Cat Class和一个 Mouse Class里面都各有三个方法,这还是可以可以用Eclipse-Run As TestNG运行的。

    比如,一个Cat.java文件,里面有个Cat Class和一个 Mouse Class里面都各有三个方法;

    然后,我还有一个Dog.java文件,里面也又三个方法,这是我选择Cat.Java那肯定只能运行cat.java里面的方法呀。

    怎么让cat.java和dog.java里面的方法都跑起来呢?

    简单,改一改testng.xml文件里面的配置就行了。

    testng.xml修改后长这样

    虽然我的dog.java和cat.java是不同的文件,但是testng才不管你在那个文件里面呢,只要加上下面这段它就能找到。

    注意:com.qa.demo是java的包名,最好也要加上。

            <classes>
                <class name="com.qa.demo.Cat" />
                <class name="com.qa.demo.Mouse" />
                <class name="com.qa.demo.Dog" />
            </classes>

    之后呢,也学习给把测试方法分组(groups),和给测试方法传递参数@parameters

    Cat.java

    package com.qa.demo;
    
    import org.testng.Assert;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    public class Cat {
    
        @Test(groups = { "GroupCatA" })
        public void testCat1() {
    
            System.out.println("===Test 1 in Cat class of Cat.java===");
            try {
                Assert.assertEquals("White Cat", "Black cat", "Espected white cat, but find a balck cat.");
                System.out.println("======Assert will fail========");
            } catch (Error e) {
                System.out.println("======Cat Test 1=====Hello Kitty=======");
                System.out.println("======Cat Test 1=====Assertion Failed==");
                Assert.fail("===Cat Test 1 is Failed!=====");
            }
        }
    
        @Test(groups = { "GroupCatA" })
        public void testCat2() {
    
            System.out.println("===Test 2 in Cat class of Cat.java===");
    
        }
    
        @Parameters({ "p1", "p2" }) //要在testng.xml设置相应的标签和值
        @Test(groups = { "GroupCatB" })
        public void testCat3(int p1, int p2) {//p1,p2是@Parameters定义的参数名称
    
            System.out.println("===Test 3 in Cat class of Cat.java===");
            int r = p1 * p2;
            System.out.println("P1 X P2=:" + r);
    
        }
    }
    
    class Mouse {
    
        @Test(groups = { "GroupCatA" })
        public void testMouse1() {
    
            System.out.println("===Test 1 in Mouse class of Cat.java===");
    
        }
    
        public void testMouse2() {
    
            System.out.println("===Test 2 in Mouse class of Cat.java===");
    
        }
    
        public void testMouse3() {
    
            System.out.println("===Test 3 in Mouse class of Cat.java===");
    
        }
    }

    Dog.java

    package com.qa.demo;
    
    import org.testng.annotations.Test;
    
    public class Dog {
    
        @Test(groups = { "GroupCatA" })
        public void testDog1() {
            System.out.println("**********Dog in in another file********");
            System.out.println("===Test Dog 1===GroupCatA===");
    
        }
    
        @Test
        public void testDog2() {
    
            System.out.println("==========Test Dog 2=============");
        }
    
    }

    这是testng.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite" >
        <test thread-count="5" name="Test of cat">
         <parameter name="p1" value="3" /> <!--传递传输值给测试方法-->
            <parameter name="p2" value="9" /> <!--传递传输值给测试方法-->
     <groups> <run> <include name="GroupCatA" /> <include name="GroupCatB" /> </run> </groups> <classes> <class name="com.qa.demo.Cat" /> <class name="com.qa.demo.Mouse" /> <class name="com.qa.demo.Dog" /> </classes> </test> <!-- Test --> </suite> <!-- Suite -->

    参考文章:

    testng教程之testng.xml的配置和使用,以及参数传递

    https://www.cnblogs.com/tobecrazy/p/4582173.html

    关于Testng断言Assert

    如果我们加了Assert,并且期待的值和实际值不一样的情况下,断言就是判定结果位错,同时还会报一大堆看着就不爽的error,注意是java.lang.error,不是exception哦。

    同时断言还会阻断它后面其它语句的执行,比如,下面的Assert.assertEquals不加try-catch就会阻断他后面的system.out.println的执行。

        @Test(groups = { "GroupCatA" })
        public void testCat1() {
    
            System.out.println("===Test 1 in Cat class of Cat.java===");
            try {
                Assert.assertEquals("White Cat", "Black cat", "Espected white cat, but find a balck cat.");
                System.out.println("======Assert will fail========");
            } catch (Error e) {
                System.out.println("======Cat Test 1=====Hello Kitty=======");
                System.out.println("======Cat Test 1=====Assertion Failed==");
                Assert.fail("===Cat Test 1 is Failed!=====");
            }
        }

    那么怎么处理呢?加try-catch,把他抓住处理掉。

    然后看到又老外(印度人)说有一个Softassert断言不会阻断后续语句的执行。

    但是这个SoftAssert也不咋地,所以还是Try-Catch吧。

    参考文章:

    JAVA结合testng断言verify(断言失败不中断继续执行)
    https://www.cnblogs.com/zhangfei/p/4450259.html

  • 相关阅读:
    「mysql优化专题」90%程序员面试都用得上的索引优化手册(5)
    「mysql优化专题」你们要的多表查询优化来啦!请查收(4)
    「mysql优化专题」单表查询优化的一些小总结,非索引设计(3)
    mysql优化专题」90%程序员都会忽略的增删改优化(2)
    「mysql优化专题」这大概是一篇最好的mysql优化入门文章(1)
    zookeeper
    linux查看进程是否存在,不存在则重启
    mysql导出文本文件,加分隔符
    oracle查看表空间和物理文件大小
    oracle插入
  • 原文地址:https://www.cnblogs.com/majestyking/p/10423222.html
Copyright © 2020-2023  润新知