移动端h5网站开发服务,上海抓捕236名,企业网站备案价格,自己做的网站有什么用一、testNG
1. testNG优势
注解驱动#xff1a; TestNG 使用注解来标识测试方法、测试类和配置方法#xff0c;使得测试更具可读性。
并行执行#xff1a; TestNG 支持多线程并行执行测试#xff0c;可以加速测试套件的执行。
丰富的配置#xff1a; 可以通过 XML 配置文…一、testNG
1. testNG优势
注解驱动 TestNG 使用注解来标识测试方法、测试类和配置方法使得测试更具可读性。
并行执行 TestNG 支持多线程并行执行测试可以加速测试套件的执行。
丰富的配置 可以通过 XML 配置文件来定义测试套件的执行顺序、依赖关系等。
分组测试 可以将测试方法分组实现对特定测试分组的执行。
参数化测试 可以使用 Parameters 和 DataProvider注解实现参数化测试
依赖管理 可以通过 dependsOnMethods 或 dependsOnGroups 设置测试方法之间的依赖关系。
断言灵活 TestNG 提供了丰富的断言方法用于验证测试结果。
2. testNG常用注解
Test用于标识测试方法执行单元测试。
BeforeSuite在测试套件之前执行。
AfterSuite在测试套件之后执行。
BeforeTest在测试类之前执行。
AfterTest在测试类之后执行。
BeforeClass在测试类中的所有测试方法之前执行。
AfterClass在测试类中的所有测试方法之后执行。
BeforeMethod在每个测试方法之前执行。
AfterMethod在每个测试方法之后执行。
DataProvider用于提供测试数据。
Parameters用于参数化测试。
dependsOnMethods设置测试方法的依赖关系。
package AI.Test.testNG;import org.testng.annotations.*;public class TestNGCheck {BeforeSuitepublic void beforeSuite(){System.out.println(beforeSuite);}BeforeTestpublic void beforeTest() {System.out.println(Before Test);}BeforeClasspublic void beforeClass() {System.out.println(Before Class);}BeforeMethodpublic void beforeMethod() {System.out.println(Before Method);}Test(groupsPerformance)public void testMethod1() {System.out.println(Test Method 1);}AfterMethodpublic void afterMethod() {System.out.println(After Method);}AfterClasspublic void afterClass() {System.out.println(After Class);}AfterTestpublic void afterTest() {System.out.println(After Test);}AfterSuitepublic void afterSuite() {System.out.println(After Suite);}}3. testNG中Test有哪些参数
1. 常用的
groups 用于将测试方法分组可以在 XML 配置中选择性地执行指定组的测试。
timeOut 指定方法的超时时间单位为毫秒。
alwaysRun 如果设置为 true则无论依赖的方法是否失败当前方法都会执行。
dependsOnMethods 指定测试方法的依赖关系被依赖的方法会在当前方法之前执行。
enabled 控制测试方法是否启用设置为 false 则禁用该方法。
description 提供关于测试方法的简要描述。
invocationCount 指定测试方法被调用的次数。2. 数据驱动需要结合DataProvider注解对应获取参数的方法
dataProvider 指定使用哪个数据提供者来提供测试数据。
dataProviderClass 指定数据提供者所在的类。3.并发
invocationCount 指定测试方法被调用的次数。
threadPoolSize 指定线程池的大小用于并行执行测试方法。
dataProviderThreadCount 指定数据提供者线程的数量。
举例 Test(groupsPerformance)public void testMethod1() {System.out.println(Test Method 1);}Test(priority1)public void testMethod2() {System.out.println(Test Method 2);}Test(dependsOnMethods testMethod4, alwaysRun false)public void testMethod3(){System.out.println(Test Method 3);}Test(timeOut 3000)public void testMethod4() throws InterruptedException {Thread.sleep(4000);System.out.println(Test Method 4);}Test(enabled false, description 用于测试enable注解)public void testMethod5() {System.out.println(Test Method 5);}
4. 在 TestNG 中实现参数化测试
以Yaml文件为例
创建一个Yaml文件testdata.yaml
testdata:- parameters: [2, 3, 5]- parameters: [10, 20, 30]获取测试数据及使用
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.yaml.snakeyaml.Yaml;import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class ParameterizedTest {DataProvider(name testData)public Object[][] getYamlData() {ListObject[] testData new ArrayList();Yaml yaml new Yaml();InputStream inputStream getClass().getClassLoader().getResourceAsStream(testdata.yaml);MapString, ListListInteger dataMap yaml.load(inputStream);ListListInteger parametersList dataMap.get(testdata);for (ListInteger parameters : parametersList) {testData.add(parameters.toArray());}return testData.toArray(new Object[testData.size()][]);}Test(dataProvider testData)public void testParameterized(int param1, int param2, int param3) {System.out.println(Test with parameters: param1 , param2 , param3);// 执行测试逻辑使用参数化数据进行测试}
}5. 执行顺序
TestNG 默认情况下会按照测试方法的名称升序执行。
可以通过设置 priority 属性来指定执行顺序。
也可以使用dependsOnMethods
6. testNG断言
assertEquals(expected, actual)
验证两个值是否相等。如果不相等会抛出 AssertionError。assertNotEquals(expected, actual)
验证两个值是否不相等。如果相等会抛出 AssertionError。assertTrue(condition)
验证给定的条件是否为真。如果条件为假会抛出 AssertionError。assertFalse(condition)
验证给定的条件是否为假。如果条件为真会抛出 AssertionError。assertNull(object)
验证给定的对象是否为 null。如果对象不为 null会抛出 AssertionError。assertNotNull(object)
验证给定的对象是否不为 null。如果对象为 null会抛出 AssertionError。assertSame(expected, actual)
验证两个引用是否指向同一个对象。如果不指向同一个对象会抛出 AssertionError。assertNotSame(expected, actual)
验证两个引用是否指向不同的对象。如果指向同一个对象会抛出 AssertionError。
二、Junit5
1. junit5的优势
现代化的设计 JUnit 5 的架构更加模块化和现代化采用了模块化体系结构使得集成和扩展更加容易。它引入了 Jupiter新的测试引擎和 Vintage支持 JUnit 4两个模块具有更好的灵活性。Lambda 表达式支持 JUnit 5 充分利用了 Java 8 的 Lambda 表达式特性使测试代码更加简洁。TestNG 也支持 Lambda 表达式但 JUnit 5 的设计更加贴合现代 Java 特性。参数化测试 JUnit 5 提供了内置的参数化测试功能使用 ParameterizedTest 注解可以轻松地对测试方法使用不同的参数运行。动态测试 JUnit 5 引入了动态测试允许在运行时生成和执行测试。使用 TestFactory 注解可以动态生成测试方法以适应更加灵活的测试需求。扩展机制 JUnit 5 的扩展机制更加强大和灵活使用 ExtendWith 注解可以轻松应用自定义扩展甚至可以自定义扩展来修改测试运行时的行为。条件测试 JUnit 5 允许根据条件决定是否执行测试方法使用 EnabledOnOs、DisabledIf 等注解可以根据操作系统、环境变量等条件来控制测试执行。并行执行 TestNG 在并行执行方面有很强的功能但 JUnit 5 也在逐步增强并行执行的支持对于简单的并行需求JUnit 5 也可以胜任。灵活性 JUnit 5 允许更多的自定义配置使得测试执行的控制更加灵活可以根据不同的项目需求进行调整。2. 常用注解
Test: 用于标记测试方法。DisplayName: 为测试方法或测试类指定一个可读的名称。BeforeEach: 在每个测试方法之前执行的方法。AfterEach: 在每个测试方法之后执行的方法。BeforeAll: 在所有测试方法之前执行的方法必须是静态方法。AfterAll: 在所有测试方法之后执行的方法必须是静态方法。Disabled: 标记测试方法或测试类为禁用状态。ParameterizedTest: 用于参数化测试的注解。RepeatedTest: 用于指定重复执行测试方法的次数。Timeout: 用于设置测试方法执行的最大时间。时间是sTag: 为测试方法添加标签用于分组和过滤测试。Nested: 用于嵌套测试类。TestFactory: 用于动态测试返回动态生成的测试方法。
package AI.Test.testNG;import org.junit.jupiter.api.*;public class Junit5TestCheck {BeforeAllstatic void beforeAll() throws InterruptedException {System.out.println(Before All);Thread.sleep(3000);}BeforeEachvoid beforeEach(){System.out.println(BeforeEach);}TestDisplayName(Junit5TestCheck test1)void test1(){System.out.println(test1);}TestRepeatedTest(2)DisplayName(Junit5TestCheck test2)void test2(){System.out.println(test2);}TestDisabledDisplayName(Junit5TestCheck test3)void test3(){System.out.println(test3);}TestTimeout(3)void test4() throws InterruptedException {Thread.sleep(4);System.out.println(test4);}AfterEachvoid afterEach(){System.out.println(AfterEach);}AfterAllstatic void afterAll(){System.out.println(After All);}}3. TestFactory使用示例
TestFactory其实就是参数化执行同一条用例
通常情况下我们会使用 ParameterizedTest 注解来参数化执行不同的测试用例每次测试会使用不同的参数进行运行。而 TestFactory 则是一种更为动态和灵活的方式它允许你在运行时生成测试用例。
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;import java.util.stream.Stream;import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;public class DynamicTestExample {TestFactoryStreamDynamicTest dynamicTestFactory() {return Stream.of(dynamicTest(Test 1, () - assertEquals(2, add(1, 1))),dynamicTest(Test 2, () - assertEquals(4, add(2, 2))),dynamicTest(Test 3, () - assertEquals(6, add(3, 3))));}int add(int a, int b) {return a b;}
}4. ParameterizedTest
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;public class ParameterizedTestExample {ParameterizedTestCsvSource({1, 2, 3, 0, 0, 0, -1, -2, -3})void testAddition(int a, int b, int result) {assertEquals(result, add(a, b));}int add(int a, int b) {return a b;}
} 文章转载自: http://www.morning.srcth.cn.gov.cn.srcth.cn http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn http://www.morning.dgxrz.cn.gov.cn.dgxrz.cn http://www.morning.trkhx.cn.gov.cn.trkhx.cn http://www.morning.tqpr.cn.gov.cn.tqpr.cn http://www.morning.pynzj.cn.gov.cn.pynzj.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.crrmg.cn.gov.cn.crrmg.cn http://www.morning.jnrry.cn.gov.cn.jnrry.cn http://www.morning.wyrkp.cn.gov.cn.wyrkp.cn http://www.morning.lfqtp.cn.gov.cn.lfqtp.cn http://www.morning.jlthz.cn.gov.cn.jlthz.cn http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn http://www.morning.jnbsx.cn.gov.cn.jnbsx.cn http://www.morning.kkjlz.cn.gov.cn.kkjlz.cn http://www.morning.wqpb.cn.gov.cn.wqpb.cn http://www.morning.thjqk.cn.gov.cn.thjqk.cn http://www.morning.yqlrq.cn.gov.cn.yqlrq.cn http://www.morning.rynrn.cn.gov.cn.rynrn.cn http://www.morning.rksnk.cn.gov.cn.rksnk.cn http://www.morning.gbsby.cn.gov.cn.gbsby.cn http://www.morning.flncd.cn.gov.cn.flncd.cn http://www.morning.rfwkn.cn.gov.cn.rfwkn.cn http://www.morning.rrpsw.cn.gov.cn.rrpsw.cn http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.drfrm.cn.gov.cn.drfrm.cn http://www.morning.zqfz.cn.gov.cn.zqfz.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.ncrk.cn.gov.cn.ncrk.cn http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn http://www.morning.xnflx.cn.gov.cn.xnflx.cn http://www.morning.xqgh.cn.gov.cn.xqgh.cn http://www.morning.dfwkn.cn.gov.cn.dfwkn.cn http://www.morning.vnuwdy.cn.gov.cn.vnuwdy.cn http://www.morning.mnyzz.cn.gov.cn.mnyzz.cn http://www.morning.wfdlz.cn.gov.cn.wfdlz.cn http://www.morning.pmjhm.cn.gov.cn.pmjhm.cn http://www.morning.jpdbj.cn.gov.cn.jpdbj.cn http://www.morning.zmyhn.cn.gov.cn.zmyhn.cn http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn http://www.morning.bytgy.com.gov.cn.bytgy.com http://www.morning.qwgct.cn.gov.cn.qwgct.cn http://www.morning.tnyanzou.com.gov.cn.tnyanzou.com http://www.morning.gczqt.cn.gov.cn.gczqt.cn http://www.morning.mftzm.cn.gov.cn.mftzm.cn http://www.morning.jtmrx.cn.gov.cn.jtmrx.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.glxdk.cn.gov.cn.glxdk.cn http://www.morning.rcklc.cn.gov.cn.rcklc.cn http://www.morning.jfnbh.cn.gov.cn.jfnbh.cn http://www.morning.sthp.cn.gov.cn.sthp.cn http://www.morning.yrddl.cn.gov.cn.yrddl.cn http://www.morning.jbctp.cn.gov.cn.jbctp.cn http://www.morning.qqbw.cn.gov.cn.qqbw.cn http://www.morning.qrsm.cn.gov.cn.qrsm.cn http://www.morning.ymhjb.cn.gov.cn.ymhjb.cn http://www.morning.nwgkk.cn.gov.cn.nwgkk.cn http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn http://www.morning.mjxgs.cn.gov.cn.mjxgs.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.qytpt.cn.gov.cn.qytpt.cn http://www.morning.fwllb.cn.gov.cn.fwllb.cn http://www.morning.ykrck.cn.gov.cn.ykrck.cn http://www.morning.wbnsf.cn.gov.cn.wbnsf.cn http://www.morning.czqqy.cn.gov.cn.czqqy.cn http://www.morning.qkrzn.cn.gov.cn.qkrzn.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.gqwbl.cn.gov.cn.gqwbl.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.jpwmk.cn.gov.cn.jpwmk.cn http://www.morning.yesidu.com.gov.cn.yesidu.com http://www.morning.hgbzc.cn.gov.cn.hgbzc.cn http://www.morning.rdmz.cn.gov.cn.rdmz.cn http://www.morning.lczxm.cn.gov.cn.lczxm.cn http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn http://www.morning.bpmtj.cn.gov.cn.bpmtj.cn http://www.morning.lwgsk.cn.gov.cn.lwgsk.cn http://www.morning.zshuhd015.cn.gov.cn.zshuhd015.cn