我在 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 测试失败,我将如何编写一个 bash 脚本,该脚本将作为 git 预提交挂钩运行以失败?我目前通过 Maven Surefire 运行我的 testng 测试,如下所示:
mvn clean test -Dtest="MyTestName"
Run Code Online (Sandbox Code Playgroud) 当我并行运行测试类时,失败的测试数量比运行串行测试类时要高。为了调试目的,我在控制台上记录了很多内容,但在并行运行时几乎没有用,因为记录的所有内容都是混乱/无序的。
在我尝试修复日志记录问题以便更好地调试之前,我想知道,如果我设置了parallel="classes",它是否能保证线程安全?我假设如果我设置parallel="tests"两个方法可能会尝试访问范围内的同一对象,从而导致线程安全问题。
IE:
<suite name="test" parallel="classes" thread-count="3">
Run Code Online (Sandbox Code Playgroud) 当我这样做时.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) 我找到了JUnit 的解决方案,但找不到 TestNG 的解决方案。
将 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) 我正在尝试在不同的浏览器下运行我的黄瓜测试,所以我有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) 在我的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 强制更新我的项目好几次了,但仍然没有成功。
我们有一个应用程序,其中包含十多个使用 Spring Boot 的基于 Rest 的微服务。我想创建自动化测试来在模拟生产者服务 API 的同时隔离测试我的每个服务。我尝试使用 wiremock 创建模拟,但手动创建这些 API 请求和模拟响应非常乏味。有没有更好的方法来实施服务测试?
我使用的是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)