• Testng 常用总结


    自动化测试过程中使用testng管理测试用例是常规的做法,我们需要对它的特性有一个深入的了解和认识:

    testng的原理:

    参考:https://blog.csdn.net/dm_vincent/article/category/1162831 

    testng基于拓扑排序管理测试用例套件:

    拓扑排序最经典的应用场景就是对于Jobs/Tasks的规划,即对于存在前后依赖关系的任务如何安排一个计划来执行它们。

    相关的资料,可以参考维基百科:

    http://en.wikipedia.org/wiki/Topological_sorting里面介绍的比较详细。

    testng的常规使用:

    一、 testng的测试用例部分

    1、 测试用例如何设置优先级? 如何分组? 

    /**
         * @author XXX
         * @Comment xxx
         * @throws Exception
         */
        @Test(priority = 0, groups = { "Debug", "IM" }, description = "mobile-9118:添加群-需要身份验证",enabled="false",timeout="1000",
    invocationCount=5,
    ) public void testAddGroup() throws Exception { //测试代码部分 logger.info("添加群组成功"); }

    看上面代码部分,@test里面的priority确定了优先级,数字越小,越优先执行;

    • description : 测试方法描述信息。(建议为每个测试方法添加有意义的描述信息,这将会在最后的测试报告中展示出来)
    • enabled : 默认为true,如果指定为false,表示不执行该测试方法。
    • timeout : 指定整个测试方法的超时时间。单位是毫秒。
    • invocationCount : 指定测试方法需要被调用的次数。一般运用在性能测试,例如执行500次
    • alwaysRun : 如果=true,表示即使该测试方法所依赖的前置测试有失败的情况,也要执行

    分组的话,需要和testng.xml进行配合,在xml里面配置了运行的group 就只会跑这一部分:

    <suite name="Suite1">
        <test name="login">
            <groups>
                <run>
                    <include name="group1" />
                    <exclude name="group2" />
                </run>
            </groups>
            <classes>
                <class name="com.TestngGroups" />         
            </classes>
        </test>
    </suite>

    2. tsetng读取第三方数据源

    使用dataprovider的时候,有2种方式可以传入参数:

      2.1.返回类型是Iterator<Object[]>,不用管有多少组测试数据,可以抽取出来以map的id为参数作为公用的提取数据方法。

      2.2.返回类型是Object[][],明确知道有几组测试数据--可以用hashmap传入

    下面的代码是一个例子,通过读取excel,将列名作为map的key值,对应的excel 值作为value, 测试的时候可以直接使用data.get("l列名")获取数据

     @DataProvider(name = "interfaceTestData")
        public Object[][] data() throws IOException {
            Properties properties = new Properties();
            // 使用InPutStream流读取properties文件
            String Path = System.getProperty("user.dir") + File.separator + "config.properties";
            BufferedReader bufferedReader = new BufferedReader(new FileReader(Path));
            BufferedInputStream buff = new BufferedInputStream(new FileInputStream(Path));
            properties.load(new InputStreamReader(buff, "utf-8"));
    
    //        properties.load(bufferedReader);
            String filePath = properties.getProperty("excelFilePath");
            System.out.println(filePath);
            excelTest testcase = new excelTest();
            return testcase.testData(filePath);
        }
    
    
        @Test(description = "接口自动化测试", dataProvider = "interfaceTestData")
        public void interTest(Map<String, String> interData) {
         
        //获取Map里面对应的数据
        String caseId = interData.get("用例ID");
        String casename = interData.get("用例名");
        //测试代码
    }

    testng.xml 详解

    这个可以参考上一个博客: https://www.cnblogs.com/Ronaldo-HD/p/9235210.html 

    给个通常用的例子:

    listeners : 监听器,可以生成多份测试报告

    test: 需要测试的类,包含的method 就是需要执行多线程的method

    parallel:  需要进行多线程的method名字,需搭配thread-count使用

    thread-count: 并发的线程数量,默认为5

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="memory test" parallel="tests" thread-count="2" >
      <listeners>
        <listener class-name="org.reportng.HTMLReporter" />
        <listener class-name="org.reportng.JUnitXMLReporter" />
      </listeners>
      <test verbose="2" name="XXXXX">
        <classes>
              <class name="appium.XXXX.testcase.Test">
              <methods>
              <include name="xxxx"></include>
              </methods>
          </class>
        </classes>
      </test>
       <test verbose="2" name="MEM">
        <classes>
              <class name="appium.xxx.manage.MemInfo">
          </class>
        </classes>
      </test> 
    </suite>
  • 相关阅读:
    hdu 1715 大菲波数
    Netty 应用程序的一个一般准则:尽可能的重用 EventLoop,以减少线程创建所带来的开销。
    引入 netty网关,向flume提交数据
    JavaBean的任务就是: “Write once, run anywhere, reuse everywhere” Enterprise JavaBeans
    API网关+Kubernetes集群的架构替代了传统的Nginx(Ecs)+Tomcat(Ecs)
    tmp
    全量日志 requestId
    googlr 黄金法则 监控
    数据链路层3个基本问题
    netty4.x 实现接收http请求及响应
  • 原文地址:https://www.cnblogs.com/Ronaldo-HD/p/9869821.html
Copyright © 2020-2023  润新知