使用TestNG中HardAssert和SoftAssert断言

一个接口测试的常见流程:

第一步:发起请求
第二步:断言响应状态是否200,如果成功继续
第三步:断言响应时间是否符合标准(非必须)
第四步:断言响应数据是否正确,一般的做法是判断某个值是否相等或者包含关系。

Assert 类

断言是一个接口用例执行成功的关键,TestNG中最常用的一个断言类是Assert.java,里面包含很多个静态方法。

  1. Assert.assertTrue(condition, message)

如果condition为真,该断言运行通过,如果condition为假,抛出异常并打印message的信息

package com.sangyu.test;

import org.testng.Assert;
import org.testng.annotations.Test;
 /**
  * == 比较的是内容地址
  * str1 和 str2 内存地址不同
  * str3 指向了 str1 所以它俩的内存地址是相同的
  */
public class Main {
   
    @Test
    public void test01() {
        String[] str1 = {"Hamilton", "Auston", "Marcia"};
        String[] str2 = {"Marcia", "Hamilton", "Auston"};
        String[] str3 = str1;
        Assert.assertTrue(str1 == str2, " str1 == str2 两者不相同");
    }

    @Test
    public void test02() {
        String[] str1 = {"Hamilton", "Auston", "Marcia"};
        String[] str2 = {"Marcia", "Hamilton", "Auston"};
        String[] str3 = str1;
        Assert.assertTrue(str1 == str3, " str1 == str3 两者不相同");
    }
}

与assertTrue()相对应的是assertFalse(condition, message)方法,如果condition结果为false,则断言成功,condition为true,断言失败并打印message信息

  1. Assert.assertEquals(actual, expected)

TestNG的assertEquals()方法提供了超过30多种的重载方法,这些方法支持不同的数据类型和集合类操作

/**
 * Assert.assertEquals(str1, str2);
 * 在比较数组的时候,比较的是数组的长度以及数组下标对应的值是否相等的
 * 在比较字符串时候,区分大小写
 */
@Test
public void test03() {
    String[] str1 = {"Hamilton", "Auston", "Marcia"};
    String[] str2 = {"Hamilton", "Auston", "Marcia"};

    Assert.assertEquals(12, 12);
    Assert.assertEquals("AA", "AA");
    Assert.assertEquals(str1, str2);
    Assert.assertEquals("ABc", "ABC", "not equals");
}

Assert.assertEquals(actual, expected, message)。actual与expected比较结果如果不相等,抛出断言异常并显示message的信息。

@Test
public void test04() {
    Assert.assertEquals("ABc", "ABC", "\"ABc\" \"ABC\"not equals");
}
  1. assertEqualsNoOrder(Object[] actual, Object[] expected)

判断两个数组是否相同,忽略排序位置

@Test
public void test05() {
    String[] str1 = {"Hamilton", "Auston", "Marcia"};
    String[] str2 = {"Marcia", "Hamilton", "Auston"};
    Assert.assertEqualsNoOrder(str1, str2, "两个字符串数组不相同");
}

与 Assert.assertEquals 相反的是Assert.assertNotEquals(actual, expected, message),actual 与 expected 不相等的话则断言成功,相等的话断言失败并抛出断言异常并显示message的信息

  1. assertNotNull(object, “message”)

对象非空判断,断言对象不为空,否则,抛出异常,打印message1的内容。

  1. assertSame(actual, expect, “message”)

断言两个对象相同,这里相同和上面的Equals不同,Equals是值比较,而Same是内存地址比较

与assertSame(actual, expect, “message”)相反的是assertNotSame(actual, expect, “message”),断言两个对象内存地址不相同

SoftAssert 类

在 Assert.java 也称为硬断言。硬断言就是,如果运行到这行断言失败,即使该用例,后面还有其他代码行,也不会继续执行下去。SoftAssert 可以解决这个问题。

SoftAssert 的特点:
1)一个用例有多个断言,失败了其中一个,不影响其他断言的运行
2)在该用例的最后一个断言调用assertAll()

import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
 
public class AssertTestDemo {
    @Test
    public void testSoftAssert(){
        System.out.println("Test start");
        SoftAssert assertion = new SoftAssert();
        assertion.assertEquals(12, 13,"两者不相等");
        System.out.println("Test complete");
        System.out.println(3+8);
        assertion.assertAll();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容