有啥方法可以分块而不是完整地划分和运行 testng 测试

Posted

技术标签:

【中文标题】有啥方法可以分块而不是完整地划分和运行 testng 测试【英文标题】:Is there any way to divide and run testng tests in chunks instead of full suite有什么方法可以分块而不是完整地划分和运行 testng 测试 【发布时间】:2019-09-02 21:40:31 【问题描述】:

我的 testng.xml 中有 100 多个测试,大多数测试由于时间问题而失败,但是当我分块运行它们时,它工作正常

我尝试过的一个无效解决方案是将少量测试分成多个 testng.xml 文件并一个一个运行,寻找可以在运行时执行相同操作的替代方案

这是我的 testng.xml 的样子

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite">
    <listeners>
        <listener class-name="baseClasses.TestListener"></listener>
    </listeners>
    <test name="android">
        <parameter name="platform" value="android"></parameter>
        <classes>
           <class name="testCases.android.VerifyLoginLogout" />
           <class name="testCases.android.test1" /> 
           <class name="testCases.android.test2" />
           ...

           <class name="testCases.android.test100" />
        </classes>
    </test>
</suite>

关于如何将测试分成块并在运行时一一运行的任何建议,所以我不需要将测试分成多个 testng.xml 文件

注意 - 甚至尝试在 testng.xml 中以包方式运行

【问题讨论】:

您好 Sunpat,您能详细说明哪些问题不工作吗?上面提供的xml也不起作用吗?还提供有关如何管理驱动程序的详细信息。您是否在同一个驱动程序实例上运行所有测试?例如,创建了驱动程序、打开了应用程序以及用于所有测试的相同会话或为每个测试创建了单独的会话。 好的,这里有更多详细信息 - 1. 一个 java 文件中的一个 @test,2. 为每个测试创建的驱动程序实例。正如我告诉我的那样,我有 100 个测试,当我运行整个 testng.xml 时,将近 30 到 40 个测试失败..但是当我通过选择几个测试再次运行失败的测试时,它通过了..所以我正在寻找一种运行方式是时候从这 100 个测试中缓冲几个测试来运行,然后选择另一个块 n 运行...... 当您说测试在第一次运行时失败并在重新运行时通过,您是否在第一次运行时每次都观察到相同的失败原因?调查和分析故障很重要。能否也分享一下失败的原因和异常详情? 【参考方案1】:

据我所知,您要分批运行测试用例。如果我是正确的,那么这很简单。只需将您的所有测试用例划分为多个test 标签并使用您想要在test 标签中执行的测试类。请看下面。

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite">
    <listeners>
        <listener class-name="baseClasses.TestListener"></listener>
    </listeners>


    <test name="Android-1">
        <parameter name="platform" value="android"></parameter>
        <classes>
           <class name="testCases.android.VerifyLoginLogout" />
           <class name="testCases.android.test1" /> 
           <class name="testCases.android.test2" />
           <class name="testCases.android.test3" />
        </classes>
    </test>


        <test name="Android-2">
        <parameter name="platform" value="android"></parameter>
        <classes>
           <class name="testCases.android.test4" /> 
           <class name="testCases.android.test5" />
           <class name="testCases.android.test6" />

        </classes>
    </test>


</suite>

希望对你有帮助。

【讨论】:

正如我之前提到的,我已经按照包划分了测试[我们框架中每个模块一个包],并且我在测试标签内明智地运行了测试包,只是在寻找一种方法其中 testng 不会缓冲所有测试用例以运行,而是单独运行每个测试。【参考方案2】:

您希望按如下方式“分组”您的测试:

import org.testng.Assert;
import org.testng.annotations.Test;

public class GroupTestExample 
   String message = ".com";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test(groups =  "functest", "checkintest" )

   public void testPrintMessage() 
      System.out.println("Inside testPrintMessage()");
      message = ".com";
      Assert.assertEquals(message, messageUtil.printMessage());
   

   @Test(groups =  "checkintest" )

   public void testSalutationMessage() 
      System.out.println("Inside testSalutationMessage()");
      message = "tutorialspoint" + ".com";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   

   @Test(groups =  "functest" )

   public void testingExitMessage() 
      System.out.println("Inside testExitMessage()");
      message = "www." + "tutorialspoint"+".com";
      Assert.assertEquals(message, messageUtil.exitMessage());
     

然后在您的套件中运行特定组:

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">

      <groups>
         <run>
            <include name = "functest" />
         </run>
      </groups>

      <classes>
         <class name = "GroupTestExample" />
      </classes>

   </test>
</suite>

参考:Tutorials Point: TestNG - Group Test

【讨论】:

我不想按组或打包方式运行。有关我的问题的更多详细信息,请参阅上面的第一条评论。 “批次”和“组”实际上是一回事;您正在尝试将大量案例分解为较小的集合。将所有内容包装在按顺序运行组的脚本中。

以上是关于有啥方法可以分块而不是完整地划分和运行 testng 测试的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——分块

ACM入门之分块

有啥好方法可以指示计算机是不是可以运行特定的程序/软件?

使用 Express 和 GraphQL 而不是简单地使用 Node.js 和 GraphtQL 有啥好处?

scrapy-redis 和 scrapy 有啥区别

scrapy-redis 和 scrapy 有啥区别