标签: testng

testng 中保留顺序和按实例分组是什么意思?

我在 testng 中找不到这两个规范含义的详细解释。有人可以解释一下吗?检查下面的代码。

<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

<test name = "Test1"  group-by-instances="true" preserve-order="true">
    <classes>
        <class name = "com.facebook.tests.SignUp_Test_Factory"></class>
    </classes>
</test>
Run Code Online (Sandbox Code Playgroud)

公共类 SignUp_Test_Factory {

WebDriver driver;
FacebookMainPage fbMainPage;
HashMap<String,String> singUpMap = new HashMap<String,String>();
@Factory(dataProvider = "signUp", dataProviderClass = PagesData.class)
public  SignUp_Test_Factory(String firstName, String lastName, String email) {
    singUpMap.put("firstName", firstName);
    singUpMap.put("lastName", lastName);
    singUpMap.put("email", email);

}
@BeforeClass(alwaysRun = true)
public void setUp(){
    driver = new FirefoxDriver();
    fbMainPage = PageFactory.initElements(driver, FacebookMainPage.class);
}

@AfterClass(alwaysRun = true)
public void teardown(){
    this.driver.quit();
}
@Test
public void loadPage(){
    fbMainPage.loadPage(); …
Run Code Online (Sandbox Code Playgroud)

testng

1
推荐指数
1
解决办法
8816
查看次数

在 Git 预提交挂钩中运行 testng 测试

如果特定的 testng 测试失败,我将如何编写一个 bash 脚本,该脚本将作为 git 预提交挂钩运行以失败?我目前通过 Maven Surefire 运行我的 testng 测试,如下所示:

mvn clean test -Dtest="MyTestName"
Run Code Online (Sandbox Code Playgroud)

git bash testng pre-commit-hook

1
推荐指数
1
解决办法
2658
查看次数

TestNG:并行线程运行类安全吗?

当我并行运行测试类时,失败的测试数量比运行串行测试类时要高。为了调试目的,我在控制台上记录了很多内容,但在并行运行时几乎没有用,因为记录的所有内容都是混乱/无序的。

在我尝试修复日志记录问题以便更好地调试之前,我想知道,如果我设置了parallel="classes",它是否能保证线程安全?我假设如果我设置parallel="tests"两个方法可能会尝试访问范围内的同一对象,从而导致线程安全问题。

IE:

<suite name="test" parallel="classes" thread-count="3">
Run Code Online (Sandbox Code Playgroud)

java testng multithreading thread-safety

1
推荐指数
1
解决办法
6382
查看次数

SoftAssert 正在从其他测试中提取结果

当我这样做时.assertAll()SoftAssert会从其他测试中提取结果。

例子:

public SoftAssert softAssert = new SoftAssert();

@Test(priority = 1)
public void newTest1() {
    softAssert.assertTrue(false, "test1");
    softAssert.assertAll();
}

@Test(priority = 2)
public void newTest2() {
    softAssert.assertTrue(false, "test2");
    softAssert.assertAll();
}
Run Code Online (Sandbox Code Playgroud)

newTest1测试结果:

java.lang.AssertionError: The following asserts failed:
test1 expected [true] but found [false]`
Run Code Online (Sandbox Code Playgroud)

newTest2测试结果:

java.lang.AssertionError: The following asserts failed:
test1 expected [true] but found [false],
test2 expected [true] but found [false]`
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

testng.version   == 6.9.10
selenium.version == 2.53.1
java.version     == 1.8.0_65-b17
Run Code Online (Sandbox Code Playgroud)

java testng selenium

1
推荐指数
1
解决办法
605
查看次数

1
推荐指数
1
解决办法
2249
查看次数

为什么 TestNG 抛出“javax.xml.parsers.ParserConfigurationException:不支持验证”错误

将 TestNG 的实现从 6.11 升级到 6.13.1 后出现错误。我有一个 ANT 构建(尝试在 ANT 1.9.4 和 1.10.1 上构建,但出现同样的失败),它触发了包含一个类的 TestNG 套件。完成所有 ANT 设置后,它调用 TestNG 开始测试执行,我立即收到以下错误:

[testng] javax.xml.parsers.ParserConfigurationException: validation is not supported
[testng]    at org.gjt.xpp.jaxp11.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:100)
[testng]    at org.testng.xml.XMLParser.<clinit>(XMLParser.java:29)
[testng]    at org.testng.xml.Parser.<clinit>(Parser.java:34)
[testng]    at org.testng.TestNG.parseSuite(TestNG.java:290)
[testng]    at org.testng.TestNG.initializeSuitesAndJarFile(TestNG.java:334)
[testng]    at org.testng.TestNG.initializeEverything(TestNG.java:974)
[testng]    at org.testng.TestNG.run(TestNG.java:988)
[testng]    at org.testng.TestNG.privateMain(TestNG.java:1330)
[testng]    at org.testng.TestNG.main(TestNG.java:1299)
[testng] [TestNG] [ERROR] java.lang.NullPointerException
[testng] Exception in thread "main" java.lang.NullPointerException
[testng]    at org.testng.TestNG.getStatus(TestNG.java:206)
[testng]    at org.testng.TestNG.main(TestNG.java:1300)
[testng] The tests failed.
Run Code Online (Sandbox Code Playgroud)

这是我的 build.xml:

<project name="6 - GW Testing" …
Run Code Online (Sandbox Code Playgroud)

ant testng xml-parsing

1
推荐指数
1
解决办法
1795
查看次数

如何将 TestNG 参数传递给 Cucumber?

我正在尝试在不同的浏览器下运行我的黄瓜测试,所以我有test.xml(是的,目前只有一种浏览器)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SelfCare" verbose="1" thread-count="1" parallel="tests" configfailurepolicy="continue">
    <parameter name="environment" value="TEST" />
    <test name="Chrome">
        <parameter name="browser" value="chrome" />
        <parameter name="width" value="1024" />
        <parameter name="height" value="768" />
        <classes>
            <class name="TestNGRunner">
                <methods>
                    <include name="scenario"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>
Run Code Online (Sandbox Code Playgroud)

对于这个 TestNG 运行程序类,我可以browser从该运行程序类访问参数,但我需要将此变量传递给 Cucumber,其中根据传递的变量创建浏览器实例。到目前为止,我在没有 TestNG 的情况下使用它,并且通过环境变量传递这些变量,但是我认为如果我在不同的浏览器上并行运行测试,这将不起作用。

import cucumber.api.CucumberOptions;
import cucumber.api.testng.CucumberFeatureWrapper;
import cucumber.api.testng.PickleEventWrapper;
import cucumber.api.testng.TestNGCucumberRunner;
import org.testng.annotations.*;

@CucumberOptions(
        plugin = {"html:target/cucumber-html-report",
                "json:target/cucumber.json",
                "pretty:target/cucumber-pretty.txt",
                "junit:target/cucumber-results.xml"},
        strict = true,
        extraGlue = {"src/test/resources/Hooks.java"},
        features = {"src/test/resources/Header.feature"}
) …
Run Code Online (Sandbox Code Playgroud)

java testng parameter-passing cucumber cucumber-java

1
推荐指数
1
解决办法
5967
查看次数

测试不是注释类型

在我的Maven项目中,我添加了testng依赖项,如下所示:

<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.1.0</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是,当我编写如下简单测试时,它找不到@Test

public class Test{


    @Test
    public void test() {

    }

}
Run Code Online (Sandbox Code Playgroud)

它抱怨Test is not an annotation type 我尝试通过以下行手动添加测试:

import org.testng.annotations.Test;
Run Code Online (Sandbox Code Playgroud)

但它再次抱怨:

The import org.testng.annotations.Test conflicts with a type defined in the same file
Run Code Online (Sandbox Code Playgroud)

我已经通过 Maven 强制更新我的项目好几次了,但仍然没有成功。

eclipse testng maven

1
推荐指数
1
解决办法
8740
查看次数

如何有效地创建 API 模拟以对每个微服务进行隔离测试?

我们有一个应用程序,其中包含十多个使用 Spring Boot 的基于 Rest 的微服务。我想创建自动化测试来在模拟生产者服务 API 的同时隔离测试我的每个服务。我尝试使用 wiremock 创建模拟,但手动创建这些 API 请求和模拟响应非常乏味。有没有更好的方法来实施服务测试?

testng automated-tests mocking microservices

1
推荐指数
1
解决办法
92
查看次数

testng测试用例中的调试问题

我使用的是intelliJ v2021.3.2(社区版)

我的项目是 java Maven TestNG (v7.4.0) 项目

当我运行测试用例时,它执行成功,但是当我尝试调试时,出现以下错误:

Intellij 显示错误“测试框架意外退出”

这是控制台中的错误

Exception in thread "main" java.lang.ClassCircularityError: java/lang/WeakPairMap$Pair$Weak
    ..
    at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:107)
Run Code Online (Sandbox Code Playgroud)

以下是一个代码示例(我使用的是 SHAFT 引擎),但任何测试用例调试都不适用于所有情况

    @Test (priority = 1)
    public void UserCanLogin() {

            homeObject = new HomePage(driver);
            profilePageObject = new ProfilePage(driver);
            loginObject = new LoginPage(driver);

            homeObject.openLoginPage();
            loginObject.UserLogin(individualUserMail, individualUserPassword);

            Validations.assertThat().element(driver, profilePageObject.getProfileIconDropDown()).exists().perform();
            profilePageObject.ProfileIconDropDown();
            profilePageObject.userLogOut();

    }
Run Code Online (Sandbox Code Playgroud)

java testng selenium intellij-idea

1
推荐指数
1
解决办法
2340
查看次数