【问题标题】:Executing multiple test sequentially with different parameters testng使用不同的参数顺序执行多个测试 testng
【发布时间】:2014-08-30 10:06:21
【问题描述】:

我试图使用数据提供程序按顺序运行具有不同参数的多个测试,基本上场景是假设有 5 个测试完成一个测试流程,并且所有测试用例应该按顺序运行假设在数据提供程序中返回的第一个参数是“空气”那么所有 5 个测试都应该使用参数“air”运行,然后是第二个参数,依此类推。

目前在 dataprovider 中发生的情况是,如果假设参数是“air”、“earth”,那么首先使用这两个参数执行测试,然后继续进行下一个测试。

所以我担心的是所有测试都应该首先使用第一个参数 air 运行,然后所有测试都应该使用下一个参数“earth”执行。

【问题讨论】:

    标签: selenium-webdriver testng


    【解决方案1】:

    所以我担心的是所有测试都应该首先使用第一个参数 air 运行,然后所有测试都应该使用下一个参数 "earth" 执行

    这是我为输入“空气”和“地球”得到的输出

    Test-1 with data: Air
    Test-2 with data: Air
    Test-1 with data: Water
    Test-2 with data: Water
    

    测试类 - RandomTest

    public class RandomTest {
        private String str = "";
    
        public RandomTest(String str) {
        this.str = str;
        }
    
        @Test
        public void firstTest() {
        System.out.println("Test-1 with data: "+str);
        }
    
        @Test
        public void secondTest() {
        System.out.println("Test-2 with data: "+str);
    }}
    

    工厂类 - SampleFactory

    public class SampleFactory {
    @Factory(dataProvider="dp")
    public Object[] createInstances(String str) {
        return new Object[] {new RandomTest(str)};
    }
    
    @DataProvider(name="dp")
    public static Object[][] createData() {
        return new Object[][] {
                new Object[] { new String("Air") },
                new Object[] { new String("Water") }
        };
    }}
    

    从 testng.xml 运行类 SampleFactory, 请注意:group-by-instances="true"

    <suite name="Suite-A" verbose="1">
    <test name="test" group-by-instances="true">
        <classes>
            <class name="tests.SampleFactory"></class>
        </classes>
    </test>
    </suite>
    

    参考:http://testng.org/doc/documentation-main.html#factories
    参考:http://java.dzone.com/articles/testng-run-tests-sequentially

    【讨论】:

    • 感谢您正在寻找确切的东西 :)
    【解决方案2】:

    您可以在不更改代码的情况下更改参数,只更改 testng.xml 文件。

    你的 Java 类:

     import org.testng.annotations.Parameters;
     import org.testng.annotations.Test;
    
     public class ParameterizedTest1 {
        @Test
        @Parameters("myName")
        public void parameterTest(String myName) {
           System.out.println("Parameterized value is : " + myName);
        }
     }
    

    testng.xml:

     <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    
     <suite name="Suite1">
      <test name="test1">
        <parameter name="myName" value="manisha"/> 
        <classes>
           <class name="ParameterizedTest1" />
        </classes>
      </test>
     </suite>
    

    http://www.tutorialspoint.com/testng/testng_parameterized_test.htm

    【讨论】:

      【解决方案3】:

      您可以使用nose-ittr,它是用于支持参数化测试的鼻子扩展。

      示例:

      @ittr(number=[1, 2, 3, 4])  
      def test_even(self):
          assert_equal(self.number % 2, 0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多