Selenium TestNG:“;未发现任何测试”;通过testng运行测试时

Selenium TestNG:“;未发现任何测试”;通过testng运行测试时,selenium,cucumber,testng,Selenium,Cucumber,Testng,我试图通过testng.xml运行简单的Cucumber/Java测试 所以, 我有testng.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Cucumber Framework"> <test name="Cucumber Tests" junit="

我试图通过testng.xml运行简单的Cucumber/Java测试

所以, 我有testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Cucumber Framework">
<test name="Cucumber Tests" junit="true">
    <classes>
        <class name="CucumberFramework.runner.MainRunner"></class>
    </classes>
</test>
</suite>
但当我将testng.xml作为testng套件运行时,它:

1) 通过我自己的设想

但是

2) 抛出“未发现任何测试”。


我做错了什么?

需要添加@Test注释才能运行。

带有Cucumber和TestNG的项目不需要带有
@Test注释方法的类

未找到测试
可能与您运行测试的方式有关

在下面找到一个显示基本需求的最小项目

假设以下结构

src/test/java/stepdef/StepDefs.java
src/test/java/runner/RunnerTest.java
src/test/resources/features/test.feature
pom.xml
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.suboptimal</groupId>
    <artifactId>cuke-testng3</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>3.0.2</version>
            <type>jar</type>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Cucumber Framework" >
    <test name="Cucumber Tests">
        <classes>
            <class name="runner.RunnerTest"></class>
        </classes>
    </test>
</suite>
StepDefs.java

package stepdef;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;

public class StepDefs {
    @Given("^some step$")
    public void someStep() throws Throwable {
        System.out.println("execute someStep");
    }

    @Then("^this is expected$")
    public void thisIsExpected() throws Throwable {
        System.out.println("execute thisIsExpected");
    }
}
package runner;

import cucumber.api.CucumberOptions;
import cucumber.api.testng.AbstractTestNGCucumberTests;

@CucumberOptions(features = "src/test/resources/features", glue = "stepdef")
public class RunnerTest extends AbstractTestNGCucumberTests {
}
RunnerTest.java

package stepdef;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;

public class StepDefs {
    @Given("^some step$")
    public void someStep() throws Throwable {
        System.out.println("execute someStep");
    }

    @Then("^this is expected$")
    public void thisIsExpected() throws Throwable {
        System.out.println("execute thisIsExpected");
    }
}
package runner;

import cucumber.api.CucumberOptions;
import cucumber.api.testng.AbstractTestNGCucumberTests;

@CucumberOptions(features = "src/test/resources/features", glue = "stepdef")
public class RunnerTest extends AbstractTestNGCucumberTests {
}
该测试可以通过Maven执行,并且

mvn clean test
mvn clean test
输出

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running runner.RunnerTest
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@5eb5c224
execute someStep
execute thisIsExpected

1 Scenarios (1 passed)
2 Steps (2 passed)
0m0.019s

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.552 sec
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
execute someStep
execute thisIsExpected

1 Scenarios (1 passed)
2 Steps (2 passed)
0m0.020s

[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.614 s - in TestSuite
正如最后一行所述,
测试运行:1
黄瓜场景被识别为测试运行

编辑作为TestNG套件执行Cucumber测试的可能性

添加到pom.xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.suboptimal</groupId>
    <artifactId>cuke-testng3</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>3.0.2</version>
            <type>jar</type>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Cucumber Framework" >
    <test name="Cucumber Tests">
        <classes>
            <class name="runner.RunnerTest"></class>
        </classes>
    </test>
</suite>
输出

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running runner.RunnerTest
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@5eb5c224
execute someStep
execute thisIsExpected

1 Scenarios (1 passed)
2 Steps (2 passed)
0m0.019s

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.552 sec
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
execute someStep
execute thisIsExpected

1 Scenarios (1 passed)
2 Steps (2 passed)
0m0.020s

[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.614 s - in TestSuite

@次优-谢谢你这么清楚的解释,现在我知道更多了


关于问题本身——最后我通过删除testng.xml中提到的junit解决了它。正如我在描述中提到的“以testng套件的形式运行”,我应该将这个答案标记为正确的,无意冒犯。

我在电子表格中存储测试数据时遇到了类似的问题。
我用Execute as Y添加了更多的列,这个问题得到了解决。

类a.k.a@test annotation中没有测试方法当您的运行程序扩展TestNG类
AbstractTestNGCucumberTests
时,您不能用JUnit的
@RunWith
对其进行注释。您还可以删除对cucumber.junit的依赖关系。我认为这不对。当使用扩展了
AbstractTestNGCucumberTests
的运行程序时,您可以直接运行运行程序
mvn test…
(当其名称与默认模式匹配时,可以显式或隐式)。无需通过TestNG套件运行runner。这样做TestNG会抱怨运行程序没有
@Test
方法。不需要在那里,因为runner类可以保持为空。是的。对不起,塔潘,我应该移除绿色标志。问题是实际的,测试注释并没有解决它。抱歉搞混了,没关系。感谢@SubOptimal分享这些信息丰富的内容。不客气。很高兴分享我的知识并向其他人学习。您如何运行
testng.xml
套件?我将配置编辑为testng套件,并在我的testng.xml上按run,以确保我们以同样的方式尝试。关于你的帖子,它现在起作用了。