J'ai préparé un framework en utilisant sélénium ayant une exécution parallèle en utilisant le TestNG, je génère le fichier testng.xml par le code où en mettant le mot-clé parallèle à "tests". Mes tests fonctionnent bien, mais une fois que le résultat est généré, la build/JVM ne se termine jamais. Elle passe dans l'interblocage. Après le débogage du code, j'ai trouvé que la ligne ci-dessous marquée ** provoque le problème de blocage.Tests Parallels TestNG en cours Deadlock
private Runnable getTask() {
boolean timedOut = false; // Did the last poll() time out?
for (;;) {
int c = ctl.get();
int rs = runStateOf(c);
// Check if queue empty only if necessary.
if (rs >= SHUTDOWN && (rs >= STOP || workQueue.isEmpty())) {
decrementWorkerCount();
return null;
}
int wc = workerCountOf(c);
// Are workers subject to culling?
boolean timed = allowCoreThreadTimeOut || wc > corePoolSize;
if ((wc > maximumPoolSize || (timed && timedOut))
&& (wc > 1 || workQueue.isEmpty())) {
if (compareAndDecrementWorkerCount(c))
return null;
continue;
}
try {
Runnable r = timed ?
**workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) :**
**workQueue.take();**
if (r != null)
return r;
timedOut = true;
} catch (InterruptedException retry) {
timedOut = false;
}
}
}
S'il vous plaît aider en cas ..
< Thread [main] (Running)
Thread [TestNG] (Running)
Thread [TestNG] (Running)
Daemon Thread [Exec Default Executor] (Running)
Daemon Thread [Exec Stream Pumper] (Running)
Daemon Thread [Exec Stream Pumper] (Running) >
script cas de test
@Test public void Test_test() {
try {
////code///
driver.close();
} catch (Exception err) {
System.out.println(err.getMessage());
Fail(err.getMessage());
}finally{
Closereport();
driver.quit();
}
}
Can S'il vous plaît nous montrer le code de test où vous voyez ce problème? Vous avez fondamentalement partagé le code 'java.util.concurrent.ThreadPoolExecutor # getTask' et sans contexte, il est difficile à déchiffrer où le goulot d'étranglement est –
Pas exactement où je peux dire vous obtenez ceci mais toujours le dernier thread va dans l'impasse.Veuillez trouver ci-dessous de mes fichiers de classe de test –
@Test Public void Test_test() {try { \t \t \t \t //// Code /// \t \t \t \t \t \t driver.close(); \t \t \t \t \t \t} catch (Exception err) { \t \t \t System.out.println (err.getMessage()); \t \t \t Échec (err.getMessage()); \t \t} enfin { \t \t \t Closereport(); Pilote \t \tquitter(); \t \t} } –