0

我尝试并行运行相同的端到端测试(负载测试,带有 JUnitSampler 的 JMeter)。如果我用真正的 chromeBrowser 运行并行测试,它工作正常。如果我使用 chromeOption “--headless” 运行测试,则不会运行任何测试。真正的 chromeBrowser 和无头 chromeBrowser 之间可能有什么区别?一项使用 headlessBrowser(非并行)的测试也运行良好。

第 1 步 - JUnit 测试:

public class AppTest extends TestCase{
    private Logger logger;
    private WebDriver driver;
    private String user;
    private String passwd;

    @Before    
    @Override
    public void setUp() throws MalformedURLException {
        logger = LoggerFactory.getLogger(AppTest.class);
        user = “user”;
        passwd = “12345”;

        DesiredCapabilities caps = DesiredCapabilities.chrome();

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments(“--headless”);
        chromeOptions.addArguments(“--incognito”);                

        caps.setCapability(ChromeOptions.CAPABILITY, chromeOptions);

        driver = new RemoteWebDriver(new URL(“http://127.0.0.1:4444/wd/hub”), caps);
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);        
    }

    @Test
    public void workFlow() throws InterruptedException {
        driver.get("https://somesite.de");

        try {
            WebElement input = driver.findElement(By.id(“login-form-username”));            
            input.click();
            input.clear();
            input.sendKeys(user);
        } catch (NoSuchElementException e) {
            fail(“Element not found”);
        }
        try {
            Thread.sleep(1000);
            WebElement myButton = driver.findElement(By.className("my-button”));
            myButton.click();
        } catch (NoSuchElementException e) {
            fail(“Element not found”);
        }
        try {
            Thread.sleep(2000);
            WebElement input = driver.findElement(By.id(“password-form-password”));
            input.click();
            input.sendKeys(passwd);           
        } catch (NoSuchElementException e) {
            fail(“Element not found”);
        }
        try {           
            WebElement myButton = driver.findElement(By.className(“my-button”));
            myButton.click();
        } catch (NoSuchElementException e) {
            fail(“Element not found”);
        }

        try {
            Thread.sleep(2000);
            List<WebElement> displayBoxHeaders = driver.findElements(By.className(“box-complete-header”));

            assertThat(displayBoxHeaders.get(1).getText()).contains(user);
            WebElement logo = displayBoxHeaders.get(0);
            String svg = logo.findElement(By.tagName(“svg”)).findElement(By.tagName(“g”)).findElement(By.tagName(“path”)).getAttribute(“class”);
            assertThat(svg).isNotNull().isNotEmpty();

        } catch (NoSuchElementException e) {
            fail();
        }
        try {
            WebElement displayText = driver.findElement(By.id(“ui-form-text”));
            String text = displayText.getText();
            assertThat(text).isNotNull().isNotEmpty();
        } catch (Exception e) {
            fail();
        }
        try {           
            WebElement myButton = driver.findElement(By.className(my-button”));
            myButton.click();
        } catch (NoSuchElementException e) {
            fail(“Element not found”);
        }
    }


    @After
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }

    }

Step2 - JMeter 中的 JUnitSampler 和上面的 JUnitTestClass。

Step3 - Docker 中的 SeleniumGrid

git clone https://github.com/SeleniumHQ/docker-selenium.git

cd docker-selenium

docker run -d -p 4444:4444 --name selenium-hub selenium/hub:3.5.3-boron

docker run -d --link selenium-hub:hub -e NODE_MAX_INSTANCES=100 -e NODE_MAX_SESSION=100  selenium/node-chrome:3.5.3-boron

Step3 - 在 JMeter 中运行单线程:测试成功运行。

Step4 - 在 JMeter 中并行运行 5 个线程:

第一个测试运行成功,其他四个没有。

错误:是 ElementNotFound 在每个失败的测试运行

浏览器实例不具有相同的会话对于测试很重要。

4

0 回答 0